From ee1b65f6668f72caa988000df42d139d5264e851 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Feb 2026 11:21:30 +0000 Subject: [PATCH 1/2] build(deps-dev): bump black from 25.12.0 to 26.1.0 Bumps [black](https://github.com/psf/black) from 25.12.0 to 26.1.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/25.12.0...26.1.0) --- updated-dependencies: - dependency-name: black dependency-version: 26.1.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a8871c0..af6bd7f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ coverage = [ "coverage==7.13.4" ] formatting = [ - "black==25.12.0", + "black==26.1.0", "isort==7.0.0" ] linting = [ From 2e2e80f10f2080583af98b2bc363e5448a95eb44 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Tue, 3 Mar 2026 00:23:12 +0100 Subject: [PATCH 2/2] style: reformat codebase with black 26.1.0 (#248) * Initial plan * style: reformat codebase with black 26.1.0 Co-authored-by: hf-kklein <23094997+hf-kklein@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: hf-kklein <23094997+hf-kklein@users.noreply.github.com> --- src/fundamend/reader/ahbreader.py | 6 +-- src/fundamend/sqlmodels/ahbtabellen_view.py | 2 +- src/fundamend/sqlmodels/ahbview.py | 2 +- src/fundamend/sqlmodels/anwendungshandbuch.py | 6 +-- src/fundamend/sqlmodels/expression_view.py | 6 +-- .../sqlmodels/messageimplementationguide.py | 6 +-- unittests/test_ahb_diff_view.py | 40 +++++-------------- unittests/test_pydantic_features.py | 2 +- 8 files changed, 25 insertions(+), 45 deletions(-) diff --git a/src/fundamend/reader/ahbreader.py b/src/fundamend/reader/ahbreader.py index 41e92cc..fe0ee12 100644 --- a/src/fundamend/reader/ahbreader.py +++ b/src/fundamend/reader/ahbreader.py @@ -189,17 +189,17 @@ def get_version(self) -> str: def get_bedingungen(self) -> list[Bedingung]: """returns the plain bedingungen""" - return [_to_bedingung(x) for x in self._element_tree.getroot().find("Bedingungen")] # type:ignore[union-attr] + return [_to_bedingung(x) for x in self._element_tree.getroot().find("Bedingungen")] # type: ignore[union-attr] def get_ub_bedingungen(self) -> list[UbBedingung]: """returns the UB Bedingungen""" return [ - _to_ub_bedingung(x) for x in self._element_tree.getroot().find("UB_Bedingungen") # type:ignore[union-attr] + _to_ub_bedingung(x) for x in self._element_tree.getroot().find("UB_Bedingungen") # type: ignore[union-attr] ] def get_pakete(self) -> list[Paket]: """returns the package definitions""" - return [_to_paket(x) for x in self._element_tree.getroot().find("Pakete")] # type:ignore[union-attr] + return [_to_paket(x) for x in self._element_tree.getroot().find("Pakete")] # type: ignore[union-attr] def get_anwendungsfall(self, pruefidentifikator: str) -> Anwendungsfall | None: """find the anwendungsfall matching the pruefidentifikator or return None""" diff --git a/src/fundamend/sqlmodels/ahbtabellen_view.py b/src/fundamend/sqlmodels/ahbtabellen_view.py index c6cd627..802646f 100644 --- a/src/fundamend/sqlmodels/ahbtabellen_view.py +++ b/src/fundamend/sqlmodels/ahbtabellen_view.py @@ -25,7 +25,7 @@ def create_ahbtabellen_view(session: Session) -> None: """ _execute_bare_sql(session=session, path_to_sql_commands=Path(__file__).parent / "create_ahbtabellen_view.sql") number_of_rows = session.scalar( - select(func.count(AhbTabellenLine.id)) # type:ignore[arg-type] # pylint:disable=not-callable + select(func.count(AhbTabellenLine.id)) # type: ignore[arg-type] # pylint:disable=not-callable ) _logger.info( "There are %d rows in the AHBTabellen view %s", diff --git a/src/fundamend/sqlmodels/ahbview.py b/src/fundamend/sqlmodels/ahbview.py index 3fa77cf..0b395ba 100644 --- a/src/fundamend/sqlmodels/ahbview.py +++ b/src/fundamend/sqlmodels/ahbview.py @@ -52,7 +52,7 @@ def create_ahb_view(session: Session) -> None: _execute_bare_sql(session=session, path_to_sql_commands=Path(__file__).parent / "materialize_ahb_view.sql") number_of_inserted_rows = session.scalar( - select(func.count(AhbHierarchyMaterialized.id)) # type:ignore[arg-type] # pylint:disable=not-callable # + select(func.count(AhbHierarchyMaterialized.id)) # type: ignore[arg-type] # pylint:disable=not-callable # ) _logger.info( "Inserted %d rows into the materialized view %s", diff --git a/src/fundamend/sqlmodels/anwendungshandbuch.py b/src/fundamend/sqlmodels/anwendungshandbuch.py index 6bf1745..3babf3d 100644 --- a/src/fundamend/sqlmodels/anwendungshandbuch.py +++ b/src/fundamend/sqlmodels/anwendungshandbuch.py @@ -223,7 +223,7 @@ def to_model(self) -> PydanticSegment: data_elements=tuple( x.to_model() for x in sorted( - (self.data_elements or []) + (self.data_element_groups or []), # type:ignore[operator] + (self.data_elements or []) + (self.data_element_groups or []), # type: ignore[operator] key=lambda y: y.position or 0, ) ), @@ -316,7 +316,7 @@ def to_model(self) -> PydanticSegmentGroup: elements=tuple( x.to_model() for x in sorted( - (self.segments or []) + (self.segment_groups or []), # type:ignore[operator] + (self.segments or []) + (self.segment_groups or []), # type: ignore[operator] key=lambda y: y.position or 0, ) ), @@ -392,7 +392,7 @@ def to_model(self) -> PydanticAnwendungsfall: elements=tuple( x.to_model() for x in sorted( - ((self.segments or []) + (self.segment_groups or [])), # type:ignore[operator] + ((self.segments or []) + (self.segment_groups or [])), # type: ignore[operator] key=lambda y: y.position or 0, ) ), diff --git a/src/fundamend/sqlmodels/expression_view.py b/src/fundamend/sqlmodels/expression_view.py index 9083341..9f36b04 100644 --- a/src/fundamend/sqlmodels/expression_view.py +++ b/src/fundamend/sqlmodels/expression_view.py @@ -170,9 +170,9 @@ def create_and_fill_ahb_expression_table(session: Session, use_cpu_intensive_val ahb_status_col, AhbHierarchyMaterialized.anwendungshandbuch_primary_key, ) - rows.extend(session.exec(stmt)) # type:ignore[arg-type] + rows.extend(session.exec(stmt)) # type: ignore[arg-type] non_empty_rows: list[tuple[EdifactFormatVersion, str, str, uuid.UUID]] = [ - r for r in rows if r[2] is not None and r[0] is not None and r[2].strip() # type:ignore[misc] + r for r in rows if r[2] is not None and r[0] is not None and r[2].strip() # type: ignore[misc] ] if not any(rows): raise ValueError( @@ -184,7 +184,7 @@ def create_and_fill_ahb_expression_table(session: Session, use_cpu_intensive_val row for row in non_empty_rows if (key := (row[0], row[1], row[2].strip())) not in seen - and not seen.add(key) # type:ignore[ func-returns-value] + and not seen.add(key) # type: ignore[ func-returns-value] ] ahb_expression_rows: list[AhbExpression] = [] for row in unique_rows: # there are ~3600 unique rows for FV2410+FV2504 as of 2025-04-15 diff --git a/src/fundamend/sqlmodels/messageimplementationguide.py b/src/fundamend/sqlmodels/messageimplementationguide.py index 58ff46b..887248b 100644 --- a/src/fundamend/sqlmodels/messageimplementationguide.py +++ b/src/fundamend/sqlmodels/messageimplementationguide.py @@ -246,7 +246,7 @@ def to_model(self) -> PydanticSegment: data_elements=tuple( x.to_model() for x in sorted( - (self.data_elements or []) + (self.data_element_groups or []), # type:ignore[operator] + (self.data_elements or []) + (self.data_element_groups or []), # type: ignore[operator] key=lambda y: y.position or 0, ) ), @@ -342,7 +342,7 @@ def to_model(self) -> PydanticSegmentGroup: elements=tuple( x.to_model() for x in sorted( - (self.segments or []) + (self.segment_groups or []), # type:ignore[operator] + (self.segments or []) + (self.segment_groups or []), # type: ignore[operator] key=lambda y: y.position or 0, ) ), @@ -416,7 +416,7 @@ def to_model(self) -> PydanticMessageImplementationGuide: elements=tuple( x.to_model() for x in sorted( - ((self.segments or []) + (self.segment_groups or [])), # type:ignore[operator] + ((self.segments or []) + (self.segment_groups or [])), # type: ignore[operator] key=lambda y: y.position or 0, ) ), diff --git a/unittests/test_ahb_diff_view.py b/unittests/test_ahb_diff_view.py index 137aae2..e1bb713 100644 --- a/unittests/test_ahb_diff_view.py +++ b/unittests/test_ahb_diff_view.py @@ -79,18 +79,14 @@ def test_diff_view_no_duplicate_id_paths(session_fv2410_fv2504_with_diff_view: S Test that there are no duplicate id_paths for the same version pair comparison. Each id_path should appear exactly once in the diff results. """ - result = session_fv2410_fv2504_with_diff_view.execute( - text( - """ + result = session_fv2410_fv2504_with_diff_view.execute(text(""" SELECT id_path, COUNT(*) as cnt FROM v_ahb_diff WHERE old_format_version = 'FV2410' AND new_format_version = 'FV2504' AND old_pruefidentifikator = '55109' AND new_pruefidentifikator = '55109' GROUP BY id_path HAVING COUNT(*) > 1 - """ - ) - ) + """)) duplicates = list(result) assert len(duplicates) == 0, f"Found duplicate id_paths in diff results: {duplicates[:5]}" @@ -100,9 +96,7 @@ def test_diff_view_added_rows_have_null_old_columns(session_fv2410_fv2504_with_d Test that 'added' rows have NULL values for old_* columns and populated new_* columns. This verifies the SQL is correctly setting NULL for the old version. """ - result = session_fv2410_fv2504_with_diff_view.execute( - text( - """ + result = session_fv2410_fv2504_with_diff_view.execute(text(""" SELECT SUM(CASE WHEN old_segment_code IS NOT NULL THEN 1 ELSE 0 END) as old_segment_not_null, SUM(CASE WHEN old_line_ahb_status IS NOT NULL THEN 1 ELSE 0 END) as old_status_not_null, @@ -111,9 +105,7 @@ def test_diff_view_added_rows_have_null_old_columns(session_fv2410_fv2504_with_d WHERE old_format_version = 'FV2410' AND new_format_version = 'FV2504' AND old_pruefidentifikator = '55109' AND new_pruefidentifikator = '55109' AND diff_status = 'added' - """ - ) - ) + """)) row = list(result)[0] assert row[0] == 0, "Added rows should have NULL old_segment_code" assert row[1] == 0, "Added rows should have NULL old_line_ahb_status" @@ -125,9 +117,7 @@ def test_diff_view_deleted_rows_have_null_new_columns(session_fv2410_fv2504_with Test that 'deleted' rows have NULL values for new_* columns and populated old_* columns. This verifies the SQL is correctly setting NULL for the new version. """ - result = session_fv2410_fv2504_with_diff_view.execute( - text( - """ + result = session_fv2410_fv2504_with_diff_view.execute(text(""" SELECT SUM(CASE WHEN new_segment_code IS NOT NULL THEN 1 ELSE 0 END) as new_segment_not_null, SUM(CASE WHEN new_line_ahb_status IS NOT NULL THEN 1 ELSE 0 END) as new_status_not_null, @@ -136,9 +126,7 @@ def test_diff_view_deleted_rows_have_null_new_columns(session_fv2410_fv2504_with WHERE old_format_version = 'FV2410' AND new_format_version = 'FV2504' AND old_pruefidentifikator = '55109' AND new_pruefidentifikator = '55109' AND diff_status = 'deleted' - """ - ) - ) + """)) row = list(result)[0] assert row[0] == 0, "Deleted rows should have NULL new_segment_code" assert row[1] == 0, "Deleted rows should have NULL new_line_ahb_status" @@ -150,18 +138,14 @@ def test_diff_view_modified_rows_have_actual_differences(session_fv2410_fv2504_w Test that 'modified' rows actually have differences in at least one compared field. This verifies the CASE statement logic is correct. """ - result = session_fv2410_fv2504_with_diff_view.execute( - text( - """ + result = session_fv2410_fv2504_with_diff_view.execute(text(""" SELECT id_path, old_line_ahb_status, new_line_ahb_status, old_line_name, new_line_name, old_bedingung, new_bedingung FROM v_ahb_diff WHERE old_format_version = 'FV2410' AND new_format_version = 'FV2504' AND old_pruefidentifikator = '55109' AND new_pruefidentifikator = '55109' AND diff_status = 'modified' - """ - ) - ) + """)) for row in result: id_path, old_status, new_status, old_name, new_name, old_bed, new_bed = row # At least one of status, name, or bedingung must be different @@ -175,15 +159,11 @@ def test_diff_view_nonexistent_pruefi_returns_empty(session_fv2410_fv2504_with_d """ Test that querying a non-existent prüfidentifikator returns empty results. """ - result = session_fv2410_fv2504_with_diff_view.execute( - text( - """ + result = session_fv2410_fv2504_with_diff_view.execute(text(""" SELECT COUNT(*) FROM v_ahb_diff WHERE old_format_version = 'FV2410' AND new_format_version = 'FV2504' AND old_pruefidentifikator = '99999' AND new_pruefidentifikator = '99999' - """ - ) - ) + """)) count = list(result)[0][0] assert count == 0, "Non-existent prüfi should return no results" diff --git a/unittests/test_pydantic_features.py b/unittests/test_pydantic_features.py index 5d07efe..a1a6165 100644 --- a/unittests/test_pydantic_features.py +++ b/unittests/test_pydantic_features.py @@ -37,7 +37,7 @@ def test_json_dump(model: Anwendungshandbuch | MessageImplementationGuide) -> No if isinstance(model, Anwendungshandbuch): root_model = RootModel[Anwendungshandbuch](model) elif isinstance(model, MessageImplementationGuide): - root_model = RootModel[MessageImplementationGuide](model) # type:ignore[assignment] + root_model = RootModel[MessageImplementationGuide](model) # type: ignore[assignment] else: raise ValueError(f"Unexpected type: {model}") json_dict = root_model.model_dump(mode="json")