Skip to content

Commit b59b606

Browse files
hf-kkleinclaude
andauthored
feat: upgrade to ahbicht v2.0.0, remove inject dependency (#270)
* feat: upgrade to ahbicht v2.0.0, remove inject dependency - Remove inject, EvaluatableDataProvider, TokenLogicProvider, SingletonTokenLogicProvider, create_content_evaluation_result_based_evaluators imports from expression_view.py - Remove _setup_weird_ahbicht_dependency_injection() function entirely - Update is_valid_expression call to use new format params instead of setter callback - Bump ahbicht dep to >=2.0.0 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: address reviewer feedback on ahbicht v2 upgrade - Remove unused AhbContext import - Fix unbound is_valid variable in except branch - Pass actual format/version from row data instead of hardcoding UTILMD Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: remove unused Optional import Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: isort and black formatting Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent e54c38a commit b59b606

2 files changed

Lines changed: 11 additions & 45 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ sqlmodels = [
3030
"sqlalchemy[mypy]>=2.0.37"
3131
]
3232
ahbicht = [
33-
"ahbicht>=1.0.0,<2"
33+
"ahbicht>=2.0.0"
3434
]
3535
coverage = [
3636
"coverage==7.13.5"

src/fundamend/sqlmodels/expression_view.py

Lines changed: 10 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import asyncio
66
import logging
77
import uuid
8-
from contextvars import ContextVar
9-
from typing import Optional
108

119
from efoli import EdifactFormat, EdifactFormatVersion
1210
from sqlalchemy import Index
@@ -24,13 +22,8 @@
2422

2523

2624
try:
27-
import inject
28-
from ahbicht.content_evaluation.evaluationdatatypes import EvaluatableData, EvaluatableDataProvider
29-
from ahbicht.content_evaluation.evaluator_factory import create_content_evaluation_result_based_evaluators
3025
from ahbicht.content_evaluation.expression_check import is_valid_expression
31-
from ahbicht.content_evaluation.token_logic_provider import SingletonTokenLogicProvider, TokenLogicProvider
3226
from ahbicht.expressions.condition_expression_parser import extract_categorized_keys
33-
from ahbicht.models.content_evaluation_result import ContentEvaluationResult
3427
from lark.exceptions import VisitError
3528
except ImportError as import_error:
3629
import_error.msg += "; Did you install fundamend[sqlmodels,ahbicht]?"
@@ -39,39 +32,6 @@
3932

4033
_logger = logging.getLogger(__name__)
4134

42-
_content_evaluation_result: ContextVar[Optional[ContentEvaluationResult]] = ContextVar(
43-
"_content_evaluation_result", default=None
44-
)
45-
46-
47-
def _get_evaluatable_data() -> EvaluatableData[ContentEvaluationResult]:
48-
"""
49-
returns the _content_evaluation_result context var value wrapped in a EvaluatableData container.
50-
This is the kind of data that the ContentEvaluationResultBased RC/FC Evaluators, HintsProvider and Package Resolver
51-
require.
52-
:return:
53-
"""
54-
cer = _content_evaluation_result.get()
55-
assert cer is not None
56-
return EvaluatableData(
57-
body=cer,
58-
edifact_format=EdifactFormat.UTILMD, # not important, something has to be here
59-
edifact_format_version=EdifactFormatVersion.FV2504, # not important, something has to be here
60-
)
61-
62-
63-
def _setup_weird_ahbicht_dependency_injection() -> None:
64-
def configure(binder: inject.Binder) -> None:
65-
binder.bind(
66-
TokenLogicProvider,
67-
SingletonTokenLogicProvider(
68-
[*create_content_evaluation_result_based_evaluators(EdifactFormat.UTILMD, EdifactFormatVersion.FV2504)]
69-
),
70-
)
71-
binder.bind_to_provider(EvaluatableDataProvider, _get_evaluatable_data)
72-
73-
inject.configure_once(configure)
74-
7535

7636
def _generate_node_texts(session: Session, expression: str, ahb_pk: uuid.UUID) -> str:
7737
categorized_key_extract = asyncio.run(extract_categorized_keys(expression))
@@ -117,15 +77,22 @@ def _generate_node_texts(session: Session, expression: str, ahb_pk: uuid.UUID) -
11777

11878

11979
def _get_validity_node_texts_and_error_message_cpu_intensive(
120-
expression: str, session: Session, anwendungshandbuch_pk: uuid.UUID
80+
expression: str,
81+
session: Session,
82+
anwendungshandbuch_pk: uuid.UUID,
83+
edifact_format: EdifactFormat,
84+
edifact_format_version: EdifactFormatVersion,
12185
) -> tuple[bool, str, str | None]:
86+
is_valid = True # default: assume valid unless proven otherwise
87+
error_message: str | None = None
12288
try:
123-
is_valid, error_message = asyncio.run(is_valid_expression(expression, _content_evaluation_result.set))
89+
is_valid, error_message = asyncio.run(is_valid_expression(expression, edifact_format, edifact_format_version))
12490
if is_valid: # we might actually get a meaningful node_texts even for invalid expressions, but I don't like it
12591
node_texts = _generate_node_texts(session, expression, anwendungshandbuch_pk)
12692
else:
12793
node_texts = ""
12894
except NotImplementedError: # ahbicht fault/missing feature -> act like it's valid
95+
is_valid = True
12996
node_texts = _generate_node_texts(session, expression, anwendungshandbuch_pk)
13097
error_message = None
13198
return is_valid, node_texts, error_message
@@ -157,7 +124,6 @@ def create_and_fill_ahb_expression_table(session: Session, use_cpu_intensive_val
157124
outcomes. This leads to only few additional expressions marked as invalid but is very slow.
158125
"""
159126
rows: list[tuple[EdifactFormatVersion | None, str, str | None, uuid.UUID]] = []
160-
_setup_weird_ahbicht_dependency_injection()
161127
for ahb_status_col in [
162128
AhbHierarchyMaterialized.segmentgroup_ahb_status,
163129
AhbHierarchyMaterialized.segment_ahb_status,
@@ -192,7 +158,7 @@ def create_and_fill_ahb_expression_table(session: Session, use_cpu_intensive_val
192158
if use_cpu_intensive_validity_check:
193159
# as of 2025-04-15 I have no clue how long this actually takes for all expressions
194160
_, node_texts, error_message = _get_validity_node_texts_and_error_message_cpu_intensive(
195-
expression, session, row[3]
161+
expression, session, row[3], EdifactFormat(row[1]), row[0]
196162
)
197163
else:
198164
_, node_texts, error_message = _get_validity_node_texts_and_error_message_fast(expression, session, row[3])

0 commit comments

Comments
 (0)