-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontrol.py
More file actions
129 lines (105 loc) · 5.13 KB
/
control.py
File metadata and controls
129 lines (105 loc) · 5.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
class User:
def __init__(self, id: str):
self.id = id
class Class:
def __init__(self, interface, id: str, name: str, parent_id: str) -> None:
self.interface = interface
self.id = id
self.name = name
self.parent_id = parent_id
self.assigned_attributes = None
interface.structure_cache.store_class(self)
def get_parent(self):
""" Gibt Klassenobjekt der Parent-Klasse zurück """
return self.interface.get_class_by_id(self.parent_id)
def get_family_tree(self) -> list:
""" Gibt den Stammbaum der Klasse (alle übergeordneten Klassen und sich selbst) zurück """
if self.is_root():
return [self]
else:
family_tree = self.get_parent().get_family_tree()
family_tree.append(self)
return family_tree
def get_assigned_attributes(self):
""" Gibt die der Klasse direkt zugewiesenen Attribute zurück """
if not self.assigned_attributes:
self.assigned_attributes = self.interface.get_assigned_attributes_from_db(self)
return self.assigned_attributes
def is_root(self):
""" Gibt zurück, ob die Klasse eine Ursprungsklasse ist (keine Vorfahren hat) """
return self.parent_id is None
def get_view_name(self):
""" Gibt den Namen der View in der Datenbank zum Anzeigen aller Objekte der Klasse zurück """
return f'v_{self.name}'
def update_view(self):
""" Erstellt oder aktualisiert in der Datenbank eine View zum Anzeigen aller Objekte der Klasse """
self.interface.update_class_view(self)
class Attribute:
def __init__(self, interface, id: str, name: str, generator: str, indexed: bool) -> None:
self.interface = interface
self.id = id
self.name = name
self.generator = generator
self.indexed = indexed
interface.structure_cache.store_attribute(self)
class AttributeAssignment:
def __init__(self, interface, class_id: str, attribute_id: str, nullable: bool, default: str):
self.interface = interface
self.class_id = class_id
self.attribute_id = attribute_id
self.nullable = nullable
self.default = default
def get_class(self) -> Class:
""" Gibt Klassenobjekt zurück """
return self.interface.get_class_by_id(self.class_id)
def get_attribute(self) -> Attribute:
""" Gibt Attributobjekt zurück """
return self.interface.get_attribute_by_id(self.attribute_id)
class Reference:
def __init__(self, interface, id: str, name: str, origin_class_id: str, target_class_id: str) -> None:
self.interface = interface
self.id = id
self.name = name
self.origin_class_id = origin_class_id
self.target_class_id = target_class_id
interface.structure_cache.store_reference(self)
def get_origin_class(self):
""" Gibt Klassenobjekt der Ursprungsklasse zurück """
return self.interface.get_class_by_id(self.origin_class_id)
def get_target_class(self):
""" Gibt Klassenobjekt der Zielklasse zurück """
return self.interface.get_class_by_id(self.target_class_id)
class Object:
def __init__(self, interface, id: str, class_: Class, **attributes):
self.interface = interface
self.id = id
self.class_ = class_
self.attributes = attributes
def get_class(self) -> Class:
""" Gibt die Klasse des Objekts zurück """
return self.class_
def modify(self, **attributes):
""" Aktualisiert die übergebenen Attribute """
self.interface.modify(self, **attributes)
def dump(self):
""" Gibt String mit allen Objekteigenschaften zurück """
str_attributes = '\n '.join(f'{attribute} = {value}' for attribute, value in self.attributes.items())
return f'{self.class_.name} {self.id}:\n {str_attributes}'
class Group:
def __init__(self, interface, id: str, name: str, parent_id: str) -> None:
self.interface = interface
self.id = id
self.name = name
self.parent_id = parent_id
def add_user(self, user: User):
""" Weist den übergebenen Benutzer der Benutzergruppe zu """
self.interface.add_user_to_group(user, self)
def assign_class(self, class_: Class, read: bool = False, write: bool = False, delete: bool = False, administration: bool = False):
""" Weist das übergebene Klasse der Benutzergruppe zu """
self.interface.assign_class_to_group(class_, self, read, write, delete, administration)
def assign_object(self, object: Object, read: bool = False, write: bool = False, delete: bool = False, administration: bool = False):
""" Weist das übergebene Object der Benutzergruppe zu """
self.interface.assign_object_to_group(object, self, read, write, delete, administration)
def assign_reference(self, reference: Reference, read: bool = False, write: bool = False, delete: bool = False, administration: bool = False):
""" Weist die übergeben Assoziation der Benutzergruppe zu """
self.interface.assign_reference_to_group(reference, self, read, write, delete, administration)