Browse Source

Changed the overrides of the Reference class methods

Roland Haroutiounian 9 years ago
parent
commit
954bd3874f

+ 22
- 4
lodel/leapi/datahandlers/reference.py View File

@@ -1,6 +1,6 @@
1 1
 # -*- coding: utf-8 -*-
2
-from .field_data_handler import FieldDataHandler
3
-
2
+from lodel.leapi.datahandlers.field_data_handler import FieldDataHandler
3
+from lodel.editorial_model.components import EmClass
4 4
 
5 5
 class Reference(FieldDataHandler):
6 6
 
@@ -11,8 +11,26 @@ class Reference(FieldDataHandler):
11 11
     def __init__(self, allowed=True, internal=False, **kwargs):
12 12
         self.allowed = allowed
13 13
         self.internal = internal
14
+        if not self.is_ref_valid():
15
+            raise ValueError("The target of the reference is not valid")
14 16
         super().__init__(internal=self.internal, **kwargs)
15 17
 
16 18
     ## @brief gets the target of the reference
17
-    def get_related(self):
18
-        return self._target
19
+    def get_relateds(self):
20
+        return self._refs
21
+
22
+    ## @brief checks if the target is valid
23
+    def is_ref_valid(self):
24
+        relateds = self.get_relateds()
25
+        if not isinstance(relateds, self._refs_class):
26
+            return False
27
+
28
+        if isinstance(relateds, EmClass):
29
+            relateds = [relateds]
30
+
31
+        for related in relateds:
32
+            if not isinstance(related, EmClass):
33
+                return False
34
+
35
+        return True
36
+

+ 25
- 3
lodel/leapi/datahandlers/references/Dict.py View File

@@ -1,8 +1,30 @@
1 1
 # -*- coding: utf-8 -*-
2
-from ..reference import Reference
2
+from lodel.leapi.datahandlers.reference import Reference
3
+from lodel.editorial_model.components import EmClass
3 4
 
4 5
 
5 6
 class Dict(Reference):
6 7
 
7
-    def __init__(self):
8
-        pass
8
+    ## @brief instanciates a dict reference
9
+    # @param emclasses dict : Dict of EmClass objects
10
+    # @param allowed bool
11
+    # @param internal bool : if False, the field is not internal
12
+    # @param kwargs : Other named arguments
13
+    def __init__(self, emclasses, allowed=True, internal=False, **kwargs):
14
+        self._refs = set(emclasses)
15
+        self._refs_class = dict
16
+        super().__init__(allowed=allowed, internal=internal, **kwargs)
17
+
18
+    ## @brief checks if the given target is valid
19
+    # @return bool
20
+    def is_target_valid(self):
21
+        relateds = self.get_relateds()
22
+
23
+        if not isinstance(relateds, self._refs_class):
24
+            return False
25
+
26
+        for related in relateds.values():
27
+            if not isinstance(related, EmClass):
28
+                return False
29
+
30
+        return True

+ 4
- 4
lodel/leapi/datahandlers/references/Link.py View File

@@ -1,5 +1,6 @@
1 1
 # -*- coding: utf-8 -*-
2
-from ..reference import Reference
2
+from lodel.leapi.datahandlers.reference import Reference
3
+from lodel.editorial_model.components import EmClass
3 4
 
4 5
 
5 6
 class Link(Reference):
@@ -10,7 +11,6 @@ class Link(Reference):
10 11
     # @param internal bool : if False, the field is not internal
11 12
     # @param kwargs : Other named arguments
12 13
     def __init__(self, emclass, allowed=True, internal=False, **kwargs):
13
-        self._target = emclass
14
+        self._refs = emclass
15
+        self._refs_class = EmClass
14 16
         super().__init__(allowed=allowed, internal=internal, **kwargs)
15
-
16
-

+ 3
- 2
lodel/leapi/datahandlers/references/List.py View File

@@ -1,5 +1,5 @@
1 1
 # -*- coding: utf-8 -*-
2
-from ..reference import Reference
2
+from lodel.leapi.datahandlers.reference import Reference
3 3
 
4 4
 
5 5
 class List(Reference):
@@ -7,5 +7,6 @@ class List(Reference):
7 7
     ## @brief instanciates a list reference
8 8
     # @param emclasses list : linked emclasses objects
9 9
     def __init__(self, emclasses, allowed=True, internal=False, **kwargs):
10
-        self._target = emclasses
10
+        self._refs = emclasses
11
+        self._refs_class = list
11 12
         super().__init__(self, allowed=allowed, internal=internal, **kwargs)

+ 3
- 3
lodel/leapi/datahandlers/references/Set.py View File

@@ -1,5 +1,5 @@
1 1
 # -*- coding: utf-8 -*-
2
-from ..reference import Reference
2
+from lodel.leapi.datahandlers.reference import Reference
3 3
 
4 4
 
5 5
 class Set(Reference):
@@ -10,6 +10,6 @@ class Set(Reference):
10 10
     # @param internal bool : if False, the field is not internal
11 11
     # @param kwargs : Other named arguments
12 12
     def __init__(self, emclasses, allowed=True, internal=False, **kwargs):
13
-        self._target = set(emclasses)
13
+        self._refs = set(emclasses)
14
+        self._refs_class = set
14 15
         super().__init__(allowed=allowed, internal=internal, **kwargs)
15
-

+ 3
- 2
lodel/leapi/datahandlers/relation.py View File

@@ -4,5 +4,6 @@ from .field_data_handler import FieldDataHandler
4 4
 
5 5
 class Relation(FieldDataHandler):
6 6
 
7
-    def __init__(self):
8
-        self.backref_fieldname=''
7
+    def __init__(self, fieldname, reference):
8
+        self.backref_fieldname = fieldname
9
+        self.reference = reference

Loading…
Cancel
Save