Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 16 additions & 15 deletions aas_core_meta/v3.py
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,21 @@ def qualifier_types_are_unique(qualifiers: List["Qualifier"]) -> bool:
return True


@verification
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a transpilable verification function so that we have the hard parts dealt with outside of the snippet:

    not (self.submodel_elements is not None)
    or (
        not (self.kind_or_default() != Modelling_kind.Template)
        or (
            all(
                not (submodel_element.qualifiers is not None)
                or all(
                    qualifier.kind_or_default() != Qualifier_kind.Template_qualifier
                    for qualifier in submodel_element.qualifiers
                )
                for submodel_element in self.submodel_elements
            )
        )
    )

Add a comment that the two methods must be in sync -- include an assertion in tests/ that the code is exactly the same for the two methods (one for submodel element list and the other for submodel element collection).

@implementation_specific
def template_qualifiers_are_only_used_in_templates(submodel: "Submodel") -> bool:
"""
Check that qualifiers of :attr:`Qualifier.kind`
:attr:`Qualifier_kind.Template_qualifier` are only used in :attr:`Submodel`
with :attr:`Modelling_kind.Template`.

:param submodel: to be checked
:return: True if :attr:`Submodel.kind` is not :attr:`Modelling_kind.Template`, or no :attr:`Qualifier.kind` is :attr:`Qualifier_kind.Template_qualifier`.

"""
raise NotImplementedError()


@verification
def matches_XML_serializable_string(text: str) -> bool:
"""
Expand Down Expand Up @@ -2412,21 +2427,7 @@ def __init__(
"element shall be of kind template."
)
@invariant(
lambda self:
not (self.submodel_elements is not None)
or (
not (self.kind_or_default() != Modelling_kind.Template)
or (
all(
not (submodel_element.qualifiers is not None)
or all(
qualifier.kind_or_default() != Qualifier_kind.Template_qualifier
for qualifier in submodel_element.qualifiers
)
for submodel_element in self.submodel_elements
)
)
),
lambda self: template_qualifiers_are_only_used_in_templates(self),
"Constraint AASd-129: If any qualifier kind value of a Submodel element qualifier "
"(attribute qualifier inherited via Qualifiable) is equal to Template Qualifier "
"then the submodel element shall be part of a submodel template, i.e. a Submodel "
Expand Down
31 changes: 16 additions & 15 deletions aas_core_meta/v3_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,21 @@ def qualifier_types_are_unique(qualifiers: List["Qualifier"]) -> bool:
return True


@verification
@implementation_specific
def template_qualifiers_are_only_used_in_templates(submodel: "Submodel") -> bool:
"""
Check that qualifiers of :attr:`Qualifier.kind`
:attr:`Qualifier_kind.Template_qualifier` are only used in :attr:`Submodel`
with :attr:`Modelling_kind.Template`.

:param submodel: to be checked
:return: True if :attr:`Submodel.kind` is not :attr:`Modelling_kind.Template`, or no :attr:`Qualifier.kind` is :attr:`Qualifier_kind.Template_qualifier`.

"""
raise NotImplementedError()


@verification
def matches_XML_serializable_string(text: str) -> bool:
"""
Expand Down Expand Up @@ -2461,21 +2476,7 @@ def __init__(
"element shall be of kind template."
)
@invariant(
lambda self:
not (self.submodel_elements is not None)
or (
not (self.kind_or_default() != Modelling_kind.Template)
or (
all(
not (submodel_element.qualifiers is not None)
or all(
qualifier.kind_or_default() != Qualifier_kind.Template_qualifier
for qualifier in submodel_element.qualifiers
)
for submodel_element in self.submodel_elements
)
)
),
lambda self: template_qualifiers_are_only_used_in_templates(self),
"Constraint AASd-129: If any qualifier kind value of a Submodel element qualifier "
"(attribute qualifier inherited via Qualifiable) is equal to Template Qualifier "
"then the submodel element shall be part of a submodel template, i.e. a Submodel "
Expand Down
Loading