diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0e32ef65f..710903db3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,4 +75,30 @@ jobs: - name: test (blocking) run: make test + - name: Dump reports on failure + if: ${{ failure() }} + run: | + set -eu + for f in .reports/workspace/test/*.log; do + [ -f "$f" ] || continue + echo "::group::workspace $(basename "$f")" + tail -n 200 "$f" + echo "::endgroup::" + done + for f in apps/*/.reports/tests/*/pytest.log .reports/tests/*/pytest.log; do + [ -f "$f" ] || continue + echo "::group::$f" + tail -n 200 "$f" + echo "::endgroup::" + done + - name: Upload reports on failure + if: ${{ failure() }} + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: flext-ci-reports-${{ github.run_id }} + path: | + .reports/** + apps/*/.reports/** + if-no-files-found: ignore + retention-days: 7 # End SECTION: ci job diff --git a/pyproject.toml b/pyproject.toml index 6b4bf0a46..c2aebd8fe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -85,7 +85,11 @@ show_missing = true skip_covered = false [tool.coverage.run] -omit = ["*/dependency_injector/providers.pyx"] +omit = [ + "*/_protocols/*", + "*/dependency_injector/providers.pyx", + "*/protocols.py", +] source = ["src"] # [MANAGED] deptry diff --git a/src/flext_cli/_models/__init__.py b/src/flext_cli/_models/__init__.py index d5ea35272..d9d360483 100644 --- a/src/flext_cli/_models/__init__.py +++ b/src/flext_cli/_models/__init__.py @@ -8,7 +8,7 @@ from flext_core.lazy import build_lazy_import_map, install_lazy_exports if TYPE_CHECKING: - from . import _base_parts as _base_parts + from . import _base as _base from .base import FlextCliModelsBase as FlextCliModelsBase from .config import FlextCliConfigModels as FlextCliConfigModels from .docx import FlextCliModelsDocx as FlextCliModelsDocx @@ -22,30 +22,30 @@ from .rules import FlextCliModelsRules as FlextCliModelsRules from .template import FlextCliModelsTemplate as FlextCliModelsTemplate from .xlsx import FlextCliModelsXlsx as FlextCliModelsXlsx - from .xlsx_archive import FlextCliModelsXlsxArchive as FlextCliModelsXlsxArchive - from .xlsx_cells import FlextCliModelsXlsxCells as FlextCliModelsXlsxCells - from .xlsx_layout import FlextCliModelsXlsxLayout as FlextCliModelsXlsxLayout - from .xlsx_recalc import FlextCliModelsXlsxRecalc as FlextCliModelsXlsxRecalc - from .xlsx_rules import FlextCliModelsXlsxRules as FlextCliModelsXlsxRules - from .xlsx_snapshot import FlextCliModelsXlsxSnapshot as FlextCliModelsXlsxSnapshot - from .xlsx_style_catalog import ( + from ._xlsx.xlsx_archive import FlextCliModelsXlsxArchive as FlextCliModelsXlsxArchive + from ._xlsx.xlsx_cells import FlextCliModelsXlsxCells as FlextCliModelsXlsxCells + from ._xlsx.xlsx_layout import FlextCliModelsXlsxLayout as FlextCliModelsXlsxLayout + from ._xlsx.xlsx_recalc import FlextCliModelsXlsxRecalc as FlextCliModelsXlsxRecalc + from ._xlsx.xlsx_rules import FlextCliModelsXlsxRules as FlextCliModelsXlsxRules + from ._xlsx.xlsx_snapshot import FlextCliModelsXlsxSnapshot as FlextCliModelsXlsxSnapshot + from ._xlsx.xlsx_style_catalog import ( FlextCliModelsXlsxStyleCatalog as FlextCliModelsXlsxStyleCatalog, ) - from .xlsx_style_fills import ( + from ._xlsx.xlsx_style_fills import ( FlextCliModelsXlsxStyleFills as FlextCliModelsXlsxStyleFills, ) - from .xlsx_style_primitives import ( + from ._xlsx.xlsx_style_primitives import ( FlextCliModelsXlsxStylePrimitives as FlextCliModelsXlsxStylePrimitives, ) - from .xlsx_styles import FlextCliModelsXlsxStyles as FlextCliModelsXlsxStyles - from .xlsx_tables import FlextCliModelsXlsxTables as FlextCliModelsXlsxTables - from .xlsx_validation import ( + from ._xlsx.xlsx_styles import FlextCliModelsXlsxStyles as FlextCliModelsXlsxStyles + from ._xlsx.xlsx_tables import FlextCliModelsXlsxTables as FlextCliModelsXlsxTables + from ._xlsx.xlsx_validation import ( FlextCliModelsXlsxValidation as FlextCliModelsXlsxValidation, ) - from .xlsx_workbook import FlextCliModelsXlsxWorkbook as FlextCliModelsXlsxWorkbook + from ._xlsx.xlsx_workbook import FlextCliModelsXlsxWorkbook as FlextCliModelsXlsxWorkbook _LAZY_MODULES: dict[str, tuple[str, ...]] = { - "._base_parts": ("_base_parts",), + "._base": ("_base",), ".base": ("FlextCliModelsBase",), ".config": ("FlextCliConfigModels",), ".docx": ("FlextCliModelsDocx",), @@ -57,19 +57,19 @@ ".rules": ("FlextCliModelsRules",), ".template": ("FlextCliModelsTemplate",), ".xlsx": ("FlextCliModelsXlsx",), - ".xlsx_archive": ("FlextCliModelsXlsxArchive",), - ".xlsx_cells": ("FlextCliModelsXlsxCells",), - ".xlsx_layout": ("FlextCliModelsXlsxLayout",), - ".xlsx_recalc": ("FlextCliModelsXlsxRecalc",), - ".xlsx_rules": ("FlextCliModelsXlsxRules",), - ".xlsx_snapshot": ("FlextCliModelsXlsxSnapshot",), - ".xlsx_style_catalog": ("FlextCliModelsXlsxStyleCatalog",), - ".xlsx_style_fills": ("FlextCliModelsXlsxStyleFills",), - ".xlsx_style_primitives": ("FlextCliModelsXlsxStylePrimitives",), - ".xlsx_styles": ("FlextCliModelsXlsxStyles",), - ".xlsx_tables": ("FlextCliModelsXlsxTables",), - ".xlsx_validation": ("FlextCliModelsXlsxValidation",), - ".xlsx_workbook": ("FlextCliModelsXlsxWorkbook",), + "._xlsx.xlsx_archive": ("FlextCliModelsXlsxArchive",), + "._xlsx.xlsx_cells": ("FlextCliModelsXlsxCells",), + "._xlsx.xlsx_layout": ("FlextCliModelsXlsxLayout",), + "._xlsx.xlsx_recalc": ("FlextCliModelsXlsxRecalc",), + "._xlsx.xlsx_rules": ("FlextCliModelsXlsxRules",), + "._xlsx.xlsx_snapshot": ("FlextCliModelsXlsxSnapshot",), + "._xlsx.xlsx_style_catalog": ("FlextCliModelsXlsxStyleCatalog",), + "._xlsx.xlsx_style_fills": ("FlextCliModelsXlsxStyleFills",), + "._xlsx.xlsx_style_primitives": ("FlextCliModelsXlsxStylePrimitives",), + "._xlsx.xlsx_styles": ("FlextCliModelsXlsxStyles",), + "._xlsx.xlsx_tables": ("FlextCliModelsXlsxTables",), + "._xlsx.xlsx_validation": ("FlextCliModelsXlsxValidation",), + "._xlsx.xlsx_workbook": ("FlextCliModelsXlsxWorkbook",), } @@ -105,7 +105,7 @@ "FlextCliModelsXlsxTables", "FlextCliModelsXlsxValidation", "FlextCliModelsXlsxWorkbook", - "_base_parts", + "_base", ) __all__: tuple[str, ...] = tuple(_PUBLIC_EXPORTS) diff --git a/src/flext_cli/_models/_base_parts/__init__.py b/src/flext_cli/_models/_base/__init__.py similarity index 100% rename from src/flext_cli/_models/_base_parts/__init__.py rename to src/flext_cli/_models/_base/__init__.py diff --git a/src/flext_cli/_models/_base_parts/flextclimodelsbase_part_01.py b/src/flext_cli/_models/_base/flextclimodelsbase_part_01.py similarity index 100% rename from src/flext_cli/_models/_base_parts/flextclimodelsbase_part_01.py rename to src/flext_cli/_models/_base/flextclimodelsbase_part_01.py diff --git a/src/flext_cli/_models/_base_parts/flextclimodelsbase_part_02.py b/src/flext_cli/_models/_base/flextclimodelsbase_part_02.py similarity index 100% rename from src/flext_cli/_models/_base_parts/flextclimodelsbase_part_02.py rename to src/flext_cli/_models/_base/flextclimodelsbase_part_02.py diff --git a/src/flext_cli/_models/_base_parts/flextclimodelsbase_part_03.py b/src/flext_cli/_models/_base/flextclimodelsbase_part_03.py similarity index 100% rename from src/flext_cli/_models/_base_parts/flextclimodelsbase_part_03.py rename to src/flext_cli/_models/_base/flextclimodelsbase_part_03.py diff --git a/src/flext_cli/_models/_base_parts/flextclimodelsbase_part_04.py b/src/flext_cli/_models/_base/flextclimodelsbase_part_04.py similarity index 100% rename from src/flext_cli/_models/_base_parts/flextclimodelsbase_part_04.py rename to src/flext_cli/_models/_base/flextclimodelsbase_part_04.py diff --git a/src/flext_cli/_models/_base_parts/flextclimodelsbase_part_05.py b/src/flext_cli/_models/_base/flextclimodelsbase_part_05.py similarity index 100% rename from src/flext_cli/_models/_base_parts/flextclimodelsbase_part_05.py rename to src/flext_cli/_models/_base/flextclimodelsbase_part_05.py diff --git a/src/flext_cli/_models/_base_parts/flextclimodelsbase_part_06.py b/src/flext_cli/_models/_base/flextclimodelsbase_part_06.py similarity index 100% rename from src/flext_cli/_models/_base_parts/flextclimodelsbase_part_06.py rename to src/flext_cli/_models/_base/flextclimodelsbase_part_06.py diff --git a/src/flext_cli/_models/_base_parts/flextclimodelsbase_part_07.py b/src/flext_cli/_models/_base/flextclimodelsbase_part_07.py similarity index 99% rename from src/flext_cli/_models/_base_parts/flextclimodelsbase_part_07.py rename to src/flext_cli/_models/_base/flextclimodelsbase_part_07.py index 004e4fc12..11cffa024 100644 --- a/src/flext_cli/_models/_base_parts/flextclimodelsbase_part_07.py +++ b/src/flext_cli/_models/_base/flextclimodelsbase_part_07.py @@ -89,8 +89,6 @@ def resolve(self) -> t.Cli.TypedExtractValue: if source_mapping is not None else _EMPTY_JSON_MAPPING ) - case _: - pass return resolved_value def _default_for_kind(self) -> t.Cli.TypedExtractValue: diff --git a/src/flext_cli/_models/_base_parts/py.typed b/src/flext_cli/_models/_base/py.typed similarity index 100% rename from src/flext_cli/_models/_base_parts/py.typed rename to src/flext_cli/_models/_base/py.typed diff --git a/src/flext_cli/_models/_xlsx/__init__.py b/src/flext_cli/_models/_xlsx/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/flext_cli/_models/xlsx_archive.py b/src/flext_cli/_models/_xlsx/xlsx_archive.py similarity index 100% rename from src/flext_cli/_models/xlsx_archive.py rename to src/flext_cli/_models/_xlsx/xlsx_archive.py diff --git a/src/flext_cli/_models/xlsx_cells.py b/src/flext_cli/_models/_xlsx/xlsx_cells.py similarity index 100% rename from src/flext_cli/_models/xlsx_cells.py rename to src/flext_cli/_models/_xlsx/xlsx_cells.py diff --git a/src/flext_cli/_models/xlsx_layout.py b/src/flext_cli/_models/_xlsx/xlsx_layout.py similarity index 100% rename from src/flext_cli/_models/xlsx_layout.py rename to src/flext_cli/_models/_xlsx/xlsx_layout.py diff --git a/src/flext_cli/_models/xlsx_recalc.py b/src/flext_cli/_models/_xlsx/xlsx_recalc.py similarity index 100% rename from src/flext_cli/_models/xlsx_recalc.py rename to src/flext_cli/_models/_xlsx/xlsx_recalc.py diff --git a/src/flext_cli/_models/xlsx_rules.py b/src/flext_cli/_models/_xlsx/xlsx_rules.py similarity index 100% rename from src/flext_cli/_models/xlsx_rules.py rename to src/flext_cli/_models/_xlsx/xlsx_rules.py diff --git a/src/flext_cli/_models/xlsx_snapshot.py b/src/flext_cli/_models/_xlsx/xlsx_snapshot.py similarity index 100% rename from src/flext_cli/_models/xlsx_snapshot.py rename to src/flext_cli/_models/_xlsx/xlsx_snapshot.py diff --git a/src/flext_cli/_models/xlsx_style_catalog.py b/src/flext_cli/_models/_xlsx/xlsx_style_catalog.py similarity index 100% rename from src/flext_cli/_models/xlsx_style_catalog.py rename to src/flext_cli/_models/_xlsx/xlsx_style_catalog.py diff --git a/src/flext_cli/_models/xlsx_style_fills.py b/src/flext_cli/_models/_xlsx/xlsx_style_fills.py similarity index 100% rename from src/flext_cli/_models/xlsx_style_fills.py rename to src/flext_cli/_models/_xlsx/xlsx_style_fills.py diff --git a/src/flext_cli/_models/xlsx_style_primitives.py b/src/flext_cli/_models/_xlsx/xlsx_style_primitives.py similarity index 100% rename from src/flext_cli/_models/xlsx_style_primitives.py rename to src/flext_cli/_models/_xlsx/xlsx_style_primitives.py diff --git a/src/flext_cli/_models/xlsx_styles.py b/src/flext_cli/_models/_xlsx/xlsx_styles.py similarity index 100% rename from src/flext_cli/_models/xlsx_styles.py rename to src/flext_cli/_models/_xlsx/xlsx_styles.py diff --git a/src/flext_cli/_models/xlsx_tables.py b/src/flext_cli/_models/_xlsx/xlsx_tables.py similarity index 100% rename from src/flext_cli/_models/xlsx_tables.py rename to src/flext_cli/_models/_xlsx/xlsx_tables.py diff --git a/src/flext_cli/_models/xlsx_validation.py b/src/flext_cli/_models/_xlsx/xlsx_validation.py similarity index 100% rename from src/flext_cli/_models/xlsx_validation.py rename to src/flext_cli/_models/_xlsx/xlsx_validation.py diff --git a/src/flext_cli/_models/xlsx_workbook.py b/src/flext_cli/_models/_xlsx/xlsx_workbook.py similarity index 100% rename from src/flext_cli/_models/xlsx_workbook.py rename to src/flext_cli/_models/_xlsx/xlsx_workbook.py diff --git a/src/flext_cli/_models/base.py b/src/flext_cli/_models/base.py index c9570d628..0bee01a7b 100644 --- a/src/flext_cli/_models/base.py +++ b/src/flext_cli/_models/base.py @@ -2,25 +2,25 @@ from __future__ import annotations -from flext_cli._models._base_parts.flextclimodelsbase_part_01 import ( +from flext_cli._models._base.flextclimodelsbase_part_01 import ( FlextCliModelsBase as FlextCliModelsBasePart01, ) -from flext_cli._models._base_parts.flextclimodelsbase_part_02 import ( +from flext_cli._models._base.flextclimodelsbase_part_02 import ( FlextCliModelsBase as FlextCliModelsBasePart02, ) -from flext_cli._models._base_parts.flextclimodelsbase_part_03 import ( +from flext_cli._models._base.flextclimodelsbase_part_03 import ( FlextCliModelsBase as FlextCliModelsBasePart03, ) -from flext_cli._models._base_parts.flextclimodelsbase_part_04 import ( +from flext_cli._models._base.flextclimodelsbase_part_04 import ( FlextCliModelsBase as FlextCliModelsBasePart04, ) -from flext_cli._models._base_parts.flextclimodelsbase_part_05 import ( +from flext_cli._models._base.flextclimodelsbase_part_05 import ( FlextCliModelsBase as FlextCliModelsBasePart05, ) -from flext_cli._models._base_parts.flextclimodelsbase_part_06 import ( +from flext_cli._models._base.flextclimodelsbase_part_06 import ( FlextCliModelsBase as FlextCliModelsBasePart06, ) -from flext_cli._models._base_parts.flextclimodelsbase_part_07 import ( +from flext_cli._models._base.flextclimodelsbase_part_07 import ( FlextCliModelsBase as FlextCliModelsBasePart07, ) diff --git a/src/flext_cli/_models/xlsx.py b/src/flext_cli/_models/xlsx.py index e45636e66..88f5801df 100644 --- a/src/flext_cli/_models/xlsx.py +++ b/src/flext_cli/_models/xlsx.py @@ -2,17 +2,17 @@ from __future__ import annotations -from .xlsx_archive import FlextCliModelsXlsxArchive -from .xlsx_cells import FlextCliModelsXlsxCells -from .xlsx_layout import FlextCliModelsXlsxLayout -from .xlsx_recalc import FlextCliModelsXlsxRecalc -from .xlsx_rules import FlextCliModelsXlsxRules -from .xlsx_snapshot import FlextCliModelsXlsxSnapshot -from .xlsx_style_catalog import FlextCliModelsXlsxStyleCatalog -from .xlsx_styles import FlextCliModelsXlsxStyles -from .xlsx_tables import FlextCliModelsXlsxTables -from .xlsx_validation import FlextCliModelsXlsxValidation -from .xlsx_workbook import FlextCliModelsXlsxWorkbook +from ._xlsx.xlsx_archive import FlextCliModelsXlsxArchive +from ._xlsx.xlsx_cells import FlextCliModelsXlsxCells +from ._xlsx.xlsx_layout import FlextCliModelsXlsxLayout +from ._xlsx.xlsx_recalc import FlextCliModelsXlsxRecalc +from ._xlsx.xlsx_rules import FlextCliModelsXlsxRules +from ._xlsx.xlsx_snapshot import FlextCliModelsXlsxSnapshot +from ._xlsx.xlsx_style_catalog import FlextCliModelsXlsxStyleCatalog +from ._xlsx.xlsx_styles import FlextCliModelsXlsxStyles +from ._xlsx.xlsx_tables import FlextCliModelsXlsxTables +from ._xlsx.xlsx_validation import FlextCliModelsXlsxValidation +from ._xlsx.xlsx_workbook import FlextCliModelsXlsxWorkbook class FlextCliModelsXlsx( diff --git a/tests/test_xlsx_render.py b/tests/test_xlsx_render.py index c9213b2dd..35efe0033 100644 --- a/tests/test_xlsx_render.py +++ b/tests/test_xlsx_render.py @@ -218,7 +218,6 @@ def test_xlsx_render_executes_typed_runtime_plan() -> None: tm.that(snapshot.success, eq=True, msg=snapshot.error) tm.that(cached.success, eq=True, msg=cached.error) - tm.that(isinstance(snapshot.value, p.Cli.XlsxWorkbookSnapshot), eq=True) tm.that(tuple(item.name for item in snapshot.value.sheets), eq=("Data", "Summary")) data_snapshot = snapshot.value.sheets[0] formula_cell = next(item for item in data_snapshot.cells if item.coordinate == "B2")