Source code for ahbicht.content_evaluation.evaluationdatatypes

"""
Dataclasses that are relevant in the context of the content_evaluation.
"""

from dataclasses import dataclass, replace
from typing import Generic, Optional, TypeVar

from efoli import EdifactFormat, EdifactFormatVersion

_BodyT = TypeVar("_BodyT")
"""
the type of the data on which the evaluations are performed
"""


[docs] @dataclass class EvaluatableData(Generic[_BodyT]): """ Data that can be processed/evaluated by an evaluator. They must not change during a content_evaluation run. The evaluatable data act as a flexible container to pass information that might be necessary for the content_evaluation. As of now (because our content_evaluation capabilities are quite limited) the only information provided is the meta seed of the message itself. But in the future the data provided might grow. """ body: _BodyT #: the body of the message that is being validated in the respective format (e.g. an edifact_seed) edifact_format: EdifactFormat #: the format of the evaluatable message (e.g. UTILMD) edifact_format_version: EdifactFormatVersion #: the format version of the evaluable data (e.g. FV2210)
# ideas for what else could go here: # - pruefidentifikator to tweak the content_evaluation depending on the situation?
[docs] @dataclass class EvaluationContext: """ A content_evaluation context describes the setting in which a condition shall be evaluated. The content_evaluation context might have different values for the same condition in one content_evaluation run. E.g. if the purpose of the condition is to make sure that every Zähler with zähler type "EHZ" has some properties the context of the content_evaluation is one zähler entry although there might be multiple zählers present in the message. """ scope: Optional[ str ] # jsonpath that refers to the scope of the content_eval. If None, then "$" = entire message is used as scope.
[docs] def copy_evaluation_context(context: EvaluationContext) -> EvaluationContext: """ Returns a deep copy of the provided context. This allows you to create a copy of a context instead of modifying the original context (as EvaluationContexts are "pass by reference") :param context: :return: a deep copy of the context """ return replace(context)