From dcff635a25b46754dd51da100605f0b68ff85141 Mon Sep 17 00:00:00 2001 From: SJiB Date: Sat, 11 May 2024 21:27:24 +0200 Subject: [PATCH 01/19] Improve user feedback while importing data in qgep --- qgepqwat2ili/gui/gui_import.py | 5 +++++ qgepqwat2ili/qgep/import_.py | 5 +++++ qgepqwat2ili/qgepdss/import_.py | 5 +++++ qgepqwat2ili/qgepsia405/import_.py | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/qgepqwat2ili/gui/gui_import.py b/qgepqwat2ili/gui/gui_import.py index a5574952..06f55409 100644 --- a/qgepqwat2ili/gui/gui_import.py +++ b/qgepqwat2ili/gui/gui_import.py @@ -213,7 +213,12 @@ def commit_session(self): # TODO : rollback to pre-commit state, allowing user to try to fix issues # probably a matter of creating a savepoint before saving with # session.begin_nested() and one additionnal self.session.commit() + + # 11.5.2024 try to add info in message bar + iface.messageBar().pushMessage("Please be patient!", "Importing data in qgep - working ...", level=Qgis.Warning) + self.session.commit() + self.session.close() iface.messageBar().pushMessage("Sucess", "Data successfully imported", level=Qgis.Success) diff --git a/qgepqwat2ili/qgep/import_.py b/qgepqwat2ili/qgep/import_.py index db7bdbc9..5e65284d 100644 --- a/qgepqwat2ili/qgep/import_.py +++ b/qgepqwat2ili/qgep/import_.py @@ -1097,7 +1097,12 @@ def structure_part_common(row): # Calling the precommit callback if provided, allowing to filter before final import if precommit_callback: precommit_callback(qgep_session) + logger.info("precommit_callback(qgep_session)") + # 11.5.2024 improve user feedback + logger.info("Comitting qgep_session - please be patient ...") else: + # 11.5.2024 improve user feedback + logger.info("Comitting qgep_session - please be patient ...") qgep_session.commit() qgep_session.close() abwasser_session.close() diff --git a/qgepqwat2ili/qgepdss/import_.py b/qgepqwat2ili/qgepdss/import_.py index 073b1c62..8f2bab99 100644 --- a/qgepqwat2ili/qgepdss/import_.py +++ b/qgepqwat2ili/qgepdss/import_.py @@ -3800,8 +3800,13 @@ def overflow_common(row): if precommit_callback: precommit_callback(qgep_session) logger.info("precommit_callback(qgep_session)") + # 11.5.2024 improve user feedback + logger.info("Comitting qgep_session - please be patient ...") else: + # 11.5.2024 improve user feedback + logger.info("Comitting qgep_session - please be patient ...") qgep_session.commit() + logger.info("qgep_session sucessfully committed") qgep_session.close() abwasser_session.close() logger.info("abwasser_session closed") diff --git a/qgepqwat2ili/qgepsia405/import_.py b/qgepqwat2ili/qgepsia405/import_.py index b24d1cff..6f20487a 100644 --- a/qgepqwat2ili/qgepsia405/import_.py +++ b/qgepqwat2ili/qgepsia405/import_.py @@ -1096,7 +1096,12 @@ def structure_part_common(row): # Calling the precommit callback if provided, allowing to filter before final import if precommit_callback: precommit_callback(qgep_session) + logger.info("precommit_callback(qgep_session)") + # 11.5.2024 improve user feedback + logger.info("Comitting qgep_session - please be patient ...") else: + # 11.5.2024 improve user feedback + logger.info("Comitting qgep_session - please be patient ...") qgep_session.commit() qgep_session.close() abwasser_session.close() From 514013378fc83bada1bc03f289c63cdb07d25a97 Mon Sep 17 00:00:00 2001 From: SJiB Date: Sat, 11 May 2024 22:22:30 +0200 Subject: [PATCH 02/19] Add Refresh materialized views --- qgepqwat2ili/qgepdss/import_.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/qgepqwat2ili/qgepdss/import_.py b/qgepqwat2ili/qgepdss/import_.py index 8f2bab99..5e11af64 100644 --- a/qgepqwat2ili/qgepdss/import_.py +++ b/qgepqwat2ili/qgepdss/import_.py @@ -3819,3 +3819,22 @@ def overflow_common(row): logger.info("symbology triggers successfully created!") post_session.commit() post_session.close() + + #11.5.2024 add post_session2 - to do add queries for main_cover and main_node as in TEKSI, add to symbology functions? or extra create sql? + # see teksi ww https://github.com/teksi/wastewater/blob/3acfba249866d299f8a22e249d9f1e475fe7b88d/datamodel/app/symbology_functions.sql#L290 + + post_session2 = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) + + # logger.info("Update wastewater structure fk_main_cover") + # cursor.execute("SELECT tww_app.wastewater_structure_update_fk_main_cover('', True);") + + # logger.info("Update wastewater structure fk_main_wastewater_node") + # cursor.execute( + # "SELECT tww_app.wastewater_structure_update_fk_main_wastewater_node('', True);" + # ) + + logger.info("Refresh materialized views") + cursor.execute("SELECT qgep_network.refresh_network_simple();") + + post_session2.commit() + post_session2.close() \ No newline at end of file From 05da68bd8a712bc39f9c5d4290600fa3df3a8634 Mon Sep 17 00:00:00 2001 From: SJiB Date: Sat, 11 May 2024 22:29:30 +0200 Subject: [PATCH 03/19] adaption --- qgepqwat2ili/qgepdss/import_.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qgepqwat2ili/qgepdss/import_.py b/qgepqwat2ili/qgepdss/import_.py index 5e11af64..049a597f 100644 --- a/qgepqwat2ili/qgepdss/import_.py +++ b/qgepqwat2ili/qgepdss/import_.py @@ -3826,11 +3826,11 @@ def overflow_common(row): post_session2 = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) # logger.info("Update wastewater structure fk_main_cover") - # cursor.execute("SELECT tww_app.wastewater_structure_update_fk_main_cover('', True);") + # cursor.execute("SELECT tww_od.wastewater_structure_update_fk_main_cover('', True);") # logger.info("Update wastewater structure fk_main_wastewater_node") # cursor.execute( - # "SELECT tww_app.wastewater_structure_update_fk_main_wastewater_node('', True);" + # "SELECT tww_od.wastewater_structure_update_fk_main_wastewater_node('', True);" # ) logger.info("Refresh materialized views") From 9189b9f749549c921acd1b10c9b468ef7ffef7a6 Mon Sep 17 00:00:00 2001 From: SJiB Date: Sun, 12 May 2024 21:33:28 +0200 Subject: [PATCH 04/19] add time.sleep for testing --- qgepqwat2ili/gui/gui_import.py | 2 +- qgepqwat2ili/qgepdss/import_.py | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/qgepqwat2ili/gui/gui_import.py b/qgepqwat2ili/gui/gui_import.py index 06f55409..cc2c6bd9 100644 --- a/qgepqwat2ili/gui/gui_import.py +++ b/qgepqwat2ili/gui/gui_import.py @@ -216,7 +216,7 @@ def commit_session(self): # 11.5.2024 try to add info in message bar iface.messageBar().pushMessage("Please be patient!", "Importing data in qgep - working ...", level=Qgis.Warning) - + time.sleep(5) self.session.commit() self.session.close() diff --git a/qgepqwat2ili/qgepdss/import_.py b/qgepqwat2ili/qgepdss/import_.py index 049a597f..c2aedece 100644 --- a/qgepqwat2ili/qgepdss/import_.py +++ b/qgepqwat2ili/qgepdss/import_.py @@ -29,6 +29,7 @@ def qgep_import(precommit_callback=None): # We also drop symbology triggers as they badly affect performance. This must be done in a separate session as it # would deadlock other sessions. + logger.info("drop symbology triggers") pre_session.execute("SELECT qgep_sys.drop_symbology_triggers();") pre_session.commit() pre_session.close() @@ -59,6 +60,7 @@ def qgep_import(precommit_callback=None): # logger.info("ALTER TABLE qgep_od.re_maintenance_event_wastewater_structure ALTER CONSTRAINT rel_maintenance_event_wastewater_structure_maintenance_event DEFERRABLE;") # Allow to insert rows with cyclic dependencies at once + logger.info("SET CONSTRAINTS ALL DEFERRED;") qgep_session.execute("SET CONSTRAINTS ALL DEFERRED;") @@ -3820,18 +3822,19 @@ def overflow_common(row): post_session.commit() post_session.close() - #11.5.2024 add post_session2 - to do add queries for main_cover and main_node as in TEKSI, add to symbology functions? or extra create sql? + #11.5.2024 add post_session2 - to do add queries for main_cover and main_node as in TEKSI, add to symbology functions # see teksi ww https://github.com/teksi/wastewater/blob/3acfba249866d299f8a22e249d9f1e475fe7b88d/datamodel/app/symbology_functions.sql#L290 + # needs also delta_1.6.3_functions_update_fk_main_cover_main_wastewater_node.sql post_session2 = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - # logger.info("Update wastewater structure fk_main_cover") - # cursor.execute("SELECT tww_od.wastewater_structure_update_fk_main_cover('', True);") + logger.info("Update wastewater structure fk_main_cover") + cursor.execute("SELECT qgep_od.wastewater_structure_update_fk_main_cover('', True);") - # logger.info("Update wastewater structure fk_main_wastewater_node") - # cursor.execute( - # "SELECT tww_od.wastewater_structure_update_fk_main_wastewater_node('', True);" - # ) + logger.info("Update wastewater structure fk_main_wastewater_node") + cursor.execute( + "SELECT qgep_od.wastewater_structure_update_fk_main_wastewater_node('', True);" + ) logger.info("Refresh materialized views") cursor.execute("SELECT qgep_network.refresh_network_simple();") From 7f38106d5398dff775fdb3c4b0fdd7675931a513 Mon Sep 17 00:00:00 2001 From: SJiB Date: Sun, 12 May 2024 21:33:45 +0200 Subject: [PATCH 05/19] Add second message for testing --- qgepqwat2ili/gui/gui_import.py | 1 + 1 file changed, 1 insertion(+) diff --git a/qgepqwat2ili/gui/gui_import.py b/qgepqwat2ili/gui/gui_import.py index cc2c6bd9..b235d181 100644 --- a/qgepqwat2ili/gui/gui_import.py +++ b/qgepqwat2ili/gui/gui_import.py @@ -217,6 +217,7 @@ def commit_session(self): # 11.5.2024 try to add info in message bar iface.messageBar().pushMessage("Please be patient!", "Importing data in qgep - working ...", level=Qgis.Warning) time.sleep(5) + iface.messageBar().pushMessage("Please be patient!", "Importing data in qgep - still working ...", level=Qgis.Warning) self.session.commit() self.session.close() From 06699fa395f57d7537a45b7d92fd87c0f88afbc0 Mon Sep 17 00:00:00 2001 From: SJiB Date: Sun, 12 May 2024 21:34:32 +0200 Subject: [PATCH 06/19] import_.py - skip Could not find value None to avoid shortening of messages --- qgepqwat2ili/qgepdss/import_.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/qgepqwat2ili/qgepdss/import_.py b/qgepqwat2ili/qgepdss/import_.py index c2aedece..de45b33d 100644 --- a/qgepqwat2ili/qgepdss/import_.py +++ b/qgepqwat2ili/qgepdss/import_.py @@ -73,8 +73,11 @@ def get_vl_instance(vl_table, value): # TODO : return "other" (or other applicable value) rather than None, or even throwing an exception, would probably be better row = qgep_session.query(vl_table).filter(vl_table.value_de == value).first() if row is None: - logger.warning( - f'Could not find value `{value}` in value list "{vl_table.__table__.schema}.{vl_table.__name__}". Setting to None instead.' + # 12.5.2024 write logger.warning only if value is not None + if value != None: + logger.warning( + f'Could not find value `{value}` in value list "{vl_table.__table__.schema}.{vl_table.__name__}". Setting to None instead.' + ) ) return None return row From 03a52ef51cdb16fbbedd5b100cbe6337617e1fc8 Mon Sep 17 00:00:00 2001 From: SJiB Date: Sun, 12 May 2024 22:04:56 +0200 Subject: [PATCH 07/19] change to post_session2 --- qgepqwat2ili/qgepdss/import_.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/qgepqwat2ili/qgepdss/import_.py b/qgepqwat2ili/qgepdss/import_.py index de45b33d..9cbbd35c 100644 --- a/qgepqwat2ili/qgepdss/import_.py +++ b/qgepqwat2ili/qgepdss/import_.py @@ -78,7 +78,6 @@ def get_vl_instance(vl_table, value): logger.warning( f'Could not find value `{value}` in value list "{vl_table.__table__.schema}.{vl_table.__name__}". Setting to None instead.' ) - ) return None return row @@ -3809,10 +3808,11 @@ def overflow_common(row): logger.info("Comitting qgep_session - please be patient ...") else: # 11.5.2024 improve user feedback - logger.info("Comitting qgep_session - please be patient ...") + logger.info("Comitting qgep_session - please be patient (else) ...") qgep_session.commit() logger.info("qgep_session sucessfully committed") qgep_session.close() + abwasser_session.close() logger.info("abwasser_session closed") @@ -3832,15 +3832,15 @@ def overflow_common(row): post_session2 = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) logger.info("Update wastewater structure fk_main_cover") - cursor.execute("SELECT qgep_od.wastewater_structure_update_fk_main_cover('', True);") + post_session2.execute("SELECT qgep_od.wastewater_structure_update_fk_main_cover('', True);") logger.info("Update wastewater structure fk_main_wastewater_node") - cursor.execute( + post_session2.execute( "SELECT qgep_od.wastewater_structure_update_fk_main_wastewater_node('', True);" ) logger.info("Refresh materialized views") - cursor.execute("SELECT qgep_network.refresh_network_simple();") + post_session2.execute("SELECT qgep_network.refresh_network_simple();") post_session2.commit() post_session2.close() \ No newline at end of file From 4714c8eefa3ab2693181f638cddf741f0787ec4e Mon Sep 17 00:00:00 2001 From: SJiB Date: Fri, 31 May 2024 16:51:12 +0200 Subject: [PATCH 08/19] Change post processing to postimport.py This speeds up the import greatly! --- qgepqwat2ili/gui/__init__.py | 13 ++++++-- qgepqwat2ili/gui/gui_import.py | 11 +++++++ qgepqwat2ili/postimport.py | 56 +++++++++++++++++++++++++++++++++ qgepqwat2ili/qgepdss/import_.py | 39 +++++++++++++---------- 4 files changed, 99 insertions(+), 20 deletions(-) create mode 100644 qgepqwat2ili/postimport.py diff --git a/qgepqwat2ili/gui/__init__.py b/qgepqwat2ili/gui/__init__.py index 25c59f0b..ae716dac 100644 --- a/qgepqwat2ili/gui/__init__.py +++ b/qgepqwat2ili/gui/__init__.py @@ -24,6 +24,9 @@ from ..qgepsia405.export import qgep_export as qgepsia405_export from ..qgepsia405.import_ import qgep_import as qgepsia405_import +# 31.5.2024 pfad angepasst - verschoben in gui_import.py +# from ..postimport import qgep_postimport + from ..utils.ili2db import ( create_ili_schema, export_xtf_data, @@ -45,6 +48,8 @@ # 19.4.2023 / 25.4.2023 ohne Bindestrich / neu aus gui_import - Gui from .gui_importc import GuiImportc + + # 12.7.2022 for testing import time import time @@ -354,12 +359,14 @@ def action_import(plugin): log_path, ) - progress_dialog.setLabelText("Set main_cover manually after import if vw_qgep_wastewater_structure does not display correctly!") + # 31.5.2024 should not be needed anymore + # progress_dialog.setLabelText("Set main_cover manually after import if vw_qgep_wastewater_structure does not display correctly!") time.sleep(2) - # to add option to run main_cover.sql manually - + # to add option to run main_cover.sql manually - see postimport.py + # 24.7.2022 / moved to end + # shows progress of import to import wizard, not final commit progress_dialog.setValue(100) diff --git a/qgepqwat2ili/gui/gui_import.py b/qgepqwat2ili/gui/gui_import.py index b235d181..5a8fb8ae 100644 --- a/qgepqwat2ili/gui/gui_import.py +++ b/qgepqwat2ili/gui/gui_import.py @@ -19,6 +19,9 @@ import logging from qgis.PyQt.QtCore import pyqtSlot +# 31.5.2024 pfad angepasst, nue in gui_import.py statt _init_ +from ..postimport import qgep_postimport + # Required for loadUi to find the custom widget sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..")) @@ -218,10 +221,18 @@ def commit_session(self): iface.messageBar().pushMessage("Please be patient!", "Importing data in qgep - working ...", level=Qgis.Warning) time.sleep(5) iface.messageBar().pushMessage("Please be patient!", "Importing data in qgep - still working ...", level=Qgis.Warning) + self.session.commit() self.session.close() iface.messageBar().pushMessage("Sucess", "Data successfully imported", level=Qgis.Success) + + # 31.5.2024 add post session - in postimport.py machen stattdessen + # init qgep_postimport + iface.messageBar().pushMessage("Info", "Start postimport", level=Qgis.Info) + qgep_postimport + + iface.messageBar().pushMessage("Sucess", "Finished postimport", level=Qgis.Success) def rollback_session(self): self.session.rollback() diff --git a/qgepqwat2ili/postimport.py b/qgepqwat2ili/postimport.py new file mode 100644 index 00000000..0e2a453a --- /dev/null +++ b/qgepqwat2ili/postimport.py @@ -0,0 +1,56 @@ +# Needs delta_1.6.3_functions_update_fk_main_cover_main_wastewater_node.sql to work properly + +from functools import lru_cache + +from geoalchemy2.functions import ST_Force3D +from sqlalchemy.orm import Session +from sqlalchemy.orm.attributes import flag_dirty + +#31.5.2024 pfade anpassen +#from .. import utils +#from ..utils.various import logger +from . import utils +from .utils.various import logger +#from .model_abwasser import get_abwasser_model +#from .model_qgep import get_qgep_model + + +def qgep_postimport(): + """ + Additional queries run after qgep_import + """ + + + # 31.5.2024 move in extra file and function postimport + + # TODO : put this in an "finally" block (or context handler) to make sure it's executed + # even if there's an exception + + + post_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) + logger.info("re-enabling symbology triggers (postimport.py)") + post_session.execute("SELECT qgep_sys.create_symbology_triggers();") + logger.info("symbology triggers successfully created! (postimport.py)") + post_session.commit() + post_session.close() + + #11.5.2024 add post_session2 - to do add queries for main_cover and main_node as in TEKSI, add to symbology functions + # see teksi ww https://github.com/teksi/wastewater/blob/3acfba249866d299f8a22e249d9f1e475fe7b88d/datamodel/app/symbology_functions.sql#L290 + # needs delta_1.6.3_functions_update_fk_main_cover_main_wastewater_node.sql + + + post_session2 = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) + + logger.info("Update wastewater structure fk_main_cover") + post_session2.execute("SELECT qgep_od.wastewater_structure_update_fk_main_cover('', True);") + + logger.info("Update wastewater structure fk_main_wastewater_node") + post_session2.execute( + # "SELECT qgep_od.wastewater_structure_update_fk_main_wastewater_node('', True);" + ) + + logger.info("Refresh materialized views") + post_session2.execute("SELECT qgep_network.refresh_network_simple();") + + post_session2.commit() + post_session2.close() \ No newline at end of file diff --git a/qgepqwat2ili/qgepdss/import_.py b/qgepqwat2ili/qgepdss/import_.py index 9cbbd35c..30d9dfe3 100644 --- a/qgepqwat2ili/qgepdss/import_.py +++ b/qgepqwat2ili/qgepdss/import_.py @@ -3815,32 +3815,37 @@ def overflow_common(row): abwasser_session.close() logger.info("abwasser_session closed") + +# 31.5.2024 seems to be at wrong place here - needs to be added to gui/gui_import.py - else it is executed too early. # TODO : put this in an "finally" block (or context handler) to make sure it's executed # even if there's an exception - post_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - logger.info("re-enabling symbology triggers") - post_session.execute("SELECT qgep_sys.create_symbology_triggers();") - logger.info("symbology triggers successfully created!") - post_session.commit() - post_session.close() + +#31.5.2024 commented out and moved to postimport.py + # post_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) + # logger.info("re-enabling symbology triggers") + # post_session.execute("SELECT qgep_sys.create_symbology_triggers();") + # logger.info("symbology triggers successfully created!") + # post_session.commit() + # post_session.close() #11.5.2024 add post_session2 - to do add queries for main_cover and main_node as in TEKSI, add to symbology functions # see teksi ww https://github.com/teksi/wastewater/blob/3acfba249866d299f8a22e249d9f1e475fe7b88d/datamodel/app/symbology_functions.sql#L290 # needs also delta_1.6.3_functions_update_fk_main_cover_main_wastewater_node.sql - post_session2 = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) +#31.5.2024 commented out and moved to postimport.py + # post_session2 = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - logger.info("Update wastewater structure fk_main_cover") - post_session2.execute("SELECT qgep_od.wastewater_structure_update_fk_main_cover('', True);") + # logger.info("Update wastewater structure fk_main_cover") + # post_session2.execute("SELECT qgep_od.wastewater_structure_update_fk_main_cover('', True);") - logger.info("Update wastewater structure fk_main_wastewater_node") - post_session2.execute( - "SELECT qgep_od.wastewater_structure_update_fk_main_wastewater_node('', True);" - ) + # logger.info("Update wastewater structure fk_main_wastewater_node") + # post_session2.execute( + # "SELECT qgep_od.wastewater_structure_update_fk_main_wastewater_node('', True);" + # ) - logger.info("Refresh materialized views") - post_session2.execute("SELECT qgep_network.refresh_network_simple();") + # logger.info("Refresh materialized views") + # post_session2.execute("SELECT qgep_network.refresh_network_simple();") - post_session2.commit() - post_session2.close() \ No newline at end of file + # post_session2.commit() + # post_session2.close() \ No newline at end of file From bb01b61cd6a0df5c246cf7a9af53bd28b17d1848 Mon Sep 17 00:00:00 2001 From: SJiB Date: Fri, 31 May 2024 18:00:16 +0200 Subject: [PATCH 09/19] fix function call --- qgepqwat2ili/gui/gui_import.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qgepqwat2ili/gui/gui_import.py b/qgepqwat2ili/gui/gui_import.py index 5a8fb8ae..4cb4462e 100644 --- a/qgepqwat2ili/gui/gui_import.py +++ b/qgepqwat2ili/gui/gui_import.py @@ -230,7 +230,7 @@ def commit_session(self): # 31.5.2024 add post session - in postimport.py machen stattdessen # init qgep_postimport iface.messageBar().pushMessage("Info", "Start postimport", level=Qgis.Info) - qgep_postimport + qgep_postimport() iface.messageBar().pushMessage("Sucess", "Finished postimport", level=Qgis.Success) From a461d2f3400a2a5b80b5f8897bc400969a459a0f Mon Sep 17 00:00:00 2001 From: SJiB Date: Fri, 31 May 2024 19:45:34 +0200 Subject: [PATCH 10/19] uncomment query statement --- qgepqwat2ili/postimport.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/qgepqwat2ili/postimport.py b/qgepqwat2ili/postimport.py index 0e2a453a..42c51e81 100644 --- a/qgepqwat2ili/postimport.py +++ b/qgepqwat2ili/postimport.py @@ -45,8 +45,7 @@ def qgep_postimport(): post_session2.execute("SELECT qgep_od.wastewater_structure_update_fk_main_cover('', True);") logger.info("Update wastewater structure fk_main_wastewater_node") - post_session2.execute( - # "SELECT qgep_od.wastewater_structure_update_fk_main_wastewater_node('', True);" + post_session2.execute("SELECT qgep_od.wastewater_structure_update_fk_main_wastewater_node('', True);" ) logger.info("Refresh materialized views") From bf1a9755fc100aa9ea3561e187186f6ec46cddbc Mon Sep 17 00:00:00 2001 From: SJiB Date: Fri, 31 May 2024 20:17:08 +0200 Subject: [PATCH 11/19] adjust import_.py gep / gepsia405 Take adaptions to other models, not just qgepdss --- qgepqwat2ili/qgep/import_.py | 11 +++++++---- qgepqwat2ili/qgepdss/import_.py | 2 +- qgepqwat2ili/qgepsia405/import_.py | 13 ++++++++----- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/qgepqwat2ili/qgep/import_.py b/qgepqwat2ili/qgep/import_.py index 5e65284d..aeb0a749 100644 --- a/qgepqwat2ili/qgep/import_.py +++ b/qgepqwat2ili/qgep/import_.py @@ -1107,9 +1107,12 @@ def structure_part_common(row): qgep_session.close() abwasser_session.close() +# 31.5.2024 seems to be at wrong place here - needs to be added to gui/gui_import.py - else it is executed too early. + # TODO : put this in an "finally" block (or context handler) to make sure it's executed # even if there's an exception - post_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - post_session.execute("SELECT qgep_sys.create_symbology_triggers();") - post_session.commit() - post_session.close() + + # post_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) + # post_session.execute("SELECT qgep_sys.create_symbology_triggers();") + # post_session.commit() + # post_session.close() diff --git a/qgepqwat2ili/qgepdss/import_.py b/qgepqwat2ili/qgepdss/import_.py index 30d9dfe3..f10aa39a 100644 --- a/qgepqwat2ili/qgepdss/import_.py +++ b/qgepqwat2ili/qgepdss/import_.py @@ -3805,7 +3805,7 @@ def overflow_common(row): precommit_callback(qgep_session) logger.info("precommit_callback(qgep_session)") # 11.5.2024 improve user feedback - logger.info("Comitting qgep_session - please be patient ...") + logger.info("Comitting qgep_session (precommit_callback) - please be patient ...") else: # 11.5.2024 improve user feedback logger.info("Comitting qgep_session - please be patient (else) ...") diff --git a/qgepqwat2ili/qgepsia405/import_.py b/qgepqwat2ili/qgepsia405/import_.py index 6f20487a..d194cfa7 100644 --- a/qgepqwat2ili/qgepsia405/import_.py +++ b/qgepqwat2ili/qgepsia405/import_.py @@ -1098,7 +1098,7 @@ def structure_part_common(row): precommit_callback(qgep_session) logger.info("precommit_callback(qgep_session)") # 11.5.2024 improve user feedback - logger.info("Comitting qgep_session - please be patient ...") + logger.info("Comitting qgep_session (precommit_callback) - please be patient ...") else: # 11.5.2024 improve user feedback logger.info("Comitting qgep_session - please be patient ...") @@ -1106,9 +1106,12 @@ def structure_part_common(row): qgep_session.close() abwasser_session.close() +# 31.5.2024 seems to be at wrong place here - needs to be added to gui/gui_import.py - else it is executed too early. + # TODO : put this in an "finally" block (or context handler) to make sure it's executed # even if there's an exception - post_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - post_session.execute("SELECT qgep_sys.create_symbology_triggers();") - post_session.commit() - post_session.close() + + # post_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) + # post_session.execute("SELECT qgep_sys.create_symbology_triggers();") + # post_session.commit() + # post_session.close() From f0a99e02a81e8a8341aa11d4db05b5bbbb7bcafe Mon Sep 17 00:00:00 2001 From: SJiB Date: Fri, 31 May 2024 20:17:54 +0200 Subject: [PATCH 12/19] correct spelling repeated instead of repeted --- qgepqwat2ili/utils/various.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qgepqwat2ili/utils/various.py b/qgepqwat2ili/utils/various.py index b03e6444..40a815df 100644 --- a/qgepqwat2ili/utils/various.py +++ b/qgepqwat2ili/utils/various.py @@ -27,7 +27,7 @@ def _log(self, level, msg, args, exc_info=None, extra=None): this_message = (level, msg) if self._last_message is None or self._last_message != this_message: if self._repeated > 0: - super()._log(self._last_message[0], f"[repeted {self._repeated} times]", args, exc_info, extra) + super()._log(self._last_message[0], f"[repeated {self._repeated} times]", args, exc_info, extra) super()._log(level, msg, args, exc_info, extra) self._repeated = 0 From 8707dae8a3068415aa572646a34684d83ce1faa8 Mon Sep 17 00:00:00 2001 From: SJiB Date: Fri, 31 May 2024 20:19:07 +0200 Subject: [PATCH 13/19] cleaning up --- qgepqwat2ili/gui/__init__.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/qgepqwat2ili/gui/__init__.py b/qgepqwat2ili/gui/__init__.py index ae716dac..06811070 100644 --- a/qgepqwat2ili/gui/__init__.py +++ b/qgepqwat2ili/gui/__init__.py @@ -24,9 +24,6 @@ from ..qgepsia405.export import qgep_export as qgepsia405_export from ..qgepsia405.import_ import qgep_import as qgepsia405_import -# 31.5.2024 pfad angepasst - verschoben in gui_import.py -# from ..postimport import qgep_postimport - from ..utils.ili2db import ( create_ili_schema, export_xtf_data, From 86cf1928281c6c08dddfdbe008116e34dd069738 Mon Sep 17 00:00:00 2001 From: SJiB Date: Fri, 31 May 2024 20:22:02 +0200 Subject: [PATCH 14/19] comment angepasst --- qgepqwat2ili/gui/gui_import.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qgepqwat2ili/gui/gui_import.py b/qgepqwat2ili/gui/gui_import.py index 4cb4462e..bef4ac0c 100644 --- a/qgepqwat2ili/gui/gui_import.py +++ b/qgepqwat2ili/gui/gui_import.py @@ -19,7 +19,7 @@ import logging from qgis.PyQt.QtCore import pyqtSlot -# 31.5.2024 pfad angepasst, nue in gui_import.py statt _init_ +# 31.5.2024 pfad angepasst, neu in gui_import.py statt _init_.py from ..postimport import qgep_postimport # Required for loadUi to find the custom widget @@ -230,6 +230,7 @@ def commit_session(self): # 31.5.2024 add post session - in postimport.py machen stattdessen # init qgep_postimport iface.messageBar().pushMessage("Info", "Start postimport", level=Qgis.Info) + qgep_postimport() iface.messageBar().pushMessage("Sucess", "Finished postimport", level=Qgis.Success) From 165631ab1dc8bdcfd0472ba1a97481d50f2db132 Mon Sep 17 00:00:00 2001 From: SJiB Date: Mon, 17 Jun 2024 16:37:00 +0200 Subject: [PATCH 15/19] postimport.py - just use one session https://github.com/QGEP/qgepqwat2ili/pull/141#discussion_r1628036691 --- qgepqwat2ili/postimport.py | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/qgepqwat2ili/postimport.py b/qgepqwat2ili/postimport.py index 42c51e81..2c8f994c 100644 --- a/qgepqwat2ili/postimport.py +++ b/qgepqwat2ili/postimport.py @@ -21,8 +21,7 @@ def qgep_postimport(): """ - # 31.5.2024 move in extra file and function postimport - + # move in extra file and function postimport # TODO : put this in an "finally" block (or context handler) to make sure it's executed # even if there's an exception @@ -31,25 +30,19 @@ def qgep_postimport(): logger.info("re-enabling symbology triggers (postimport.py)") post_session.execute("SELECT qgep_sys.create_symbology_triggers();") logger.info("symbology triggers successfully created! (postimport.py)") - post_session.commit() - post_session.close() - #11.5.2024 add post_session2 - to do add queries for main_cover and main_node as in TEKSI, add to symbology functions + # add queries for main_cover and main_node as in TEKSI, add to symbology functions # see teksi ww https://github.com/teksi/wastewater/blob/3acfba249866d299f8a22e249d9f1e475fe7b88d/datamodel/app/symbology_functions.sql#L290 # needs delta_1.6.3_functions_update_fk_main_cover_main_wastewater_node.sql - - - post_session2 = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - logger.info("Update wastewater structure fk_main_cover") - post_session2.execute("SELECT qgep_od.wastewater_structure_update_fk_main_cover('', True);") + post_session.execute("SELECT qgep_od.wastewater_structure_update_fk_main_cover('', True);") logger.info("Update wastewater structure fk_main_wastewater_node") - post_session2.execute("SELECT qgep_od.wastewater_structure_update_fk_main_wastewater_node('', True);" + post_session.execute("SELECT qgep_od.wastewater_structure_update_fk_main_wastewater_node('', True);" ) logger.info("Refresh materialized views") - post_session2.execute("SELECT qgep_network.refresh_network_simple();") + post_session.execute("SELECT qgep_network.refresh_network_simple();") - post_session2.commit() - post_session2.close() \ No newline at end of file + post_session.commit() + post_session.close() \ No newline at end of file From 77851dd2b8c8f5f776e14545a7fb0dcb28735046 Mon Sep 17 00:00:00 2001 From: SJiB Date: Mon, 17 Jun 2024 16:47:18 +0200 Subject: [PATCH 16/19] Adapt gui_import - rollback_session --- qgepqwat2ili/gui/gui_import.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/qgepqwat2ili/gui/gui_import.py b/qgepqwat2ili/gui/gui_import.py index bef4ac0c..2c681451 100644 --- a/qgepqwat2ili/gui/gui_import.py +++ b/qgepqwat2ili/gui/gui_import.py @@ -217,20 +217,19 @@ def commit_session(self): # probably a matter of creating a savepoint before saving with # session.begin_nested() and one additionnal self.session.commit() - # 11.5.2024 try to add info in message bar + # add info in message bar iface.messageBar().pushMessage("Please be patient!", "Importing data in qgep - working ...", level=Qgis.Warning) - time.sleep(5) - iface.messageBar().pushMessage("Please be patient!", "Importing data in qgep - still working ...", level=Qgis.Warning) - self.session.commit() + try: + self.session.commit() + self.session.close() + except: + rollback_session() - self.session.close() iface.messageBar().pushMessage("Sucess", "Data successfully imported", level=Qgis.Success) - # 31.5.2024 add post session - in postimport.py machen stattdessen - # init qgep_postimport + # add post session - in postimport.py iface.messageBar().pushMessage("Info", "Start postimport", level=Qgis.Info) - qgep_postimport() iface.messageBar().pushMessage("Sucess", "Finished postimport", level=Qgis.Success) From 8a7906350fa4de121b6ffe76a1e6f7eb99c73ef9 Mon Sep 17 00:00:00 2001 From: SJiB Date: Mon, 17 Jun 2024 16:50:09 +0200 Subject: [PATCH 17/19] cleanup import.py qgep --- qgepqwat2ili/qgep/import_.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/qgepqwat2ili/qgep/import_.py b/qgepqwat2ili/qgep/import_.py index aeb0a749..424291f2 100644 --- a/qgepqwat2ili/qgep/import_.py +++ b/qgepqwat2ili/qgep/import_.py @@ -1098,21 +1098,12 @@ def structure_part_common(row): if precommit_callback: precommit_callback(qgep_session) logger.info("precommit_callback(qgep_session)") - # 11.5.2024 improve user feedback + # improve user feedback logger.info("Comitting qgep_session - please be patient ...") else: - # 11.5.2024 improve user feedback + # improve user feedback logger.info("Comitting qgep_session - please be patient ...") qgep_session.commit() qgep_session.close() abwasser_session.close() -# 31.5.2024 seems to be at wrong place here - needs to be added to gui/gui_import.py - else it is executed too early. - - # TODO : put this in an "finally" block (or context handler) to make sure it's executed - # even if there's an exception - - # post_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - # post_session.execute("SELECT qgep_sys.create_symbology_triggers();") - # post_session.commit() - # post_session.close() From 7e293e3eb996e80a0e730a750a0894e076b31778 Mon Sep 17 00:00:00 2001 From: SJiB Date: Mon, 17 Jun 2024 16:55:04 +0200 Subject: [PATCH 18/19] cleanup import.py qgepdss --- qgepqwat2ili/qgep/import_.py | 3 +- qgepqwat2ili/qgepdss/import_.py | 61 +++------------------------------ 2 files changed, 7 insertions(+), 57 deletions(-) diff --git a/qgepqwat2ili/qgep/import_.py b/qgepqwat2ili/qgep/import_.py index 424291f2..d4d07965 100644 --- a/qgepqwat2ili/qgep/import_.py +++ b/qgepqwat2ili/qgep/import_.py @@ -37,7 +37,8 @@ def qgep_import(precommit_callback=None): abwasser_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) qgep_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - # Allow to insert rows with cyclic dependencies at once + # Allow to insert rows with cyclic dependencies at once, needs data modell version 1.6.2 https://github.com/QGEP/datamodel/pull/235 to work properly + logger.info("SET CONSTRAINTS ALL DEFERRED;") qgep_session.execute("SET CONSTRAINTS ALL DEFERRED;") def get_vl_instance(vl_table, value): diff --git a/qgepqwat2ili/qgepdss/import_.py b/qgepqwat2ili/qgepdss/import_.py index f10aa39a..8b8ffa98 100644 --- a/qgepqwat2ili/qgepdss/import_.py +++ b/qgepqwat2ili/qgepdss/import_.py @@ -41,25 +41,8 @@ def qgep_import(precommit_callback=None): qgep_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - # 29.3.2023 Add additional DEREFERABLE constraints - # ALTER TABLE qgep_od.overflow ADD CONSTRAINT rel_overflow_overflow_to FOREIGN KEY (fk_overflow_to) REFERENCES qgep_od.wastewater_node(obj_id) ON UPDATE CASCADE ON DELETE set null; - # qgep_session.execute("ALTER TABLE qgep_od.overflow ALTER CONSTRAINT rel_overflow_overflow_to DEFERRABLE;") - # logger.info("ALTER TABLE qgep_od.overflow ALTER CONSTRAINT rel_overflow_overflow_to DEFERRABLE;") - - # qgep_session.execute("ALTER TABLE qgep_od.throttle_shut_off_unit ALTER CONSTRAINT rel_throttle_shut_off_unit_wastewater_node DEFERRABLE;") - # logger.info("ALTER TABLE qgep_od.throttle_shut_off_unit ALTER CONSTRAINT rel_throttle_shut_off_unit_wastewater_node DEFERRABLE;") - - # qgep_session.execute("ALTER TABLE qgep_od.tank_emptying ALTER CONSTRAINT rel_tank_emptying_overflow DEFERRABLE;") - # logger.info("ALTER TABLE qgep_od.tank_emptying ALTER CONSTRAINT rel_tank_emptying_overflow DEFERRABLE;") - - # qgep_session.execute("ALTER TABLE qgep_od.wastewater_networkelement ALTER CONSTRAINT rel_wastewater_networkelement_wastewater_structure DEFERRABLE;") - # logger.info("ALTER TABLE qgep_od.wastewater_networkelement ALTER CONSTRAINT rel_wastewater_networkelement_wastewater_structure DEFERRABLE;") - - # qgep_session.execute("ALTER TABLE qgep_od.re_maintenance_event_wastewater_structure ALTER CONSTRAINT rel_maintenance_event_wastewater_structure_maintenance_event DEFERRABLE;") - # logger.info("ALTER TABLE qgep_od.re_maintenance_event_wastewater_structure ALTER CONSTRAINT rel_maintenance_event_wastewater_structure_maintenance_event DEFERRABLE;") - - # Allow to insert rows with cyclic dependencies at once + # Allow to insert rows with cyclic dependencies at once, needs data modell version 1.6.2 https://github.com/QGEP/datamodel/pull/235 to work properly logger.info("SET CONSTRAINTS ALL DEFERRED;") qgep_session.execute("SET CONSTRAINTS ALL DEFERRED;") @@ -73,7 +56,7 @@ def get_vl_instance(vl_table, value): # TODO : return "other" (or other applicable value) rather than None, or even throwing an exception, would probably be better row = qgep_session.query(vl_table).filter(vl_table.value_de == value).first() if row is None: - # 12.5.2024 write logger.warning only if value is not None + # write logger.warning only if value is not None if value != None: logger.warning( f'Could not find value `{value}` in value list "{vl_table.__table__.schema}.{vl_table.__name__}". Setting to None instead.' @@ -3747,7 +3730,7 @@ def overflow_common(row): print(".", end="") logger.info("done") -#neu 19.4.2023 +# added logger info logger.info("Importing ABWASSER.erhaltungsereignis, ABWASSER.metaattribute -> QGEP.maintenance_event") for row, metaattribute in abwasser_session.query(ABWASSER.erhaltungsereignis, ABWASSER.metaattribute).join( ABWASSER.metaattribute @@ -3804,10 +3787,10 @@ def overflow_common(row): if precommit_callback: precommit_callback(qgep_session) logger.info("precommit_callback(qgep_session)") - # 11.5.2024 improve user feedback + # improve user feedback logger.info("Comitting qgep_session (precommit_callback) - please be patient ...") else: - # 11.5.2024 improve user feedback + # improve user feedback logger.info("Comitting qgep_session - please be patient (else) ...") qgep_session.commit() logger.info("qgep_session sucessfully committed") @@ -3815,37 +3798,3 @@ def overflow_common(row): abwasser_session.close() logger.info("abwasser_session closed") - -# 31.5.2024 seems to be at wrong place here - needs to be added to gui/gui_import.py - else it is executed too early. - - # TODO : put this in an "finally" block (or context handler) to make sure it's executed - # even if there's an exception - -#31.5.2024 commented out and moved to postimport.py - # post_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - # logger.info("re-enabling symbology triggers") - # post_session.execute("SELECT qgep_sys.create_symbology_triggers();") - # logger.info("symbology triggers successfully created!") - # post_session.commit() - # post_session.close() - - #11.5.2024 add post_session2 - to do add queries for main_cover and main_node as in TEKSI, add to symbology functions - # see teksi ww https://github.com/teksi/wastewater/blob/3acfba249866d299f8a22e249d9f1e475fe7b88d/datamodel/app/symbology_functions.sql#L290 - # needs also delta_1.6.3_functions_update_fk_main_cover_main_wastewater_node.sql - -#31.5.2024 commented out and moved to postimport.py - # post_session2 = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - - # logger.info("Update wastewater structure fk_main_cover") - # post_session2.execute("SELECT qgep_od.wastewater_structure_update_fk_main_cover('', True);") - - # logger.info("Update wastewater structure fk_main_wastewater_node") - # post_session2.execute( - # "SELECT qgep_od.wastewater_structure_update_fk_main_wastewater_node('', True);" - # ) - - # logger.info("Refresh materialized views") - # post_session2.execute("SELECT qgep_network.refresh_network_simple();") - - # post_session2.commit() - # post_session2.close() \ No newline at end of file From 3fca35c3f4e991a32ac954ab7442e9a9b0922877 Mon Sep 17 00:00:00 2001 From: SJiB Date: Mon, 17 Jun 2024 16:59:41 +0200 Subject: [PATCH 19/19] cleanup import.py gepsia405 --- qgepqwat2ili/qgep/import_.py | 6 +++--- qgepqwat2ili/qgepdss/import_.py | 4 +--- qgepqwat2ili/qgepsia405/import_.py | 22 +++++++--------------- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/qgepqwat2ili/qgep/import_.py b/qgepqwat2ili/qgep/import_.py index d4d07965..71963e98 100644 --- a/qgepqwat2ili/qgep/import_.py +++ b/qgepqwat2ili/qgep/import_.py @@ -1092,8 +1092,6 @@ def structure_part_common(row): print(".", end="") logger.info("done") - # Recreate the triggers - # qgep_session.execute('SELECT qgep_sys.create_symbology_triggers();') # Calling the precommit callback if provided, allowing to filter before final import if precommit_callback: @@ -1105,6 +1103,8 @@ def structure_part_common(row): # improve user feedback logger.info("Comitting qgep_session - please be patient ...") qgep_session.commit() + logger.info("qgep_session sucessfully committed") qgep_session.close() + logger.info("qgep_session closed") abwasser_session.close() - + logger.info("abwasser_session closed") diff --git a/qgepqwat2ili/qgepdss/import_.py b/qgepqwat2ili/qgepdss/import_.py index 8b8ffa98..14be4bf8 100644 --- a/qgepqwat2ili/qgepdss/import_.py +++ b/qgepqwat2ili/qgepdss/import_.py @@ -3780,8 +3780,6 @@ def overflow_common(row): logger.info("done") - # Recreate the triggers - # qgep_session.execute('SELECT qgep_sys.create_symbology_triggers();') # Calling the precommit callback if provided, allowing to filter before final import if precommit_callback: @@ -3795,6 +3793,6 @@ def overflow_common(row): qgep_session.commit() logger.info("qgep_session sucessfully committed") qgep_session.close() - + logger.info("qgep_session closed") abwasser_session.close() logger.info("abwasser_session closed") diff --git a/qgepqwat2ili/qgepsia405/import_.py b/qgepqwat2ili/qgepsia405/import_.py index d194cfa7..46900360 100644 --- a/qgepqwat2ili/qgepsia405/import_.py +++ b/qgepqwat2ili/qgepsia405/import_.py @@ -37,7 +37,8 @@ def qgep_import(precommit_callback=None): abwasser_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) qgep_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - # Allow to insert rows with cyclic dependencies at once + # Allow to insert rows with cyclic dependencies at once, needs data modell version 1.6.2 https://github.com/QGEP/datamodel/pull/235 to work properly + logger.info("SET CONSTRAINTS ALL DEFERRED;") qgep_session.execute("SET CONSTRAINTS ALL DEFERRED;") def get_vl_instance(vl_table, value): @@ -1090,28 +1091,19 @@ def structure_part_common(row): # logger.info("done") - # Recreate the triggers - # qgep_session.execute('SELECT qgep_sys.create_symbology_triggers();') # Calling the precommit callback if provided, allowing to filter before final import if precommit_callback: precommit_callback(qgep_session) logger.info("precommit_callback(qgep_session)") - # 11.5.2024 improve user feedback + # improve user feedback logger.info("Comitting qgep_session (precommit_callback) - please be patient ...") else: - # 11.5.2024 improve user feedback + # improve user feedback logger.info("Comitting qgep_session - please be patient ...") qgep_session.commit() + logger.info("qgep_session sucessfully committed") qgep_session.close() + logger.info("qgep_session closed") abwasser_session.close() - -# 31.5.2024 seems to be at wrong place here - needs to be added to gui/gui_import.py - else it is executed too early. - - # TODO : put this in an "finally" block (or context handler) to make sure it's executed - # even if there's an exception - - # post_session = Session(utils.sqlalchemy.create_engine(), autocommit=False, autoflush=False) - # post_session.execute("SELECT qgep_sys.create_symbology_triggers();") - # post_session.commit() - # post_session.close() + logger.info("abwasser_session closed")