浏览代码

Fixing tests and other classes to fit recent changes

Yann Weber 9 年前
父节点
当前提交
89667ee1d1

+ 8
- 3
DataSource/MySQL/migrationhandler.py 查看文件

@@ -366,6 +366,7 @@ PRIMARY KEY({pk_name})
366 366
     # @param table_name str : The table name
367 367
     # @param col_name str : The columns name
368 368
     # @param col_fieldtype EmFieldype the fieldtype
369
+    # @return True if the column was added else return False
369 370
     def _add_column(self, table_name, col_name, col_fieldtype, drop_if_exists=False):
370 371
 
371 372
         col_name = utils.column_name(col_name)
@@ -391,6 +392,8 @@ ADD COLUMN {col_name} {col_type} {col_specs};"""
391 392
             else:
392 393
                 #LOG
393 394
                 print("Aborded, column `%s` exists" % col_name)
395
+                return False
396
+        return True
394 397
 
395 398
     ## @brief Add a foreign key
396 399
     # @param src_table_name str : The name of the table where we will add the FK
@@ -406,7 +409,7 @@ ADD COLUMN {col_name} {col_type} {col_specs};"""
406 409
         if fk_name is None:
407 410
             fk_name = utils.get_fk_name(src_table_name, dst_table_name)
408 411
 
409
-        self._del_fk(src_table_name, dst_table_name)
412
+        self._del_fk(src_table_name, dst_table_name, fk_name)
410 413
 
