Skip to content

Commit 8108c31

Browse files
authored
Merge pull request #211 from simonas-drauksas-sensmetry/feat/date-default-value-parsing
Feature: parsing ATTRIBUTE-DEFINITION-DATE default values
2 parents 8008c88 + 4e4ef23 commit 8108c31

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

reqif/parsers/attribute_definition_parser.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ def parse_attribute_definitions(
135135
)
136136
if xml_attribute_definition is not None:
137137
default_value_definition_ref = xml_attribute_definition.text
138+
138139
elif attribute_definition.tag == "ATTRIBUTE-DEFINITION-XHTML":
139140
attribute_type = SpecObjectAttributeType.XHTML
140141
try:
@@ -167,6 +168,7 @@ def parse_attribute_definitions(
167168
default_value = lxml_stringify_namespaced_children(xml_values)
168169
else:
169170
raise NotImplementedError
171+
170172
elif attribute_definition.tag == "ATTRIBUTE-DEFINITION-ENUMERATION":
171173
attribute_type = SpecObjectAttributeType.ENUMERATION
172174
multi_valued_string = (
@@ -210,6 +212,7 @@ def parse_attribute_definitions(
210212
default_value = xml_enum_value_ref.text
211213
else:
212214
raise NotImplementedError
215+
213216
elif attribute_definition.tag == "ATTRIBUTE-DEFINITION-DATE":
214217
attribute_type = SpecObjectAttributeType.DATE
215218
try:
@@ -220,6 +223,13 @@ def parse_attribute_definitions(
220223
)
221224
except Exception as exception:
222225
raise NotImplementedError(attribute_definition) from exception
226+
227+
xml_default_value = attribute_definition.find("DEFAULT-VALUE")
228+
if xml_default_value is not None:
229+
xml_attribute_value = xml_default_value.find("ATTRIBUTE-VALUE-DATE")
230+
assert xml_attribute_value is not None
231+
default_value = xml_attribute_value.attrib["THE-VALUE"]
232+
223233
else:
224234
raise NotImplementedError(attribute_definition) from None
225235
attribute_definition = SpecAttributeDefinition(

tests/unit/reqif/parsers/test_spec_type_parser.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,3 +202,36 @@ def test_07_real_attribute_definition_with_default_value() -> None:
202202
== "TEST_REAL_ATTRIBUTE_LONG_NAME"
203203
)
204204
assert reqif_spec_object_type.attribute_definitions[0].default_value == "3.14"
205+
206+
207+
def test_08_date_attribute_definition_with_default_value() -> None:
208+
spec_type_string = """
209+
<SPEC-OBJECT-TYPE IDENTIFIER="TEST_SPEC_OBJECT_TYPE_ID" LAST-CHANGE="2021-02-08T16:37:07.454+01:00" LONG-NAME="TEST_SPEC_OBJECT_TYPE_LONG_NAME">
210+
<SPEC-ATTRIBUTES>
211+
<ATTRIBUTE-DEFINITION-DATE IDENTIFIER="TEST_DATE_ATTRIBUTE_ID" LONG-NAME="TEST_DATE_ATTRIBUTE_LONG_NAME" IS-EDITABLE="false">
212+
<DEFAULT-VALUE>
213+
<ATTRIBUTE-VALUE-DATE THE-VALUE="2005-06-05T22:03:35+02:00"/>
214+
</DEFAULT-VALUE>
215+
<TYPE>
216+
<DATATYPE-DEFINITION-DATE-REF>TEST_DATE_TYPE</DATATYPE-DEFINITION-DATE-REF>
217+
</TYPE>
218+
</ATTRIBUTE-DEFINITION-DATE>
219+
</SPEC-ATTRIBUTES>
220+
</SPEC-OBJECT-TYPE>
221+
""" # noqa: E501
222+
spec_type_xml = etree.fromstring(spec_type_string)
223+
224+
reqif_spec_object_type = SpecObjectTypeParser.parse(spec_type_xml)
225+
assert isinstance(reqif_spec_object_type, ReqIFSpecObjectType)
226+
assert reqif_spec_object_type.identifier == "TEST_SPEC_OBJECT_TYPE_ID"
227+
assert reqif_spec_object_type.long_name == "TEST_SPEC_OBJECT_TYPE_LONG_NAME"
228+
attribute_map = reqif_spec_object_type.attribute_map
229+
assert len(attribute_map) == 1
230+
assert (
231+
attribute_map.get("TEST_DATE_ATTRIBUTE_ID").long_name
232+
== "TEST_DATE_ATTRIBUTE_LONG_NAME"
233+
)
234+
assert (
235+
reqif_spec_object_type.attribute_definitions[0].default_value
236+
== "2005-06-05T22:03:35+02:00"
237+
)

0 commit comments

Comments
 (0)