From fe02b0f6c5386c9e8de72e0a80b48bd8a40114a6 Mon Sep 17 00:00:00 2001 From: Philipp Horstenkamp Date: Thu, 9 Nov 2023 18:38:04 +0100 Subject: [PATCH] Added an error handling when the sql session crashes in process on network connection lost. (#352) --- .../ui/data_elements.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/aki_prj23_transparenzregister/ui/data_elements.py b/src/aki_prj23_transparenzregister/ui/data_elements.py index 21beaaa..679ac40 100644 --- a/src/aki_prj23_transparenzregister/ui/data_elements.py +++ b/src/aki_prj23_transparenzregister/ui/data_elements.py @@ -1,7 +1,9 @@ """Data elements for Dash.""" import pandas as pd +import sqlalchemy as sa from cachetools import TTLCache, cached +from loguru import logger from sqlalchemy.engine import Engine from sqlalchemy.orm import Session @@ -74,11 +76,15 @@ def get_finance_data_of_one_company(session: Session, company_id: int) -> pd.Dat Returns: A dataframe containing all financial data of the selected company. """ - annual_finance_data = ( - session.query(entities.AnnualFinanceStatement) - .filter(entities.AnnualFinanceStatement.company_id == company_id) # type: ignore - .all() + query = session.query(entities.AnnualFinanceStatement).filter( + entities.AnnualFinanceStatement.company_id == company_id # type: ignore ) + try: + annual_finance_data = query.all() + except sa.exc.OperationalError: + logger.warning("SQL rollback after operational Error!") + session.rollback() + annual_finance_data = query.all() engine = session.bind if not isinstance(engine, Engine):