411 414
         self._query("""ALTER TABLE {src_table}
412 415
 ADD CONSTRAINT {fk_name}
@@ -422,12 +425,14 @@ FOREIGN KEY ({src_col}) references {dst_table}({dst_col});""".format(
422 425
     # @param src_table_name str : The name of the table where the FK is
423 426
     # @param dst_table_name str : The name of the table the FK point on
424 427
     # @warning fails silently
425
-    def _del_fk(self, src_table_name, dst_table_name):
428
+    def _del_fk(self, src_table_name, dst_table_name, fk_name = None):
429
+        if fk_name is None:
430
+            fk_name = utils.escape_idname(utils.get_fk_name(src_table_name, dst_table_name))
426 431
         try:
427 432
             self._query("""ALTER TABLE {src_table}
428 433
 DROP FOREIGN KEY {fk_name}""".format(
429 434
                 src_table=utils.escape_idname(src_table_name),
430
-                fk_name=utils.escape_idname(utils.get_fk_name(src_table_name, dst_table_name))
435
+                fk_name=fk_name
431 436
             ))
432 437
         except self._dbmodule.err.InternalError:
433 438
             # If the FK don't exists we do not care

+ 3
- 3
DataSource/MySQL/test/test_datasource.py 查看文件

@@ -17,10 +17,10 @@ import pymysql
17 17
 
18 18
 import leapi.test.utils #Code generation functions
19 19
 
20
-import Lodel.settings
20
+from Lodel.settings import Settings
21 21
 import DataSource.MySQL
22 22
 from DataSource.MySQL.leapidatasource import LeDataSourceSQL as DataSource
23
-from DataSource.MySQL.common_utils import MySQL as db_utils
23
+import DataSource.MySQL.utils as db_utils
24 24
 from EditorialModel.classtypes import common_fields, relations_common_fields
25 25
 
26 26
 class DataSourceTestCase(TestCase):
@@ -39,7 +39,7 @@ class DataSourceTestCase(TestCase):
39 39
         with patch.object(mosql.db.Database, '__init__', return_value=None) as mock_db:
40 40
             #Test __init__ without arguments
41 41
             DataSource()
42
-            conn_args = db_utils.connections['default']
42
+            conn_args = Settings.get('datasource')['default']
43 43
             db_module = conn_args['module']
44 44
             del(conn_args['module'])
45 45
             mock_db.assert_called_once_with(db_module, **conn_args)

+ 0
- 31
DataSource/MySQL/utils.py 查看文件

@@ -60,37 +60,6 @@ def escape_idname(idname):
60 60
         raise ValueError("Invalid name : '%s'" % idname)
61 61
     return '`%s`' % idname
62 62
 
63
-## @brief Given a fieldtype, returns a MySQL type specifier
64
-# @param emfieldType EmFieldType : A fieldtype
65
-# @return str
66
-def get_type_spec_from_fieldtype(emfieldtype):
67
-
68
-    ftype = emfieldtype.ftype
69
-
70
-    if ftype == 'char' or ftype == 'str':
71
-        res = "VARCHAR(%d)" % emfieldtype.max_length
72
-    elif ftype == 'text':
73
-        res = 'TEXT'
74
-    elif ftype == 'datetime':
75
-        res = "DATETIME"
76
-        # client side workaround for only one column with CURRENT_TIMESTAMP : giving NULL to timestamp that don't allows NULL
77
-        # cf. https://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html#idm139961275230400
78
-        # The solution for the migration handler is to create triggers :
79
-        # CREATE TRIGGER trigger_name BEFORE INSERT ON `my_super_table`
80
-        # FOR EACH ROW SET NEW.my_date_column = NOW();
81
-        # and
82
-        # CREATE TRIGGER trigger_name BEFORE UPDATE ON
83
-    elif ftype == 'bool':
84
-        res = "BOOL"
85
-    elif ftype == 'int':
86
-        res = "INT"
87
-    elif ftype == 'rel2type':
88
-        res = "INT"
89
-    else:
90
-        raise ValueError("Unsupported fieldtype ftype : %s" % ftype)
91
-
92
-    return res
93
-
94 63
 ## Brief add table prefix to a column name
95 64
 # @param name string: column name to prefix
96 65
 # @param prefixes dict(prefix:list(name,))

+ 2
- 2
EditorialModel/fieldtypes/leo.py 查看文件

@@ -57,8 +57,8 @@ class EmFieldType(GenericFieldType):
57 57
     def check_sup_consistency(self, lec, fname, datas):
58 58
         if lec.implements_lerel2type():
59 59
             # Checking consistency for a rel2type relation
60
-            lesup = datas['lesup']
61
-            lesub = datas['lesub']
60
+            lesup = datas[lec._lesup_name]
61
+            lesub = datas[lec._lesub_name]
62 62
             if lesub.__class__ not in lesup._linked_types:
63 63
                 return FieldTypeError("Rel2type not authorized between %s and %s"%(lesup, lesub))
64 64
         pass

+ 2
- 2
EditorialModel/fieldtypes/naturerelation.py 查看文件

@@ -26,8 +26,8 @@ class EmFieldType(EmFieldType):
26 26
         #if not isinstance(lec, lerelation._LeRelation):
27 27
         #    return ValueError("A field naturerelation has to be in a LeRelation object, but this one is in a '%s'"%lec.__name__)
28 28
         nature = datas[fname]
29
-        lesup = datas['lesup']
30
-        lesub = datas['lesub']
29
+        lesup = datas[lec._lesup_name]
30
+        lesub = datas[lec._lesub_name]
31 31
         if nature is None:
32 32
             #if not isinstance(lec, lerelation.LeRel2Type):
33 33
             #Replace with a test from _LeCrud

+ 4
- 4
leapi/lecrud.py 查看文件

@@ -140,7 +140,7 @@ class _LeCrud(object):
140 140
     # @param cls Class: a Class or instanciated object
141 141
     @classmethod
142 142
     def implements_lerelation(cls):
143
-        return hasattr(cls, '_lesup_fieldtype')
143
+        return hasattr(cls, '_lesup_name')
144 144
     
145 145
     ## @return maybe Bool: True if cls implements LeRel2Type
146 146
     # @param cls Class: a Class or instanciated object
@@ -391,7 +391,7 @@ class _LeCrud(object):
391 391
         ret_field_list = list()
392 392
         for field in field_list:
393 393
             if cls._field_is_relational(field):
394
-                ret = cls._prepare_relational_field(field)
394
+                ret = cls._prepare_relational_fields(field)
395 395
             else:
396 396
                 ret = cls._check_field(field)
397 397
 
@@ -470,7 +470,7 @@ class _LeCrud(object):
470 470
         for field, operator, value in filters:
471 471
             if cls._field_is_relational(field):
472 472
                 #Checks relational fields
473
-                ret = cls._prepare_relational_field(field)
473
+                ret = cls._prepare_relational_fields(field)
474 474
                 if isinstance(ret, Exception):
475 475
                     err_l[field] = ret
476 476
                 else:
@@ -524,7 +524,7 @@ class _LeCrud(object):
524 524
     # @return True if the field is relational else False
525 525
     @staticmethod
526 526
     def _field_is_relational(field):
527
-        return field.startswith('superior.') or field.startswith('subordinate')
527
+        return field.startswith('superior.') or field.startswith('subordinate.')
528 528
 
529 529
 ## @page leobject_filters LeObject query filters
530 530
 # The LeObject API provide methods that accept filters allowing the user

+ 1
- 207
leapi/leobject.py 查看文件

@@ -119,7 +119,7 @@ class _LeObject(_LeCrud):
119 119
     # @param field str : a relational field
120 120
     # @return a nature
121 121
     @staticmethod
122
-    def _prepare_relational_field(field):
122
+    def _prepare_relational_fields(field):
123 123
         spl = field.split('.')
124 124
         if len(spl) != 2:
125 125
             return ValueError("The relationalfield '%s' is not valid"%field)
@@ -134,212 +134,6 @@ class _LeObject(_LeCrud):
134 134
         else:
135 135
             return ValueError("Invalid preffix for relationnal field : '%s'"%spl[0])
136 136
 
137
-    ## @brief Check if a LeType is a hierarchy root
138
-    @staticmethod
139
-    def ___is_root(leo):
140
-        if isinstance(leo, leapi.letype.LeType):
141
-            return False
142
-        elif isinstance(leo, LeRoot):
143
-            return True
144
-        raise ValueError("Invalid value for a LeType : %s"%leo)
145
-    
146
-    ## @brief Return a LeRoot instance
147
-    @staticmethod
148
-    def ___get_root():
149
-        return LeRoot()
150
-
151
-    ## @brief Link two leobject together using a rel2type field
152
-    # @param lesup LeType : LeType child class instance linked as superior
153
-    # @param lesub LeType : LeType child class instance linked as subordinate
154
-    # @param **rel_attr : Relation attributes
155
-    # @return True if linked without problems
156
-    # @throw LeObjectError if the link is not valid
157
-    # @throw LeObkectError if the link already exists
158
-    # @throw AttributeError if an non existing relation attribute is given as argument
159
-    # @throw ValueError if the relation attrivute value check fails
160
-    # 
161
-    # @todo Code factorisation on relation check
162
-    # @todo unit tests
163
-    @classmethod
164
-    def ___link_together(cls, lesup, lesub, rank = 'last', **rel_attr):
165
-        if lesub.__class__ not in lesup._linked_types.keys():
166
-            raise LeObjectError("Relation error : %s cannot be linked with %s"%(lesup.__class__.__name__, lesub.__class__.__name__))
167
-
168
-        for attr_name in rel_attr.keys():
169
-            if attr_name not in [ f for f,g in lesup._linked_types[lesub.__class__] ]:
170
-                raise AttributeError("A rel2type between a %s and a %s doesn't have an attribute %s"%(lesup.__class__.__name__, lesub.__class__.__name__))
171
-            if not sup._linked_types[lesub.__class__][1].check(rel_attr[attr_name]):
172
-                raise ValueError("Wrong value '%s' for attribute %s"%(rel_attr[attr_name], attr_name))
173
-
174
-        #Checks that attributes are uniq for this relation
175
-        rels_attr = [ attrs for lesup, lesub, attrs in cls.links_get(lesup) if lesup == lesup ]
176
-        for e_attrs in rels_attrs:
177
-            if rel_attr == e_attrs:
178
-                raise LeObjectError("Relation error : a relation with the same attributes already exists")
179
-
180
-        return cls._datasource.add_related(lesup, lesub, rank, **rel_attr)
181
-    
182
-    ## @brief Get related objects
183
-    # @param leo LeType(instance) : LeType child class instance
184
-    # @param letype LeType(class) : the wanted LeType child class (not instance) 
185
-    # @param leo_is_superior bool : if True leo is the superior in the relation
186
-    # @return A dict with LeType child class instance as key and dict {rel_attr_name:rel_attr_value, ...}
187
-    # @throw LeObjectError if the relation is not possible
188
-    # 
189
-    # @todo Code factorisation on relation check
190
-    # @todo unit tests
191
-    @classmethod
192
-    def ___linked_together(cls, leo, letype, leo_is_superior = True):
193
-        valid_link = letype in leo._linked_types.keys() if leo_is_superior else leo.__class__ in letype._linked_types.keys()
194
-
195
-        if not valid_link:
196
-            raise LeObjectError("Relation error : %s have no links with %s"%(
197
-                leo.__class__ if leo_is_superior else letype,
198
-                letype if leo_is_superior else leo.__class__
199
-            ))
200
-
201
-        return cls._datasource.get_related(leo, letype, leo_is_superior)
202
-    
203
-    ## @brief Fetch a relation and its attributes
204
-    # @param id_relation int : the relation identifier
205
-    # @return a tuple(lesup, lesub, dict_attr) or False if no relation exists with this id
206
-    # @throw Exception if the relation is not a rel2type relation
207
-    @classmethod
208
-    def ___link_get(cls, id_relation):
209
-        return cls._datasource.get_relation(id_relation)
210
-    
211
-    ## @brief Fetch all relations for an objects
212
-    # @param leo LeType : LeType child class instance
213
-    # @return a list of tuple (lesup, lesub, dict_attr)
214
-    def ___links_get(cls, leo):
215
-        return cls._datasource.get_relations(leo)
216
-    
217
-    ## @brief Remove a link (and attributes) between two LeObject
218
-    # @param id_relation int : Relation identifier
219
-    # @return True if a link has been deleted
220
-    # @throw LeObjectError if the relation is not a rel2type
221
-    #
222
-    # @todo Code factorisation on relation check
223
-    # @todo unit tests
224
-    @classmethod
225
-    def ___link_remove(cls, id_relation):
226
-        if lesub.__class__ not in lesup._linked_types.keys():
227
-            raise LeObjectError("Relation errorr : %s cannot be linked with %s"%(lesup.__class__.__name__, lesub.__class__.__name__))
228
-
229
-        return cls._datasource.del_related(lesup, lesub)
230
-    
231
-    ## @brief Add a hierarchy relation between two LeObject
232
-    # @param lesup LeType|LeRoot : LeType child class instance
233
-    # @param lesub LeType : LeType child class instance
234
-    # @param nature str : The nature of the relation @ref EditorialModel.classtypes
235
-    # @param rank str|int :  The relation rank. Can be 'last', 'first' or an integer
236
-    # @param replace_if_exists bool : if True delete the old superior and set the new one. If False and there is a superior raise an LeObjectQueryError
237
-    # @return The relation ID or False if fails
238
-    # @throw LeObjectQueryError replace_if_exists == False and there is a superior
239
-    @classmethod
240
-    def ___hierarchy_add(cls, lesup, lesub, nature, rank = 'last', replace_if_exists = False):
241
-        #Arguments check
242
-        if nature not in EditorialModel.classtypes.EmClassType.natures(lesub._classtype):
243
-            raise ValueError("Invalid nature '%s' for %s"%(nature, lesup.__class__.__name__))
244
-
245
-        if not cls.leo_is_root(lesup):
246
-            if nature not in EditorialModel.classtypes.EmClassType.natures(lesup._classtype):
247
-                raise ValueError("Invalid nature '%s' for %s"%(nature, lesup.__class__.__name__))
248
-            if lesup.__class__ not in lesub._superiors[nature]:
249
-                raise ValueError("%s is not a valid superior for %s"%(lesup.__class__, lesub.__class__))
250
-        #else:
251
-        #   lesup is not a LeType but a hierarchy root
252
-
253
-        if rank not in ['first', 'last'] and not isinstance(rank, int):
254
-            raise ValueError("Allowed values for rank are integers and 'first' or 'last' but '%s' found"%rank)
255
-
256
-        superiors = cls.hierarchy_get(lesub, nature, leo_is_sup = False)
257
-        if lesup in len(superiors) > 0:
258
-            if not replace_if_exists:
259
-                raise LeObjectQueryError("The subordinate allready has a superior")
260
-            #remove existig superior
261
-            if not cls.hierarchy_del(superiors[0], lesub, nature):
262
-                raise RuntimeError("Unable to delete the previous superior")
263
-
264
-        return self._datasource.add_superior(lesup, lesub, nature, rank)
265
-    
266
-    ## @brief Delete a hierarchy link between two LeObject
267
-    # @param lesup LeType | LeRoot : LeType child class or hierarchy root
268
-    # @param lesub LeType : LeType child class
269
-    # @param nature str : The nature of the relation @ref EditorialModel.classtypes
270
-    # @return True if deletion done successfully
271
-    # @throw ValueError when bad arguments given
272
-    @classmethod
273
-    def ___hierarchy_del(cls, lesup, lesub, nature):
274
-        if nature not in EditorialModel.classtypes.EmClassType.natures(lesub._classtype):
275
-            raise ValueError("Invalid nature '%s' for %s"%(nature, lesup.__class__.__name__))
276
-
277
-        if not cls.leo_is_root(lesup):
278
-            if nature not in EditorialModel.classtypes.EmClassType.natures(lesup._classtype):
279
-                raise ValueError("Invalid nature '%s' for %s"%(nature, lesup.__class__.__name__))
280
-            if lesup.__class__ not in lesub._superiors[nature]:
281
-                raise ValueError("%s is not a valid superior for %s"%(lesup.__class__, lesub.__class__))
282
-        superiors = cls.hierarchy_get(lesub, nature, leo_is_sup = False)
283
-        res = True
284
-        for _lesup in superiors:
285
-            if not cls._datasource.del_superior(_lesup, lesub, nature):
286
-                #How to handler this ?
287
-                res = False
288
-        return res
289
-    
290
-    ## @brief Fetch neighbour in hierarchy relation
291
-    # @param leo LeType | LeRoot : We want the neighbour of this LeObject (can be the root)
292
-    # @param nature str : @ref EditorialModel.classtypes
293
-    # @param leo_is_sup bool : if True leo is the superior and we want to fetch the subordinates else its the oposite
294
-    # @return A list of LeObject ordered by depth if leo_is_sup, else a list of subordinates
295
-    @classmethod
296
-    def ___hierarchy_get(cls, leo, nature, leo_is_sup = True):
297
-        #Checking arguments
298
-        if not (nature is None) and not cls.is_root(leo):
299
-            if nature not in EditorialModel.classtypes.EmClassType.natures(leo._classtype):
300
-                raise ValueError("Invalid nature '%s' for %s"%(nature, lesup.__class__.__name__))
301
-        
302
-        if leo_is_sup:
303
-            return cls._datasource.get_subordinates(leo, nature)
304
-        else:
305
-            return cls._datasource.get_superiors(leo, nature)
306
-
307
-    ## @brief Preparing letype and leclass arguments
308
-    # 
309
-    # This function will do multiple things : 
310
-    #  - Convert string to LeType or LeClass child instances
311
-    #  - If both letype and leclass given, check that letype inherit from leclass
312
-    #  - If only a letype is given, fetch the parent leclass
313
-    # @note If we give only a leclass as argument returned letype will be None
314
-    # @note Its possible to give letype=None and leclass=None. In this case the method will return tuple(None,None)
315
-    # @param letype LeType|str|None : LeType child instant or its name
316
-    # @param leclass LeClass|str|None : LeClass child instant or its name
317
-    # @return a tuple with 2 python classes (LeTypeChild, LeClassChild)
318
-    @classmethod
319
-    def ___prepare_targets(cls, letype = None , leclass = None):
320
-        warnings.warn("_LeObject._prepare_targets is deprecated", DeprecationWarning)
321
-        raise ValueError()
322
-        if not(leclass is None):
323
-            if isinstance(leclass, str):
324
-                leclass = LeFactory.leobj_from_name(leclass)
325
-            
326
-            if not isinstance(leclass, type) or not (leapi.leclass.LeClass in leclass.__bases__) or leclass.__class__ == leapi.leclass.LeClass:
327
-                raise ValueError("None | str | LeType child class excpected, but got : '%s' %s"%(leclass,type(leclass)))
328
-
329
-        if not(letype is None):
330
-            if isinstance(letype, str):
331
-                letype = LeFactory.leobj_from_name(letype)
332
-
333
-            if not isinstance(letype, type) or not leapi.letype.LeType in letype.__bases__ or letype.__class__ == leapi.letype.LeType:
334
-                raise ValueError("None | str | LeType child class excpected, but got : %s"%type(letype))
335
-
336
-            if leclass is None:
337
-                leclass = letype._leclass
338
-            elif leclass != letype._leclass:
339
-                raise ValueError("LeType child class %s does'nt inherite from LeClass %s"%(letype.__name__, leclass.__name__))
340
-
341
-        return (letype, leclass)
342
-
343 137
 ## @brief Class designed to represent the hierarchy roots
344 138
 # @see _LeObject.get_root() _LeObject.is_root()
345 139
 class LeRoot(object):

+ 1
- 4
leapi/lerelation.py 查看文件

@@ -37,9 +37,6 @@ class _LeRelation(lecrud._LeCrud):
37 37
         rel_ft = dict()
38 38
         rel_ft.update(cls._uid_fieldtype)
39 39
 
40
-        rel_ft.update(cls._lesup_fieldtype)
41
-        rel_ft.update(cls._lesub_fieldtype)
42
-
43 40
         rel_ft.update(cls._rel_fieldtypes)
44 41
         if cls.implements_lerel2type():
45 42
             rel_ft.update(cls._rel_attr_fieldtypes)
@@ -58,7 +55,7 @@ class _LeRelation(lecrud._LeCrud):
58 55
         filters, rel_filters = super()._prepare_filters(filters_l)
59 56
         res_filters = list()
60 57
         for field, op, value in filters:
61
-            if field in [self._lesup_name, self._lesub_name]:
58
+            if field in [cls._lesup_name, cls._lesub_name]:
62 59
                 if isinstance(value, str):
63 60
                     try:
64 61
                         value = int(value)

+ 48
- 48
leapi/test/test_lerelation.py 查看文件

@@ -38,24 +38,24 @@ class LeRelationTestCase(TestCase):
38 38
                 ('nature', '=', '"parent"')
39 39
             ),
40 40
             (
41
-                'lesup = 21',
42
-                ('lesup', '=', LeObject(21))
41
+                'superior = 21',
42
+                ('superior', '=', LeObject(21))
43 43
             ),
44 44
             (
45
-                'lesub = 22',
46
-                ('lesub', '=', LeObject(22))
45
+                'subordinate = 22',
46
+                ('subordinate', '=', LeObject(22))
47 47
             ),
48 48
             (
49 49
                 ('rank', '=', '1'),
50 50
                 ('rank', '=', '1'),
51 51
             ),
52 52
             (
53
-                ('lesup', '=', LeObject(21)),
54
-                ('lesup', '=', LeObject(21)),
53
+                ('superior', '=', LeObject(21)),
54
+                ('superior', '=', LeObject(21)),
55 55
             ),
56 56
             (
57
-                ('lesub', '=', Numero(42)),
58
-                ('lesub', '=', Numero(42)),
57
+                ('subordinate', '=', Numero(42)),
58
+                ('subordinate', '=', Numero(42)),
59 59
             ),
60 60
         ]
