Переглянути джерело

Small changes in datahandlers

Yann Weber 9 роки тому
джерело
коміт
3cd22a08d5

+ 2
- 0
lodel/leapi/datahandlers/field_data_handler.py Переглянути файл

@@ -1,6 +1,8 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 import importlib
3 3
 
4
+class FieldValidationError(Exception):
5
+    pass
4 6
 
5 7
 class FieldDataHandler(object):
6 8
 

+ 12
- 24
lodel/leapi/datahandlers/reference.py Переглянути файл

@@ -1,5 +1,5 @@
1 1
 # -*- coding: utf-8 -*-
2
-from lodel.leapi.datahandlers.field_data_handler import FieldDataHandler
2
+from lodel.leapi.datahandlers.field_data_handler import FieldDataHandler, FieldValidationError
3 3
 from lodel.editorial_model.components import EmClass
4 4
 
5 5
 
@@ -10,32 +10,20 @@ class Reference(FieldDataHandler):
10 10
     # @param internal bool : if False, the field is not internal
11 11
     # @param **kwargs : other arguments
12 12
     def __init__(self, allowed_classes = None, internal=False, **kwargs):
13
-        self.allowed_classes = None if allowed_classes is None else set(allowed_classes)
13
+        self.__allowed_classes = None if allowed_classes is None else set(allowed_classes)
14 14
         super().__init__(internal=internal, **kwargs)
15 15
 
16
-    ## @brief gets the target of the reference
17
-    def get_relateds(self):
18
-        return self._refs
19
-
20
-    ## @brief checks if the data value is valid
21
-    # @param value
22
-    # @return
16
+    ## @brief Check value
17
+    # @param value *
18
+    # @return tuple(value, exception)
23 19
     def _check_data_value(self, value):
24
-
25
-        if not isinstance(value, self._refs_class):
26
-            return value, "The reference should be an instance of %s, %s gotten" % (self._refs_class, value.__class__)
27
-
28 20
         if isinstance(value, EmClass):
29 21
             value = [value]
22
+        for elt in value:
23
+            if not issubclass(elt.__class__, EmClass):
24
+                return None, FieldValidationError("Some elements of this references are not EmClass instances")
25
+            if self.__allowed_classes is not None:
26
+                if not isinstance(elt, self.__allowed_classes):
27
+                    return None, FieldValidationError("Some element of this references are not valids (don't fit with allowed_classes")
28
+        return value
30 29
 
31
-        if isinstance(value, dict):
32
-            ref_values = value.values()
33
-
34
-        for related in value:
35
-            if not isinstance(related, EmClass):
36
-                return value, "The reference %s should be an instance of EmClass, %s gotten" % (related.display_name,
37
-                                                                                                related.__class__)
38
-            if self.allowed_classes is not None and related.__class__.display_name not in self.allowed_classes:
39
-                return value, "The reference %s should be an instance of either one of those classes : %s, %s gotten" % \
40
-                              (related.display_name, self.allowed_classes, related.__class__)
41
-        return value, None

+ 11
- 9
lodel/leapi/datahandlers/references/dict.py Переглянути файл

@@ -1,4 +1,5 @@
1 1
 # -*- coding: utf-8 -*-
2
+from lodel.leapi.datahandlers.field_data_handler import FieldValidationError
2 3
 from lodel.leapi.datahandlers.reference import Reference
3 4
 from lodel.editorial_model.components import EmClass
4 5
 
@@ -12,12 +13,13 @@ class DataHandler(Reference):
12 13
     def __init__(self, allowed_classes=None, internal=False, **kwargs):
13 14
         super().__init__(allowed_classes=allowed_classes, internal=internal, **kwargs)
14 15
 
15
-    ## @brief adds a referenced element
16
-    # @param ref_name str : key of the item in the reference dict
17
-    # @param emclass EmClass
18
-    # @return bool
19
-    def add_ref(self, ref_name, emclass):
20
-        if isinstance(emclass, EmClass) and isinstance(ref_name, str):
21
-            self._refs[ref_name] = emclass
22
-            return True
23
-        return False
16
+    ## @brief Check value
17
+    # @param value *
18
+    # @return tuple(value, exception)
19
+    def _check_data_value(self, value):
20
+        if not isinstance(value, dict):
21
+            return None, FieldValidationError("Values for dict fields should be dict")
22
+        val, expt = super()._check_data_value(value.values())
23
+        return (
24
+                None if isinstance(expt, Exception) else value,
25
+                expt)

+ 9
- 8
lodel/leapi/datahandlers/references/list.py Переглянути файл

@@ -1,4 +1,5 @@
1 1
 # -*- coding: utf-8 -*-
2
+from lodel.leapi.datahandlers.field_data_handler import FieldValidationError
2 3
 from lodel.editorial_model.components import EmClass
3 4
 from lodel.leapi.datahandlers.reference import Reference
4 5
 
@@ -12,11 +13,11 @@ class DataHandler(Reference):
12 13
     def __init__(self, allowed_classes=None, internal=False, **kwargs):
13 14
         super().__init__(allowed_classes=allowed_classes, internal=internal, **kwargs)
14 15
 
15
-    ## @brief adds a referenced element
16
-    # @param emclass EmClass
17
-    # @return bool
18
-    def add_ref(self, emclass):
19
-        if isinstance(emclass, EmClass):
20
-            self._refs.append(emclass)
21
-            return True
22
-        return False
16
+    ## @brief Check value
17
+    # @param value *
18
+    # @return tuple(value, exception)
19
+    def _check_data_value(self, value):
20
+        val, expt = super()._check_data_value()
21
+        if not isinstance(expt, Exception):
22
+            val = list(val)
23
+        return val, expt

+ 10
- 0
lodel/leapi/datahandlers/references/multiple.py Переглянути файл

@@ -0,0 +1,10 @@
1
+#-*- coding: utf-8 -*-
2
+from lodel.leapi.datahandlers.reference import Reference
3
+from lodel.editorial_model.components import EmClass
4
+
5
+## @brief This class represent a data_handler for multiple references to another object
6
+class MultipleRef(Reference):
7
+    
8
+    def __init__(self, allowed_classes = None, **kwargs):
9
+        super().__init__(allowed_classes = allowed_classes
10
+    

+ 17
- 0
lodel/leapi/datahandlers/references/single.py Переглянути файл

@@ -0,0 +1,17 @@
1
+#-*- coding: utf-8 -*-
2
+from lodel.leapi.datahandlers.reference import Reference
3
+from lodel.editorial_model.components import EmClass
4
+
5
+## @brief This class represent a data_handler for single reference to another object
6
+class SingleRef(Reference):
7
+    
8
+    def __init__(self, allowed_classes = None, **kwargs):
9
+        super().__init__(allowed_classes = allowed_classes
10
+ 
11
+    def _check_data_value(self, value):
12
+        val, expt = super()._check_data_value(value)
13
+        if not isinstance(expt, Exception):
14
+            if len(val) > 1:
15
+               return None, FieldValidationError("Only single values are allowed for SingleRef fields")
16
+        return val, expt
17
+    

Loading…
Відмінити
Зберегти