Skip to content

Commit

Permalink
Issue 24 (#36)
Browse files Browse the repository at this point in the history
* support for DATE

* fix typos #24

* Issue 24 (#29)

* Add "REAL", "DATE" and "SIMPLE" data types

Add dictionary entries for "REAL", "DATE" and add "SIMPLE" data type

* Issue 24 - Support vor values without div tags (#31)

* Add "REAL", "DATE" and "SIMPLE" data types

Add dictionary entries for "REAL", "DATE" and add "SIMPLE" data type

* Fix typo

* Tabs to spaces

* More tabs to spaces

* add support for elements without div tag

Co-authored-by: ebroecker <eduard@gmx.de>
  • Loading branch information
olbermann and ebroecker committed Jan 9, 2023
1 parent 4dd0cbd commit 34527b9
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 14 deletions.
38 changes: 25 additions & 13 deletions src/pyreqif/rif.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,22 +45,31 @@ def pretty(d, indent=0):
mapReqifAttributeValue = {"default": "embeddedDoc",
"ATTRIBUTE-VALUE-EMBEDDED-DOCUMENT": "embeddedDoc",
"ATTRIBUTE-VALUE-STRING": "string",
"ATTRIBUTE-VALUE-DATE": "string",
"ATTRIBUTE-VALUE-SIMPLE": "embeddedDoc",
"ATTRIBUTE-VALUE-XHTML": "embeddedDoc",
"ATTRIBUTE-VALUE-BOOLEAN": "embeddedDoc",
"ATTRIBUTE-VALUE-REAL": "embeddedDoc",
"ATTRIBUTE-VALUE-INTEGER": "embeddedDoc"}

mapReqifAttributeDefinition = {"default": "complex",
"ATTRIBUTE-DEFINITION-COMPLEX": "complex",
"ATTRIBUTE-DEFINITION-STRING": "string",
"ATTRIBUTE-DEFINITION-DATE": "string",
"ATTRIBUTE-DEFINITION-SIMPLE": "complex",
"ATTRIBUTE-DEFINITION-XHTML": "complex",
"ATTRIBUTE-DEFINITION-BOOLEAN": "complex",
"ATTRIBUTE-DEFINITION-REAL": "complex",
"ATTRIBUTE-DEFINITION-INTEGER": "complex"}

mapReqifDatatypeDefinition = {"default": "document",
"DATATYPE-DEFINITION-DOCUMENT": "document",
"DATATYPE-DEFINITION-STRING": "string",
"DATATYPE-DEFINITION-DATE": "string",
"DATATYPE-DEFINITION-SIMPLE": "document",
"DATATYPE-DEFINITION-XHTML": "document",
"DATATYPE-DEFINITION-BOOLEAN": "document",
"DATATYPE-DEFINITION-REAL": "document",
"DATATYPE-DEFINITION-INTEGER": "document"}

transLationTableReverse = dict(map(reversed, transLationTable.items()))
Expand Down Expand Up @@ -187,8 +196,9 @@ def getSubElementValuesByTitle(xmlElement, tagNameArray=[]):

datatypesXmlElement = contentRoot.find('./' + ns + 'DATATYPES')
for child in datatypesXmlElement:
if child.tag == ns + "DATATYPE-DEFINITION-DOCUMENT" or child.tag == ns + 'DATATYPE-DEFINITION-STRING' or child.tag == ns + 'DATATYPE-DEFINITION-XHTML' \
or child.tag == ns + 'DATATYPE-DEFINITION-BOOLEAN' or child.tag == ns + "DATATYPE-DEFINITION-INTEGER":
if child.tag == ns + "DATATYPE-DEFINITION-DOCUMENT" or child.tag == ns + 'DATATYPE-DEFINITION-STRING' or child.tag == ns + 'DATATYPE-DEFINITION-XHTML'\
or child.tag == ns + 'DATATYPE-DEFINITION-BOOLEAN' or child.tag == ns + "DATATYPE-DEFINITION-INTEGER" or child.tag == ns + "DATATYPE-DEFINITION-DATE"\
or child.tag == ns + 'DATATYPE-DEFINITION-REAL' or child.tag == ns + 'DATATYPE-DEFINITION-SIMPLE':
datatypeProto = getSubElementValuesByTitle(child, ['EMBEDDED'])
tagWithoutNamespace = re.sub('{[\S]*}', '', child.tag)
datatypeProto['type'] = mapReqifDatatypeDefinition2Py(tagWithoutNamespace)
Expand All @@ -209,11 +219,6 @@ def getSubElementValuesByTitle(xmlElement, tagNameArray=[]):
datatypeProto['values'] = values
doc.addDatatype(reqif2py(datatypeProto))
else:
# missing:
# DATATYPE-DEFINITION-BOOLEAN
# DATATYPE-DEFINITION-DATE
# DATATYPE-DEFINITION-INTEGER
# DATATYPE-DEFINITION-REAL
print("Not supported datatype: ", )
print(child.tag)

Expand All @@ -225,8 +230,10 @@ def getSubElementValuesByTitle(xmlElement, tagNameArray=[]):
attributesXml = child.find('./' + ns + "SPEC-ATTRIBUTES")
if attributesXml is not None:
for attribute in attributesXml:
if attribute.tag == ns + "ATTRIBUTE-DEFINITION-COMPLEX" or attribute.tag == ns + "ATTRIBUTE-DEFINITION-STRING" or attribute.tag == ns + "ATTRIBUTE-DEFINITION-XHTML" \
or attribute.tag == ns + "ATTRIBUTE-DEFINITION-BOOLEAN" or attribute.tag == ns + "ATTRIBUTE-DEFINITION-INTEGER":
if attribute.tag == ns +"ATTRIBUTE-DEFINITION-COMPLEX" or attribute.tag == ns +"ATTRIBUTE-DEFINITION-STRING" or attribute.tag == ns +"ATTRIBUTE-DEFINITION-XHTML"\
or attribute.tag == ns + "ATTRIBUTE-DEFINITION-BOOLEAN" or attribute.tag == ns + "ATTRIBUTE-DEFINITION-INTEGER"\
or attribute.tag == ns + "ATTRIBUTE-VALUE-DATE" or attribute.tag == ns + "ATTRIBUTE-DEFINITION-DATE"\
or attribute.tag == ns + "ATTRIBUTE-DEFINITION-REAL" or attribute.tag == ns + "ATTRIBUTE-DEFINITION-SIMPLE":
specAttribType = getSubElementValuesByTitle(attribute)
tagWithoutNamespace = re.sub('{[\S]*}', '', attribute.tag)
specAttribType["type"] = mapReqifAttributeDefinition2Py(tagWithoutNamespace)
Expand Down Expand Up @@ -310,9 +317,10 @@ def remove_namespaces(thedoc):
values = {}
for valueXml in valuesXml:
value = getSubElementValuesByTitle(valueXml)
# TODO : Support other types
if valueXml.tag == ns + 'ATTRIBUTE-VALUE-EMBEDDED-DOCUMENT' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-STRING' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-XHTML' \
or valueXml.tag == ns + 'ATTRIBUTE-VALUE-BOOLEAN' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-INTEGER':
#TODO : Support other types
if valueXml.tag == ns + 'ATTRIBUTE-VALUE-EMBEDDED-DOCUMENT' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-STRING' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-XHTML'\
or valueXml.tag == ns + 'ATTRIBUTE-VALUE-BOOLEAN' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-INTEGER' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-DATE'\
or valueXml.tag == ns + 'ATTRIBUTE-VALUE-REAL' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-SIMPLE':
attributeRefXml = valueXml.find('./' + ns + 'DEFINITION').getchildren()[0]
value['attributeRef'] = attributeRefXml.text
if 'THE-VALUE' in valueXml.attrib:
Expand All @@ -322,7 +330,11 @@ def remove_namespaces(thedoc):
'./' + ns + 'XHTML-CONTENT/{http://automotive-his.de/200706/rif-xhtml}div')
if contentXml is None:
contentXml = valueXml.find("./" + ns + 'THE-VALUE/{http://www.w3.org/1999/xhtml}div')

if contentXml is None:
contentXml = valueXml.find(
"./" + ns + 'THE-VALUE'
)

value["content"] = etree.tostring(remove_namespaces(contentXml))

# value["content"] = "".join(contentXml.itertext())
Expand Down
2 changes: 1 addition & 1 deletion xlsx2reqif.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ def get_images(images, row, col):
last_hierarch_element = myHierarch
for row_nr in range(2, ws.max_row+1):
xls_req = dict(zip(columns, [ws.cell(row_nr, x).value for x in range(1, ws.max_column + 1)]))
if not "reqifId" in xls_req:
if "reqifId" not in xls_req:
xls_req["reqifId"] = pyreqif.create.creatUUID()
for col in columns:
# do images:
Expand Down

0 comments on commit 34527b9

Please sign in to comment.