61 61
         
@@ -74,7 +74,7 @@ class LeRelationTestCase(TestCase):
74 74
         from dyncode import LeCrud, Publication, Numero, Personnes, LeObject, Rubrique, LeHierarch, LeRelation
75 75
         
76 76
         LeRelation.delete([LeRelation.sup_filter(Numero(42)), 'nature = "parent"'], 'LeHierarch')
77
-        dsmock.assert_called_once_with(LeHierarch, [('lesup', '=', Numero(42)), ('nature','=','"parent"')])
77
+        dsmock.assert_called_once_with(LeHierarch, [('superior', '=', Numero(42)), ('nature','=','"parent"')])
78 78
         dsmock.reset_mock()
79 79
 
80 80
 
@@ -87,12 +87,12 @@ class LeHierarch(LeRelationTestCase):
87 87
 
88 88
         queries = [
89 89
             (
90
-                ['lesup = 42', 'lesub = 24'], #filters
91
-                ['lesup', 'lesub', 'nature', 'rank'], #field_l
90
+                ['superior = 42', 'subordinate = 24'], #filters
91
+                ['superior', 'subordinate', 'nature', 'rank'], #field_l
92 92
 
93 93
                 LeHierarch, #target
94
-                ['lesup', 'lesub', 'nature', 'rank'], #field_ds
95
-                [('lesup','=',LeObject(42)), ('lesub', '=', LeObject(24))], #filters_ds
94
+                ['superior', 'subordinate', 'nature', 'rank'], #field_ds
95
+                [('superior','=',LeObject(42)), ('subordinate', '=', LeObject(24))], #filters_ds
96 96
                 [], #rfilters_ds
97 97
 
98 98
             ),
@@ -101,8 +101,8 @@ class LeHierarch(LeRelationTestCase):
101 101
                 [],
102 102
 
103 103
                 LeHierarch,
104
-                [ 'nature', 'rank', 'lesub', 'depth', 'lesup', 'id_relation'],
105
-                [('lesup', '=', Numero(42))],
104
+                [ 'nature', 'rank', 'subordinate', 'depth', 'superior', 'id_relation'],
105
+                [('superior', '=', Numero(42))],
106 106
                 [],
107 107
             ),
