소스 검색

Add a check that the given value points onto an allowed class

prieto 7 년 전
부모
커밋
a66e5d2d30
1개의 변경된 파일4개의 추가작업 그리고 6개의 파일을 삭제
  1. 4
    6
      lodel/leapi/datahandlers/base_classes.py

+ 4
- 6
lodel/leapi/datahandlers/base_classes.py 파일 보기

@@ -257,7 +257,7 @@ class Reference(DataHandler):
257 257
     # @param **kwargs : other arguments
258 258
     def __init__(self, allowed_classes=None, back_reference=None, internal=False, **kwargs):
259 259
         self.__allowed_classes = set() if allowed_classes is None else set(allowed_classes)
260
-        self.allowed_classes = list() if allowed_classes is None else allowed_classes
260
+        self.allowed_classes = list() if allowed_classes is None else allowed_classes # For now usefull to jinja 2
261 261
         if back_reference is not None:
262 262
             if len(back_reference) != 2:
263 263
                 raise ValueError("A tuple (classname, fieldname) expected but got '%s'" % back_reference)
@@ -318,8 +318,6 @@ class Reference(DataHandler):
318 318
     #@param datas dict : dict storing fields values
319 319
     #@return an Exception instance if fails else True
320 320
     #@todo check for performance issue and check logics
321
-    #@todo Implements consistency checking on value : Check that the given value
322
-    #points onto an allowed class
323 321
     #@warning composed uid capabilities broken here
324 322
     def check_data_consistency(self, emcomponent, fname, datas):
325 323
         rep = super().check_data_consistency(emcomponent, fname, datas)
@@ -329,6 +327,9 @@ class Reference(DataHandler):
329 327
             return True
330 328
         # !! Reimplement instance fetching in construct data !!
331 329
         target_class = self.back_reference[0]
330
+        if target_class not in self.__allowed_class:
331
+            logger.warning('Class of the back_reference given is not an allowed class')
332
+            return False
332 333
         target_uidfield = target_class.uid_fieldname()[0] #multi uid broken here
333 334
         value = datas[fname]
334 335
         obj = target_class.get([(target_uidfield, '=', value)])
@@ -359,9 +360,6 @@ class SingleRef(Reference):
359 360
     #@return value
360 361
     def _check_data_value(self, value):
361 362
         value = super()._check_data_value(value)
362
-        logger.warning("A vérifier..provisoire pour les tests")
363
-        #if (expt is None and (len(val)>1)):
364
-        #    raise FieldValidationError("List or string expected for a set field")
365 363
         return value
366 364
 
367 365
     ##@brief Utility method designed to fetch referenced objects

Loading…
취소
저장