@@ -32,7 +32,7 @@ class Form(FlaskForm):
32
32
add_buttons (Form , entity )
33
33
form : Any = Form (obj = entity )
34
34
if request .method == 'GET' and entity .id :
35
- populate_update (form , entity )
35
+ populate_update (entity , form )
36
36
# elif request.method == 'GET' and entity.id:
37
37
# populate_insert(form, entity, origin, date)
38
38
return form
@@ -187,13 +187,28 @@ def process_form_data(entity: Entity, form: Any) -> Entity:
187
187
value = getattr (form , attr ).data
188
188
data [attr ] = value .strip () if isinstance (value , str ) else value
189
189
if entity .id :
190
- update_entity (entity , form , data )
190
+ delete_links (entity )
191
+ entity .update (data )
191
192
else :
192
193
entity = insert_entity (form , data )
194
+ process_types (entity , form )
193
195
process_relations (entity , form )
194
196
return entity
195
197
196
198
199
+ def process_types (entity : Entity , form : Any ) -> None :
200
+ for type_ in [g .types [id_ ] for id_ in entity .class_ .hierarchies ]:
201
+ if data := convert (getattr (form , str (type_ .id )).data ):
202
+ # if entity.class_.name in \ # Todo: check still needed?
203
+ # ['actor_function', 'actor_relation', 'involvement']:
204
+ # continue
205
+ if type_ .class_ .name == 'administrative_unit' :
206
+ pass
207
+ # manager.data['administrative_units'] += value
208
+ else : # if entity.class_.view != 'type': # Todo: check needed?
209
+ entity .link ('P2' , [g .types [id_ ] for id_ in data ])
210
+
211
+
197
212
def process_relations (entity : Entity , form : Any ) -> None :
198
213
for name , relation in entity .class_ .relations .items ():
199
214
if relation ['mode' ] == 'tab' :
@@ -217,25 +232,40 @@ def insert_entity(form: Any, data: dict[str, Any]) -> Entity:
217
232
return entity
218
233
219
234
220
- def update_entity (entity : Entity , form : Any , data : dict [str , Any ]) -> None :
221
- delete_links : dict [str , Any ] = {'property' : [], 'property_inverse' : []}
222
- for i in entity .class_ .relations .values ():
223
- if i ['mode' ] != 'tab' :
224
- if i ['inverse' ]:
225
- delete_links ['property_inverse' ].append (i ['property' ])
235
+ def delete_links (entity : Entity ) -> None :
236
+ links : dict [str , Any ] = {'property' : [], 'property_inverse' : []}
237
+ if entity .class_ .hierarchies :
238
+ links ['property' ].append ('P2' ) # Todo: what about place types?
239
+ for item in entity .class_ .relations .values ():
240
+ if item ['mode' ] != 'tab' :
241
+ if item ['inverse' ]:
242
+ links ['property_inverse' ].append (item ['property' ])
226
243
else :
227
- delete_links ['property' ].append (i ['property' ])
228
- if delete_links ['property_inverse' ]:
229
- entity .delete_links (delete_links ['property_inverse' ], True )
230
- if delete_links ['property' ]:
231
- entity .delete_links (delete_links ['property' ])
232
- if entity .class_ .name in ['place' , 'type' ]:
233
- new_super = g .types [entity .root [0 ]]
234
- if data1 := getattr (form , new_super .name ).data :
235
- new_super = g .types [int (convert (data1 )[0 ])]
236
- entity .link ('has super' , new_super .id )
237
- entity .update (data )
238
-
239
-
240
- def populate_update (form : Any , entity : Entity ) -> None :
241
- form .opened .data = time .time ()
244
+ links ['property' ].append (item ['property' ])
245
+ if links ['property_inverse' ]:
246
+ entity .delete_links (links ['property_inverse' ], True )
247
+ if links ['property' ]:
248
+ entity .delete_links (links ['property' ])
249
+
250
+
251
+ def populate_update (entity : Entity , form : Any ) -> None :
252
+ form .opened .data = time .time () # Todo: what if POST because of not valid?
253
+ # Todo: deal with link types
254
+ # types: dict[Any, Any] = manager.link_.types \
255
+ # if manager.link_ else manager.entity.types
256
+ # Todo: deal with place types
257
+ # if manager.entity and manager.entity.class_.name == 'place':
258
+ # if location := \
259
+ # manager.entity.get_linked_entity_safe('P53', types=True):
260
+ # types |= location.types # Admin. units and historical places
261
+ type_data : dict [int , list [int ]] = {}
262
+ for type_ , value in entity .types .items ():
263
+ root = g .types [type_ .root [0 ]] if type_ .root else type
264
+ if root .id not in type_data :
265
+ type_data [root .id ] = []
266
+ type_data [root .id ].append (type_ .id )
267
+ if root .category == 'value' :
268
+ getattr (form , str (type_ .id )).data = value
269
+ for root_id , types_ in type_data .items ():
270
+ if hasattr (form , str (root_id )):
271
+ getattr (form , str (root_id )).data = types_
0 commit comments