108 108
         ]
@@ -129,13 +129,13 @@ class LeHierarch(LeRelationTestCase):
129 129
         queries = [
130 130
             (
131 131
                 {
132
-                    'lesup': Rubrique(7, class_id = Rubrique._class_id, type_id = Rubrique._type_id),
133
-                    'lesub': Numero(42, class_id = Numero._class_id, type_id = Numero._type_id),
132
+                    'superior': Rubrique(7, class_id = Rubrique._class_id, type_id = Rubrique._type_id),
133
+                    'subordinate': Numero(42, class_id = Numero._class_id, type_id = Numero._type_id),
134 134
                     'nature': 'parent',
135 135
                 },
136 136
                 {
137
-                    'lesup': Rubrique(7),
138
-                    'lesub': Numero(42),
137
+                    'superior': Rubrique(7),
138
+                    'subordinate': Numero(42),
139 139
                     'nature': 'parent',
140 140
                 },
141 141
             ),
@@ -143,37 +143,37 @@ class LeHierarch(LeRelationTestCase):
143 143
         """ # Those tests are not good
144 144
             (
145 145
                 {
146
-                    'lesup': 7,
147
-                    'lesub': 42,
146
+                    'superior': 7,
147
+                    'subordinate': 42,
148 148
                     'nature': 'parent',
149 149
                 },
150 150
                 {
151
-                    'lesup': LeObject(7),
152
-                    'lesub': LeObject(42),
151
+                    'superior': LeObject(7),
152
+                    'subordinate': LeObject(42),
153 153
                     'nature': 'parent',
154 154
                 }
155 155
             ),
156 156
             (
157 157
                 {
158
-                    'lesup': LeObject(7),
159
-                    'lesub': LeObject(42),
158
+                    'superior': LeObject(7),
159
+                    'subordinate': LeObject(42),
160 160
                     'nature': 'parent',
161 161
                 },
162 162
                 {
163
-                    'lesup': LeObject(7),
164
-                    'lesub': LeObject(42),
163
+                    'superior': LeObject(7),
164
+                    'subordinate': LeObject(42),
165 165
                     'nature': 'parent',
166 166
                 }
167 167
             ),
168 168
             (
169 169
                 {
170
-                    'lesup': LeObject(7),
171
-                    'lesub': 42,
170
+                    'superior': LeObject(7),
171
+                    'subordinate': 42,
172 172
                     'nature': 'parent',
173 173
                 },
174 174
                 {
175
-                    'lesup': LeObject(7),
176
-                    'lesub': LeObject(42),
175
+                    'superior': LeObject(7),
176
+                    'subordinate': LeObject(42),
177 177
                     'nature': 'parent',
178 178
                 }
179 179
             )
@@ -217,23 +217,23 @@ class LeRel2TypeTestCase(LeRelationTestCase):
217 217
 
218 218
         queries = [
219 219
             {
220
-                'lesup': Article(42),
221
-                'lesub': Personne(24),
220
+                'superior': Article(42),
221
+                'subordinate': Personne(24),
222 222
                 'adresse': None,
223 223
             },
224 224
             {
225
-                'lesup': Textes(42),
226
-                'lesub': Personne(24),
225
+                'superior': Textes(42),
226
+                'subordinate': Personne(24),
227 227
                 'adresse': None,
228 228
             },
229 229
             {
230
-                'lesup': Article(42),
231
-                'lesub': Personne(24),
230
+                'superior': Article(42),
231
+                'subordinate': Personne(24),
232 232
                 'adresse': "bar",
233 233
             },
234 234
             {
235
-                'lesup': Textes(42),
236
-                'lesub': Personne(24),
235
+                'superior': Textes(42),
236
+                'subordinate': Personne(24),
237 237
                 'adresse': "foo",
238 238
             },
239 239
         ]
@@ -243,7 +243,7 @@ class LeRel2TypeTestCase(LeRelationTestCase):
243 243
 
244 244
             eres = {'nature': None}
245 245
             eres.update(query)
246
-            for fname in ('lesup', 'lesub'):
246
+            for fname in ('superior', 'subordinate'):
247 247
                 if isinstance(eres[fname], int):
248 248
                     eres[fname] = LeObject(eres[fname])
249 249
 
@@ -262,27 +262,27 @@ class LeRel2TypeTestCase(LeRelationTestCase):
262 262
 
263 263
         queries = [
264 264
             {
265
-                'lesup': Rubrique(42),
266
-                'lesub': Personne(24),
265
+                'superior': Rubrique(42),
266
+                'subordinate': Personne(24),
267 267
                 'adresse': None,
268 268
             },
269 269
             {
270 270
                 'adresse': None,
271 271
             },
272 272
             {
273
-                'lesup': Rubrique(42),
274
-                'lesub': Rubrique(24),
273
+                'superior': Rubrique(42),
274
+                'subordinate': Rubrique(24),
275 275
                 'adresse': None,
276 276
             },
277 277
             {
278
-                'lesup': Article(42),
279
-                'lesub': Numero(24),
278
+                'superior': Article(42),
279
+                'subordinate': Numero(24),
280 280
                 'adresse': 'foo',
281 281
             },
282 282
             {
283 283
                 'id_relation': 1337,
284
-                'lesup': Article(42),
285
-                'lesub': Numero(24),
284
+                'superior': Article(42),
285
+                'subordinate': Numero(24),
286 286
                 'adresse': 'foo',
287 287
             },
288 288
         ]

正在加载...
取消
保存