Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2024 08 05 import export re maintenance event #357

Merged
merged 33 commits into from
Aug 28, 2024

Conversation

sjib
Copy link
Contributor

@sjib sjib commented Aug 5, 2024

General

  • Fix a bug

Describe your changes

Should solve #352

  • missing re_maintenance_event data on import and export

Screenshots

Issue ticket number and link

Checklist before requesting a review

  • I have performed a self-review of my code
  • If it is a core feature, I have added thorough tests.
  • CI Tests are green
  • The documentation is up to date with the proposed change.
  • My work is ready for review

Checklist before merge

  • A review has been performed
  • Comments are resolved
  • Documentation is ready

@sjib sjib added fix Fixing something not working INTERLIS About INTERLIS exchange format (import / export) labels Aug 5, 2024
@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

Ein Fehler trat bei der Ausführung von Python-Code auf: 

NameError: name 'ModelInterlisVsaKek' is not defined. Did you mean: 'ModelInterlisDss'? 
Traceback (most recent call last):
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\teksi_wastewater_plugin.py", line 610, in actionImportClicked
    self.interlisImporterExporter.action_import()
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\gui\interlis_importer_exporter_gui.py", line 79, in action_import
    raise exception
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\gui\interlis_importer_exporter_gui.py", line 60, in action_import
    self.interlis_importer_exporter.interlis_import(
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 148, in interlis_import
    raise exception
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 106, in interlis_import
    tww_session = self._import_from_intermediate_schema(import_model)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 250, in _import_from_intermediate_schema
    self._init_model_classes(import_model)
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 573, in _init_model_classes
    self.model_classes_interlis = ModelInterlis().classes()
                                  ^^^^^^^^^^^^^^^
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\model_interlis_dss.py", line 343, in __init__
    ModelInterlisVsaKek.erhaltungsereignis_abwasserbauwerkassoc = (
    ^^^^^^^^^^^^^^^^^^^
NameError: name 'ModelInterlisVsaKek' is not defined. Did you mean: 'ModelInterlisDss'?

@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

Ein Fehler trat bei der Ausführung von Python-Code auf: 

sqlalchemy.exc.NoForeignKeysError: Can't find any foreign key relationships between 'vsa_baseclass' and 'erhaltungsereignis_abwasserbauwerkassoc'. 
Traceback (most recent call last):
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\teksi_wastewater_plugin.py", line 610, in actionImportClicked
    self.interlisImporterExporter.action_import()
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\gui\interlis_importer_exporter_gui.py", line 79, in action_import
    raise exception
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\gui\interlis_importer_exporter_gui.py", line 60, in action_import
    self.interlis_importer_exporter.interlis_import(
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 148, in interlis_import
    raise exception
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 106, in interlis_import
    tww_session = self._import_from_intermediate_schema(import_model)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 250, in _import_from_intermediate_schema
    self._init_model_classes(import_model)
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 573, in _init_model_classes
    self.model_classes_interlis = ModelInterlis().classes()
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\model_base.py", line 19, in classes
    tww_sqlalchemy.prepare_automap_base(self.Base, self.schema)
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\utils\tww_sqlalchemy.py", line 72, in prepare_automap_base
    base.prepare(
  File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\ext\automap.py", line 848, in prepare
    map_config.map()
  File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\ext\declarative\base.py", line 765, in map
    return super(_DeferredMapperConfig, self).map()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\ext\declarative\base.py", line 695, in map
    self.cls.__mapper__ = mp_ = mapper_cls(
                                ^^^^^^^^^^^
  File "", line 2, in mapper
  File "", line 2, in __init__
  File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\util\deprecations.py", line 139, in warned
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\orm\mapper.py", line 717, in __init__
    self._configure_inheritance()
  File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\orm\mapper.py", line 1048, in _configure_inheritance
    self.inherit_condition = sql_util.join_condition(
                             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "", line 2, in join_condition
  File "", line 2, in _join_condition
  File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\util\deprecations.py", line 139, in warned
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\sql\selectable.py", line 976, in _join_condition
    raise exc.NoForeignKeysError(
sqlalchemy.exc.NoForeignKeysError: Can't find any foreign key relationships between 'vsa_baseclass' and 'erhaltungsereignis_abwasserbauwerkassoc'.


Python-Version: 3.12.4 (main, Jun 10 2024, 12:48:35) [MSC v.1938 64 bit (AMD64)] 
QGIS-Version: 3.34.8-Prizren Prizren, 91642333 

Python-Pfad:
C:/PROGRA~1/QGIS 3.34.8/apps/qgis-ltr/./python
C:/Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python
C:/Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins
C:/PROGRA~1/QGIS 3.34.8/apps/qgis-ltr/./python/plugins
C:\PROGRA~1\QGIS 3.34.8\apps\grass\grass83\etc\python
C:\Users\Stefan\Documents
C:\Program Files\QGIS 3.34.8\bin\python312.zip
C:\PROGRA~1\QGIS 3.34.8\apps\Python312\DLLs
C:\PROGRA~1\QGIS 3.34.8\apps\Python312\Lib
C:\Program Files\QGIS 3.34.8\bin
C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages
C:\PROGRA~1\QGIS 3.34.8\apps\Python312
C:\PROGRA~1\QGIS 3.34.8\apps\Python312\Lib\site-packages
C:\PROGRA~1\QGIS 3.34.8\apps\Python312\Lib\site-packages\win32
C:\PROGRA~1\QGIS 3.34.8\apps\Python312\Lib\site-packages\win32\lib
C:\PROGRA~1\QGIS 3.34.8\apps\Python312\Lib\site-packages\Pythonwin
C:/Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python
C:/Daten/QGEP/testing_2024.0_prerelease/project-translations
C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\gui\..\..

@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

Ein Fehler trat bei der Ausführung von Python-Code auf: 

AttributeError: 'erhaltungsereignis_abwasserbauwerkassoc' object has no attribute 't_ili_tid' 
Traceback (most recent call last):
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\teksi_wastewater_plugin.py", line 610, in actionImportClicked
    self.interlisImporterExporter.action_import()
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\gui\interlis_importer_exporter_gui.py", line 79, in action_import
    raise exception
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\gui\interlis_importer_exporter_gui.py", line 60, in action_import
    self.interlis_importer_exporter.interlis_import(
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 148, in interlis_import
    raise exception
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 106, in interlis_import
    tww_session = self._import_from_intermediate_schema(import_model)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 261, in _import_from_intermediate_schema
    interlisImporterToIntermediateSchema.tww_import(skip_closing_tww_session=True)
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_importer_to_intermediate_schema.py", line 39, in tww_import
    raise exception
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_importer_to_intermediate_schema.py", line 31, in tww_import
    self._tww_import(skip_closing_tww_session)
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_importer_to_intermediate_schema.py", line 67, in _tww_import
    self._import_dss()
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_importer_to_intermediate_schema.py", line 349, in _import_dss
    self._import_erhaltungsereignis_abwasserbauwerkassoc()
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_importer_to_intermediate_schema.py", line 2238, in _import_erhaltungsereignis_abwasserbauwerkassoc
    **self.base_common(row),
      ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_importer_to_intermediate_schema.py", line 444, in base_common
    "obj_id": row.t_ili_tid,
              ^^^^^^^^^^^^^
AttributeError: 'erhaltungsereignis_abwasserbauwerkassoc' object has no attribute 't_ili_tid'

@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

Import Wizard:
20240806_import_re_maintenance_event_wastewater_structure

and data in postgres:
20240806_import_re_maintenance_event_wastewater_structure_postgres

Seems to work!

@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

In QGIS it takes quite some time to open the table and it then does not display all identifiers (in the fk_wastewater_structure) column:
20240806_import_re_maintenance_event_wastewater_structure_qgis

@urskaufmann Does it makes sense to try to find the identifier in this table?

@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

20240806_re_maintenance_event_wastewater_structure_qgis_form_settings

@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

I also get tons of these warnings:

2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:00:32     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:01     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:13     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance
2024-08-06T17:01:20     WARNING    Layer re_maintenance_event_wastewater_structure, Feld fk_maintenance_event: Ungültige Beziehung re_maintenance_wasterwaterstructure_maintenance

@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

Testing export:

Ein Fehler trat bei der Ausführung von Python-Code auf: 

AttributeError: 're_maintenance_event_wastewater_structure' object has no attribute 'fk_dataowner__REL' 
Traceback (most recent call last):
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\teksi_wastewater_plugin.py", line 590, in actionExportClicked
    self.interlisImporterExporter.action_export()
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\gui\interlis_importer_exporter_gui.py", line 141, in action_export
    raise exception
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\gui\interlis_importer_exporter_gui.py", line 111, in action_export
    self.interlis_importer_exporter.interlis_export(
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 198, in interlis_export
    self._export_to_intermediate_schema(
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 364, in _export_to_intermediate_schema
    twwInterlisExporter.tww_export()
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_exporter_to_intermediate_schema.py", line 85, in tww_export
    raise exception
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_exporter_to_intermediate_schema.py", line 80, in tww_export
    self._export()
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_exporter_to_intermediate_schema.py", line 99, in _export
    self._export_dss()
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_exporter_to_intermediate_schema.py", line 432, in _export_dss
    self._export_re_maintenance_event_wastewater_structure()
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_exporter_to_intermediate_schema.py", line 2742, in _export_re_maintenance_event_wastewater_structure
    **self.vsa_base_common(row, "erhaltungsereignis_abwasserbauwerkassoc"),
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_exporter_to_intermediate_schema.py", line 2918, in vsa_base_common
    datenherrref = self.get_tid(row.fk_dataowner__REL)
                                ^^^^^^^^^^^^^^^^^^^^^
AttributeError: 're_maintenance_event_wastewater_structure' object has no attribute 'fk_dataowner__REL'

@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

Export seems now to work:
Import data to the left - re-exported data to the right:
20240806_export_re_me_wws_xtf_compare

@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

  • There is another m:n relation: Gebaeudegruppe_EntsorgungAssoc that needs configuration

!!@ comment = "Assoziation"
ASSOCIATION Gebaeudegruppe_EntsorgungAssoc =
  EntsorgungRef  -- {0..*} Entsorgung;
  Gebaeudegruppe_EntsorgungAssocRef -- {0..*} Gebaeudegruppe;
END Gebaeudegruppe_EntsorgungAssoc;

@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

  • to do set filter criteria for re_tables

@urskaufmann
Copy link
Contributor

In QGIS it takes quite some time to open the table and it then does not display all identifiers (in the fk_wastewater_structure) column: 20240806_import_re_maintenance_event_wastewater_structure_qgis

@urskaufmann Does it makes sense to try to find the identifier in this table?

I think no

@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

export seems to work with re_buidling_group_disposal.

@sjib
Copy link
Contributor Author

sjib commented Aug 6, 2024

On import we do not check if combination fk_1 fk_2 is already in the table - as this cannot be checked with obj_id as in other tables

  • Check code and write special version for re_tables of create_or_update that checks on fk_1 and fk_2 instead of obj_id

    def create_or_update(self, cls, **kwargs):
        """
        Updates an existing instance (if obj_id is found) or creates an instance of the provided class
        with given kwargs, and returns it.
        """
        instance = None

        # We try to get the instance from the session/database
        obj_id = kwargs.get("obj_id", None)
        if obj_id:
            instance = self.session_tww.query(cls).get(kwargs.get("obj_id", None))

        if instance:
            # We found it -> update
            instance.__dict__.update(kwargs)
            flag_dirty(instance)  # we flag it as dirty so it stays in the session
        else:
            # We didn't find it -> create
            instance = cls(**kwargs)

        return instance

@ponceta ponceta closed this Aug 7, 2024
@ponceta ponceta reopened this Aug 7, 2024
@sjib sjib self-assigned this Aug 7, 2024
@sjib sjib marked this pull request as draft August 7, 2024 07:11
@sjib
Copy link
Contributor Author

sjib commented Aug 7, 2024

2024-08-07T15:27:11     WARNING    Traceback (most recent call last):
              File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\teksi_wastewater_plugin.py", line 610, in actionImportClicked
              self.interlisImporterExporter.action_import()
              File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\gui\interlis_importer_exporter_gui.py", line 79, in action_import
              raise exception
              File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\gui\interlis_importer_exporter_gui.py", line 60, in action_import
              self.interlis_importer_exporter.interlis_import(
              File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 148, in interlis_import
              raise exception
              File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 106, in interlis_import
              tww_session = self._import_from_intermediate_schema(import_model)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_importer_exporter.py", line 261, in _import_from_intermediate_schema
              interlisImporterToIntermediateSchema.tww_import(skip_closing_tww_session=True)
              File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_importer_to_intermediate_schema.py", line 39, in tww_import
              raise exception
              File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_importer_to_intermediate_schema.py", line 31, in tww_import
              self._tww_import(skip_closing_tww_session)
              File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_importer_to_intermediate_schema.py", line 67, in _tww_import
              self._import_dss()
              File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_importer_to_intermediate_schema.py", line 349, in _import_dss
              self._import_erhaltungsereignis_abwasserbauwerkassoc()
              File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_importer_to_intermediate_schema.py", line 2283, in _import_erhaltungsereignis_abwasserbauwerkassoc
              re_maintenance_event_wastewater_structure = self.create_re_class_entry(
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
              File "C:\Users/Stefan/AppData/Roaming/QGIS/QGIS3\profiles\tww_pre_2024.0/python/plugins\teksi_wastewater\interlis\interlis_model_mapping\interlis_importer_to_intermediate_schema.py", line 480, in create_re_class_entry
              instance = cls(**kwargs)
              ^^^^^^^^^^^^^
              File "", line 4, in __init__
              File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\orm\state.py", line 432, in _initialize_instance
              with util.safe_reraise():
              File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\util\langhelpers.py", line 68, in __exit__
              compat.raise_(
              File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\util\compat.py", line 182, in raise_
              raise exception
              File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\orm\state.py", line 430, in _initialize_instance
              return manager.original_init(*mixed[1:], **kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              File "C:\Users\Stefan\AppData\Roaming\Python\Python312\site-packages\sqlalchemy\ext\declarative\base.py", line 839, in _declarative_constructor
              raise TypeError(
             TypeError: 'fk_1' is an invalid keyword argument for re_maintenance_event_wastewater_structure
             

@sjib
Copy link
Contributor Author

sjib commented Aug 7, 2024

Tests with create_re_class_entry do not work as expected - moved to new issue

teksi_wastewater.utils:Not supported n:m relation class: - please open an issue to add this to interlis_importer_to_intermediate_schema configuration

So it does not find the cls

    def create_re_class_entry(self, cls, **kwargs):
        """
        Checks if an existing instance (if fk_1, fk_2 combination is found) or creates an instance of the provided re_class
        with given kwargs, and returns it.
        """
        instance = None

        # We try to get the instance from the session/database
        # does not work as we can then not run instance = cls(**kwargs) to create object at the end
        # fk_1_value = kwargs.get("fk_1", None)
        # fk_2_value = kwargs.get("fk_2", None)

        logger.info(
                    f"Not supported n:m relation class: {cls} - please open an issue to add this to interlis_importer_to_intermediate_schema configuration"
                )

        if cls == "re_maintenance_event_wastewater_structure":
            fk_1_value = kwargs.get("fk_wastewater_structure", None)
            fk_2_value = kwargs.get("fk_maintenance_event", None)
        elif cls == "re_building_group_disposal":
            fk_1_value = kwargs.get("fk_disposal", None)
            fk_2_value = kwargs.get("fk_building_group", None)
        else:
            fk_1_value = None
            fk_2_value = None

            logger.warning(
                f"Not supported n:m relation class: {cls} - please open an issue to add this to interlis_importer_to_intermediate_schema configuration"
            )

        if fk_1_value and fk_2_value:
            # instance = self.session_tww.query(cls).get(kwargs.get("obj_id", None))
            # instance = self.session_tww.query(cls).get(kwargs.get("fk_1", "fk_2", None))

            # try with filter
            # filter(or_(db.users.name=='Ryan', db.users.country=='England'))
            # filter should be and not or see https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.filter_by

            if cls == "re_maintenance_event_wastewater_structure":
                instance = self.session_tww.query(cls).filter_by(
                    fk_wastewater_structure=fk_1_value, fk_maintenance_event=fk_2_value
                )

            elif cls == "re_building_group_disposal":
                instance = self.session_tww.query(cls).filter_by(
                    fk_disposal=fk_1_value, fk_building_group=fk_2_value
                )

            else:
                logger.warning(
                    f"Not supported n:m relation class: {cls} - please open an issue to add this to interlis_importer_to_intermediate_schema configuration"
                )

        if instance is None:

            # We found it -> skip
            # instance.__dict__.update(kwargs)
            # flag_dirty(instance)  # we flag it as dirty so it stays in the session
            # else:
            # We didn't find it -> create
            instance = cls(**kwargs)

        return instance

@sjib
Copy link
Contributor Author

sjib commented Aug 7, 2024

Import is working but CI generates an error
E sqlalchemy.exc.NoForeignKeysError: Can't find any foreign key relationships between 'vsa_baseclass' and 'erhaltungsereignis_abwasserbauwerkassoc'.

=================================== FAILURES ===================================
___________________ TestInterlis.test_minimal_import_export ____________________

self = <Mapper at 0x7fe3468957f0; erhaltungsereignis_abwasserbauwerkassoc>

    def _configure_inheritance(self):
        """Configure settings related to inheriting and/or inherited mappers
        being present."""
    
        # a set of all mappers which inherit from this one.
        self._inheriting_mappers = util.WeakSequence()
    
        if self.inherits:
            if isinstance(self.inherits, type):
                self.inherits = class_mapper(self.inherits, configure=False)
            if not issubclass(self.class_, self.inherits.class_):
                raise sa_exc.ArgumentError(
                    "Class '%s' does not inherit from '%s'"
                    % (self.class_.__name__, self.inherits.class_.__name__)
                )
    
            self.dispatch._update(self.inherits.dispatch)
    
            if self.non_primary != self.inherits.non_primary:
                np = not self.non_primary and "primary" or "non-primary"
                raise sa_exc.ArgumentError(
                    "Inheritance of %s mapper for class '%s' is "
                    "only allowed from a %s mapper"
                    % (np, self.class_.__name__, np)
                )
            # inherit_condition is optional.
            if self.local_table is None:
                self.local_table = self.inherits.local_table
                self.persist_selectable = self.inherits.persist_selectable
                self.single = True
            elif self.local_table is not self.inherits.local_table:
                if self.concrete:
                    self.persist_selectable = self.local_table
                    for mapper in self.iterate_to_root():
                        if mapper.polymorphic_on is not None:
                            mapper._requires_row_aliasing = True
                else:
                    if self.inherit_condition is None:
                        # figure out inherit condition from our table to the
                        # immediate table of the inherited mapper, not its
                        # full table which could pull in other stuff we don't
                        # want (allows test/inheritance.InheritTest4 to pass)
                        try:
>                           self.inherit_condition = sql_util.join_condition(
                                self.inherits.local_table, self.local_table
                            )

/usr/lib/python3/dist-packages/sqlalchemy/orm/mapper.py:1023: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

cls = <class 'sqlalchemy.sql.selectable.Join'>
a = Table('vsa_baseclass', MetaData(), Column('t_id', BIGINT(), ForeignKey('pg2ili_abwasser.sia405_baseclass.t_id'), table...se), Column('datenlieferantref', VARCHAR(length=255), table=<vsa_baseclass>, nullable=False), schema='pg2ili_abwasser')
b = Table('erhaltungsereignis_abwasserbauwerkassoc', MetaData(), schema='pg2ili_abwasser')
a_subset = None, consider_as_foreign_keys = None

    @classmethod
    def _join_condition(
        cls, a, b, a_subset=None, consider_as_foreign_keys=None
    ):
        """Create a join condition between two tables or selectables.
    
        e.g.::
    
            join_condition(tablea, tableb)
    
        would produce an expression along the lines of::
    
            tablea.c.id==tableb.c.tablea_id
    
        The join is determined based on the foreign key relationships
        between the two selectables.   If there are multiple ways
        to join, or no way to join, an error is raised.
    
        :param a_subset: An optional expression that is a sub-component
         of ``a``.  An attempt will be made to join to just this sub-component
         first before looking at the full ``a`` construct, and if found
         will be successful even if there are other ways to join to ``a``.
         This allows the "right side" of a join to be passed thereby
         providing a "natural join".
    
        """
        constraints = cls._joincond_scan_left_right(
            a, a_subset, b, consider_as_foreign_keys
        )
    
        if len(constraints) > 1:
            cls._joincond_trim_constraints(
                a, b, constraints, consider_as_foreign_keys
            )
    
        if len(constraints) == 0:
            if isinstance(b, FromGrouping):
                hint = (
                    " Perhaps you meant to convert the right side to a "
                    "subquery using alias()?"
                )
            else:
                hint = ""
>           raise exc.NoForeignKeysError(
                "Can't find any foreign key relationships "
                "between '%s' and '%s'.%s"
                % (a.description, b.description, hint)
            )
E           sqlalchemy.exc.NoForeignKeysError: Can't find any foreign key relationships between 'vsa_baseclass' and 'erhaltungsereignis_abwasserbauwerkassoc'.

/usr/lib/python3/dist-packages/sqlalchemy/sql/selectable.py:1229: NoForeignKeysError

The above exception was the direct cause of the following exception:

self = <teksi_wastewater.tests.test_interlis.TestInterlis testMethod=test_minimal_import_export>

    def test_minimal_import_export(self):
        # Import organisation
        xtf_file_input = self._get_data_filename(MINIMAL_DATASET_ORGANISATION_ARBON_ONLY)
        interlisImporterExporter = InterlisImporterExporter()
        interlisImporterExporter.interlis_import(xtf_file_input=xtf_file_input)
    
        # Import minimal sia405
        xtf_file_input = self._get_data_filename(MINIMAL_DATASET_SIA405_ABWASSER)
        interlisImporterExporter = InterlisImporterExporter()
        interlisImporterExporter.interlis_import(xtf_file_input=xtf_file_input)
    
        # Import minimal dss
        xtf_file_input = self._get_data_filename(MINIMAL_DATASET_DSS)
         an exception object which we are "replacing", e.g., it's our
         "cause" but we don't want it printed.    Basically just what
         ``__suppress_context__`` does but we don't want to suppress
         the enclosing context, if any.  So for now we make it the
         cause.
        :param from\_: the cause.  this actually sets the cause and doesn't
         hope to hide it someday.
    
        """
        if with_traceback is not None:
            exception = exception.with_traceback(with_traceback)
    
        if from_ is not False:
            exception.__cause__ = from_
        elif replace_context is not None:
            # no good solution here, we would like to have the exception
            # have only the context of replace_context.__context__ so that the
            # intermediary exception does not change, but we can't figure
            # that out.
            exception.__cause__ = replace_context
    
        try:
>           raise exception
E           sqlalchemy.exc.NoForeignKeysError: Can't determine the inherit condition between inherited table 'vsa_baseclass' and inheriting table 'erhaltungsereignis_abwasserbauwerkassoc'; tables have no foreign key relationships established.  Please ensure the inheriting table has a foreign key relationship to the inherited table, or provide an 'on clause' using the 'inherit_condition' mapper argument.

/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py:211: NoForeignKeysError
----------------------------- Captured stdout call -----------------------------

@domi4484 Do you see what would need to be adapted for re_tables? Die re_tabellen werden aufgrund dieser Association gebildet als Zwischentabellen für die Abbildung von n:m Beziehungen.

END Erhaltungsereignis;

!!@ comment = "Assoziation"
ASSOCIATION Erhaltungsereignis_AbwasserbauwerkAssoc =
  AbwasserbauwerkRef  -- {0..*} Abwasserbauwerk;
  Erhaltungsereignis_AbwasserbauwerkAssocRef -- {0..*} Erhaltungsereignis;
END Erhaltungsereignis_AbwasserbauwerkAssoc;

@sjib sjib added this to the TEKSI Wastewater 2024.0 milestone Aug 7, 2024
@ponceta ponceta closed this Aug 8, 2024
@ponceta ponceta reopened this Aug 8, 2024
@sjib sjib requested a review from domi4484 August 9, 2024 20:55
@domi4484 domi4484 force-pushed the 2024-08-05-import-export-re-maintenance-event branch from c651e14 to 5d30aa5 Compare August 21, 2024 19:18
@domi4484 domi4484 force-pushed the 2024-08-05-import-export-re-maintenance-event branch from 5d30aa5 to 82e16e5 Compare August 22, 2024 06:22
@sjib
Copy link
Contributor Author

sjib commented Aug 22, 2024

@domi4484 Thanks for the adaptions I will have a look at them.
Could you describe in a few words how you now implemented the concept of re_tables and how you applied it with the different variations between VSA-DSS and VSA-KEK so we can document that in the Developers guide

@domi4484
Copy link
Contributor

@sjib in principle the implementation is still yours, re_tables are implemented like all other tables.
And not by configuring them as sql alchemy linking tables. In fact I am still not sure how that should work.

About the different models, the exception is for KEK that differs from TWW. During import/export we check if the current model is KEK and handle it accordingly. This are the concerned lines:

For import it was already implemented here with the check if row.abwasserbauwerkref:. In case of DSS, this foreign key will not exists in the table untersuchung.
https://github.com/teksi/wastewater/pull/357/files#diff-e4e449a04b91b6a0ba624461716ca2c3d0de771993151dcf3beb018d3cf016b9R2139

For export it is done by testing the model to export here:
https://github.com/teksi/wastewater/pull/357/files#diff-9e77e92e630193bb920bd5f456ccad606c0ef094cddfc52e64c1d6a3d18eeb71R3145

@domi4484
Copy link
Contributor

There is still an issue with the export to DSS. In case a re_maintenance_event_wastewater_structure relation is imported via KEK, this relation can't be exported to DSS, because untersuchung / examination does not exist in that model.
That means at the moment of export we need to check if the content of row.fk_maintenance_event__REL is a subclass of maintenance_event supported by DSS

@sjib
Copy link
Contributor Author

sjib commented Aug 22, 2024

@domi4484
There was a change between VSA-DSS 2015 / VSA-KEK 2019 and VSA-DSS 2020 / VSA-KEK 2020.

In 2015 the class maintenance_event had just one subclass (examination) and the superclass was not set to ABSTRACT and therefore it was also possible to ad data to maintenance_event also.

This was corrected in 2020 and later and data is only allowed in the now 3 subclasses from maintenance_event (examination, bio_ecol_assessment (new) and maintenance(new)) as maintenance_event is now set as ABSTRACT (as all the other superclasses) and data cannot be added there anymore.
Also the attribute kind from maintenanace_event was moved to the subclass maintenance.

grafik

So you have to consider that and adapt the code and not support the old way that was implemented in qgep in tww.

So if you import data from VSA-KEK 2020.1 you have always an entry in examination and damages are then connected to this.

Hope this helps you understand and fix the last bugs.

@sjib
Copy link
Contributor Author

sjib commented Aug 22, 2024

I guess with that all the complicate checking if an fk_ exists might be obselet.

@domi4484
Copy link
Contributor

@sjib The issue remains, because when we iterate over the content of re_maintenance_event_wastewater_structure we get a reference to a row of maintenance_event which contains no info about its children. (see screenshot)

So my best idea at the moment is to query the obj_id in the sub-tables Unterhalt and Biol_oekol.. to find out if supported by DSS. Or do you see an easyer way?

image

@sjib
Copy link
Contributor Author

sjib commented Aug 23, 2024

@domi4484 Go ahead with that - I don't have experience

Don't know if this could be helpful for the future: http://docs.sqlalchemy.org/en/latest/orm/inheritance.html

Copy link
Member

@ponceta ponceta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be nice to coment what is the difference between

  • Test on QGIS
  • Test on QGIS DSS dataset

@ponceta ponceta closed this Aug 27, 2024
@ponceta ponceta reopened this Aug 27, 2024
@ponceta ponceta merged commit 0c1c42c into main Aug 28, 2024
15 checks passed
@ponceta ponceta deleted the 2024-08-05-import-export-re-maintenance-event branch August 28, 2024 05:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
fix Fixing something not working INTERLIS About INTERLIS exchange format (import / export)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants