Browse Source

Added some class property to LeFactory generated classes to avoid Model calls

Yann Weber 9 years ago
parent
commit
0c51d6a483

+ 2
- 6
EditorialModel/fields.py View File

@@ -56,11 +56,7 @@ class EmField(EmComponent):
56 56
 
57 57
         self.fieldtype = fieldtype
58 58
         self._fieldtype_args = kwargs
59
-        self._fieldtype_args.update({'nullable' : nullable, 'uniq' : uniq})
60
-        #If internal is set, give it to the fieldtype
61
-        if self.internal:
62
-            self._fieldtype_args['internal'] = self.internal
63
-
59
+        self._fieldtype_args.update({'nullable' : nullable, 'uniq' : uniq, 'internal': self.internal})
64 60
         try:
65 61
             fieldtype_instance = self._fieldtype_cls(**self._fieldtype_args)
66 62
         except AttributeError as e:
@@ -86,7 +82,7 @@ class EmField(EmComponent):
86 82
     ## @brief Get the fieldtype instance
87 83
     # @return a fieldtype instance
88 84
     def fieldtype_instance(self):
89
-        return self._fieldtype_cls(self._fieldtype_args)
85
+        return self._fieldtype_cls(**self._fieldtype_args)
90 86
         
91 87
 
92 88
     ## @brief Return the list of relation fields for a rel_to_type

+ 5
- 2
EditorialModel/fieldtypes/generic.py View File

@@ -47,6 +47,11 @@ class GenericFieldType(object):
47 47
         for argname,argvalue in kwargs.items():
48 48
             setattr(self, argname, argvalue)
49 49
     
50
+    ## @return A fieldtype name from an instance
51
+    @property
52
+    def name(self):
53
+        return self.__module__.split('.')[-1]
54
+    
50 55
     ## @brief Check if a value is correct
51 56
     # @param value * : The value
52 57
     # @throw TypeError if not valid
@@ -68,8 +73,6 @@ class GenericFieldType(object):
68 73
     @staticmethod
69 74
     def module_name(fieldtype_name):
70 75
         return 'EditorialModel.fieldtypes.%s'%(fieldtype_name)
71
-        
72
-
73 76
     
74 77
     ## @brief Transform a value into a valid python representation according to the fieldtype
75 78
     # @param value ? : The value to cast

+ 2
- 0
leobject/leclass.py View File

@@ -8,6 +8,8 @@ class LeClass(object):
8 8
     
9 9
     ## @brief Stores fieldtypes by field name
10 10
     _fieldtypes = dict()
11
+    ## @brief Stores relation with some LeType using rel2type fields. Key = rel2type fieldname value = LeType class
12
+    _linked_types = dict()
11 13
     ## @brief Stores fieldgroups and the fields they contains
12 14
     _fieldgroups = dict()
13 15
 

+ 36
- 3
leobject/lefactory.py View File

@@ -9,7 +9,14 @@ from EditorialModel.fieldtypes.generic import GenericFieldType
9 9
 # The name is not good but i've no other ideas for the moment
10 10
 class LeFactory(object):
11 11
     
12
-    def __init__(self):raise NotImplementedError("Not designed (yet?) to be implemented")
12
+    def __init__(LeFactory):raise NotImplementedError("Not designed (yet?) to be implemented")
13
+
14
+    ## @brief Convert an EmType or EmClass name in a python class name
15
+    # @param name str : The name
16
+    # @return name.title()
17
+    @staticmethod
18
+    def name2classname(name):
19
+        return name.title()
13 20
 
14 21
     ## @brief Return a call to a FieldType constructor given an EmField
15 22
     # @param emfield EmField : An EmField
@@ -57,8 +64,13 @@ class LeObject(_LeObject):\n\
57 64
         
58 65
         for emclass in model.components(EditorialModel.classes.EmClass):
59 66
             cls_fields = dict()
67
+            cls_linked_types = list()
60 68
             for field in emclass.fields():
61 69
                 cls_fields[field.name] = LeFactory.fieldtype_construct_from_field(field)
70
+                fti = field.fieldtype_instance()
71
+                if fti.name == 'rel2type':
72
+                    #relationnal field/fieldtype
73
+                    cls_linked_types.append(LeFactory.name2classname(model.component(fti.rel_to_type_id).name))
62 74
             cls_fieldgroup = dict()
63 75
             for fieldgroup in emclass.fieldgroups():
64 76
                 cls_fieldgroup[fieldgroup.name] = list()
@@ -68,21 +80,42 @@ class LeObject(_LeObject):\n\
68 80
             result += "\n\
69 81
 class %s(LeObject, LeClass):\n\
70 82
     _fieldtypes = %s\n\
83
+    _linked_types = [%s]\n\
71 84
     _fieldgroups = %s\n\
72 85
 \n\
73
-"%(emclass.name.title(), cls_fields.__repr__(), cls_fieldgroup.__repr__())
86
+"%(
87
+    LeFactory.name2classname(emclass.name),
88
+    cls_fields.__repr__(),
89
+    ','.join(cls_linked_types),
90
+    cls_fieldgroup.__repr__()
91
+)
74 92
 
75 93
         for emtype in model.components(EditorialModel.types.EmType):
76 94
             type_fields = list()
95
+            type_superiors = list()
77 96
             for field in emtype.fields():
78 97
                 type_fields.append(field.name)
79 98
 
99
+            for nat, sup_l in emtype.superiors().items():
100
+                type_superiors.append('%s:[%s]'%(
101
+                    nat.__repr__(),
102
+                    ','.join([ LeFactory.name2classname(sup.name) for sup in sup_l])
103
+                ))
104
+
105
+
80 106
             result += "\n\
81 107
 class %s(%s,LeType):\n\
82 108
     _fields = %s\n\
109
+    _superiors = {%s}\n\
83 110
     _leClass = %s\n\
84 111
 \n\
85
-"%(emtype.name.title(), emtype.em_class.name.title(), type_fields.__repr__(), emtype.em_class.name.title())
112
+"%(
113
+    LeFactory.name2classname(emtype.name),
114
+    LeFactory.name2classname(emtype.em_class.name),
115
+    type_fields.__repr__(),
116
+    ','.join(type_superiors),
117
+    LeFactory.name2classname(emtype.em_class.name)
118
+)
86 119
 
87 120
         return result
88 121
 

+ 2
- 0
leobject/letype.py View File

@@ -10,6 +10,8 @@ class LeType(object):
10 10
     
11 11
     ## @brief Stores selected fields with key = name
12 12
     _fields = list()
13
+    ## @brief Allowed LeType superiors 
14
+    _superiors = list()
13 15
     ## @brief Stores the class of LeClass
14 16
     _leclass = None
15 17
     

Loading…
Cancel
Save