Skip to content

Commit 6c1a456

Browse files
committed
tests/integration/examples: a basic example of ReqIF -> JSON
1 parent 5ae1457 commit 6c1a456

10 files changed

Lines changed: 488 additions & 3 deletions

File tree

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ development = [
7272
"filecheck >= 0.0.20",
7373
"html5lib >= 1.1",
7474
"pytidylib >= 0.3.2",
75+
76+
# Examples
77+
"dataclasses-json"
7578
]
7679

7780
[project.scripts]

reqif/cli/cli_arg_parser.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def formatter(prog):
9191
# Command – Version
9292
command_subparsers.add_parser(
9393
"version",
94-
help="Print the version of StrictDoc.",
94+
help="Print the version of ReqIF.",
9595
formatter_class=formatter,
9696
)
9797
return main_parser
@@ -127,6 +127,12 @@ def __init__(self, input_file: str, use_reqif_schema: bool):
127127
self.use_reqif_schema: bool = use_reqif_schema
128128

129129

130+
class ConvertCommandConfig:
131+
def __init__(self, input_file: str, output_file: str):
132+
self.input_file: str = input_file
133+
self.output_file: str = output_file
134+
135+
130136
class ReqIFArgsParser:
131137
def __init__(self, args):
132138
self.args = args
@@ -139,6 +145,10 @@ def is_passthrough_command(self):
139145
def is_anonymize_command(self):
140146
return self.args.command == "anonymize"
141147

148+
@property
149+
def is_convert_command(self):
150+
return self.args.command == "convert-to-csv"
151+
142152
@property
143153
def is_dump_command(self):
144154
return self.args.command == "dump"
@@ -155,6 +165,9 @@ def is_validate_command(self):
155165
def is_version_command(self):
156166
return self.args.command == "version"
157167

168+
def get_convert_config(self) -> ConvertCommandConfig:
169+
return ConvertCommandConfig(self.args.input_file, self.args.output_file)
170+
158171
def get_passthrough_config(self) -> PassthroughCommandConfig:
159172
return PassthroughCommandConfig(
160173
self.args.input_file, self.args.output_file

requirements.txt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
astroid==2.11.7 ; python_version >= "3.7" and python_version < "4.0"
2+
attrs==22.2.0 ; python_version >= "3.7" and python_version < "4.0"
3+
black==23.1.0 ; python_version >= "3.7" and python_version < "4.0"
4+
click==8.1.3 ; python_version >= "3.7" and python_version < "4.0"
5+
colorama==0.4.6 ; python_version >= "3.7" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.7" and python_version < "4.0" and platform_system == "Windows"
6+
coverage==7.1.0 ; python_version >= "3.7" and python_version < "4.0"
7+
dill==0.3.6 ; python_version >= "3.7" and python_version < "4.0"
8+
exceptiongroup==1.1.0 ; python_version >= "3.7" and python_version < "3.11"
9+
filecheck==0.0.23 ; python_version >= "3.7" and python_version < "4.0"
10+
flake8==5.0.4 ; python_version >= "3.7" and python_version < "4.0"
11+
html5lib==1.1 ; python_version >= "3.7" and python_version < "4.0"
12+
importlib-metadata==4.2.0 ; python_version >= "3.7" and python_version < "3.8"
13+
iniconfig==2.0.0 ; python_version >= "3.7" and python_version < "4.0"
14+
invoke==2.0.0 ; python_version >= "3.7" and python_version < "4.0"
15+
isort==5.11.5 ; python_version >= "3.7" and python_version < "4.0"
16+
jinja2==3.1.2 ; python_version >= "3.7" and python_version < "4.0"
17+
lazy-object-proxy==1.9.0 ; python_version >= "3.7" and python_version < "4.0"
18+
lit==15.0.7 ; python_version >= "3.7" and python_version < "4.0"
19+
lxml==4.9.2 ; python_version >= "3.7" and python_version < "4.0"
20+
markupsafe==2.1.2 ; python_version >= "3.7" and python_version < "4.0"
21+
mccabe==0.7.0 ; python_version >= "3.7" and python_version < "4.0"
22+
mypy-extensions==1.0.0 ; python_version >= "3.7" and python_version < "4.0"
23+
mypy==1.0.0 ; python_version >= "3.7" and python_version < "4.0"
24+
packaging==23.0 ; python_version >= "3.7" and python_version < "4.0"
25+
pathspec==0.11.0 ; python_version >= "3.7" and python_version < "4.0"
26+
platformdirs==3.0.0 ; python_version >= "3.7" and python_version < "4.0"
27+
pluggy==1.0.0 ; python_version >= "3.7" and python_version < "4.0"
28+
pycodestyle==2.9.1 ; python_version >= "3.7" and python_version < "4.0"
29+
pyflakes==2.5.0 ; python_version >= "3.7" and python_version < "4.0"
30+
pylint==2.13.9 ; python_version >= "3.7" and python_version < "4.0"
31+
pytest==7.2.1 ; python_version >= "3.7" and python_version < "4.0"
32+
pytidylib==0.3.2 ; python_version >= "3.7" and python_version < "4.0"
33+
ruff==0.0.243 ; python_version >= "3.7" and python_version < "4.0"
34+
setuptools==67.2.0 ; python_version >= "3.7" and python_version < "4.0"
35+
six==1.16.0 ; python_version >= "3.7" and python_version < "4.0"
36+
toml==0.10.2 ; python_version >= "3.7" and python_version < "4.0"
37+
tomli==2.0.1 ; python_version >= "3.7" and python_version < "3.11"
38+
typed-ast==1.5.4 ; python_version >= "3.7" and python_version < "3.8"
39+
typing-extensions==4.4.0 ; python_version >= "3.7" and python_version < "4.0"
40+
webencodings==0.5.1 ; python_version >= "3.7" and python_version < "4.0"
41+
wrapt==1.14.1 ; python_version >= "3.7" and python_version < "4.0"
42+
zipp==3.12.1 ; python_version >= "3.7" and python_version < "3.8"

tasks.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,13 +132,14 @@ def lint_flake8(context):
132132
command = """
133133
flake8
134134
reqif/ tasks.py tests/unit/
135+
--ignore=E501,W503
135136
--statistics --max-line-length 80 --show-source
136137
"""
137138
run_invoke_cmd(context, command)
138139

139140

140141
@task
141-
def lint_ruff(context, fix=False):
142+
def lint_ruff(context, fix=True):
142143
argument_fix = "--fix" if fix else ""
143144
command = f"""
144145
ruff . {argument_fix}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"documents": [
3+
{
4+
"name": "Test Export",
5+
"content": [
6+
{
7+
"Type": "System Requirement",
8+
"ReqIF.ForeignCreatedBy": "redacted@mail.com",
9+
"ReqIF.ForeignID": "LOREM-818",
10+
"Status": "Draft",
11+
"ReqIF.ForeignCreatedOn": "2023-03-15T10:46:58.611Z",
12+
"ReqIF.ChapterName": "SW: Lorem Ipsum",
13+
"ReqIF.Text": "\n <xhtml:div>The Lorem Ipsum shall do something.</xhtml:div>\n "
14+
}
15+
]
16+
}
17+
],
18+
"fields": [
19+
"ReqIF.ChapterName",
20+
"ReqIF.ForeignCreatedBy",
21+
"ReqIF.ForeignCreatedOn",
22+
"ReqIF.ForeignID",
23+
"ReqIF.Text",
24+
"Status"
25+
]
26+
}
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<REQ-IF xmlns="http://www.omg.org/spec/ReqIF/20110401/reqif.xsd" xmlns:xhtml="http://www.w3.org/1999/xhtml">
3+
<THE-HEADER>
4+
<REQ-IF-HEADER IDENTIFIER="_636e6dc4-c08a-412e-9842-99c47cd84c11">
5+
<CREATION-TIME>2021-07-01T01:12:06.121Z</CREATION-TIME>
6+
<REQ-IF-TOOL-ID>Polarion ReqIF Roundtrip</REQ-IF-TOOL-ID>
7+
<REQ-IF-VERSION>1.0</REQ-IF-VERSION>
8+
<SOURCE-TOOL-ID>Polarion</SOURCE-TOOL-ID>
9+
<TITLE>Test export</TITLE>
10+
</REQ-IF-HEADER>
11+
</THE-HEADER>
12+
<CORE-CONTENT>
13+
<REQ-IF-CONTENT>
14+
<DATATYPES>
15+
<DATATYPE-DEFINITION-STRING IDENTIFIER="polarion_type_string" LAST-CHANGE="2013-01-01T00:00:00Z" LONG-NAME="String (single line plain text)" MAX-LENGTH="999999999"/>
16+
<DATATYPE-DEFINITION-XHTML IDENTIFIER="polarion_type_rich_text" LAST-CHANGE="2013-01-01T00:00:00Z" LONG-NAME="Rich Text (multi-line)"/>
17+
<DATATYPE-DEFINITION-DATE IDENTIFIER="polarion_type_date_time" LAST-CHANGE="2013-01-01T00:00:00Z" LONG-NAME="Date time"/>
18+
<DATATYPE-DEFINITION-REAL ACCURACY="10" IDENTIFIER="polarion_type_float" LAST-CHANGE="2013-01-01T00:00:00Z" LONG-NAME="Float" MAX="3.4028235E38" MIN="1.4E-45"/>
19+
<DATATYPE-DEFINITION-INTEGER IDENTIFIER="polarion_type_integer" LAST-CHANGE="2013-01-01T00:00:00Z" LONG-NAME="Integer" MAX="9223372036854775807" MIN="-9223372036854775808"/>
20+
<DATATYPE-DEFINITION-ENUMERATION IDENTIFIER="rmf-74251127-bfc7-4823-bd6c-dec51864729e" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="Enumeration for Status">
21+
<SPECIFIED-VALUES>
22+
<ENUM-VALUE IDENTIFIER="rmf-586f21e7-bcea-4ec6-bff6-52262ffe9735" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="Approved">
23+
<PROPERTIES>
24+
<EMBEDDED-VALUE KEY="1" OTHER-CONTENT="Approved"/>
25+
</PROPERTIES>
26+
</ENUM-VALUE>
27+
<ENUM-VALUE IDENTIFIER="rmf-9515c994-87fa-4dff-b66b-ad407bcffbf5" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="Draft">
28+
<PROPERTIES>
29+
<EMBEDDED-VALUE KEY="2" OTHER-CONTENT="Draft"/>
30+
</PROPERTIES>
31+
</ENUM-VALUE>
32+
<ENUM-VALUE IDENTIFIER="rmf-423ebbb2-9b51-4fdf-a825-5ed56477eef9" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="Rejected">
33+
<PROPERTIES>
34+
<EMBEDDED-VALUE KEY="3" OTHER-CONTENT="Rejected"/>
35+
</PROPERTIES>
36+
</ENUM-VALUE>
37+
<ENUM-VALUE IDENTIFIER="rmf-d7e7a5f0-4835-4e17-bd74-1d736a4f3921" LAST-CHANGE="2021-07-01T01:12:06.750Z" LONG-NAME="Reviewed">
38+
<PROPERTIES>
39+
<EMBEDDED-VALUE KEY="4" OTHER-CONTENT="Reviewed"/>
40+
</PROPERTIES>
41+
</ENUM-VALUE>
42+
</SPECIFIED-VALUES>
43+
</DATATYPE-DEFINITION-ENUMERATION>
44+
</DATATYPES>
45+
<SPEC-TYPES>
46+
<SPECIFICATION-TYPE IDENTIFIER="polarion_live_document" LAST-CHANGE="2013-01-01T00:00:00Z" LONG-NAME="Polarion Live Document"/>
47+
<SPEC-OBJECT-TYPE IDENTIFIER="_820f7cab-e89d-4793-a093-15c66d554fa4" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="Heading">
48+
<SPEC-ATTRIBUTES>
49+
<ATTRIBUTE-DEFINITION-STRING IDENTIFIER="rmf-d8e70e15-dd88-4f6a-a383-07b7d25466a2" IS-EDITABLE="true" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="ReqIF.ChapterName">
50+
<TYPE>
51+
<DATATYPE-DEFINITION-STRING-REF>polarion_type_string</DATATYPE-DEFINITION-STRING-REF>
52+
</TYPE>
53+
</ATTRIBUTE-DEFINITION-STRING>
54+
<ATTRIBUTE-DEFINITION-STRING IDENTIFIER="rmf-84d62b3e-a6ca-40af-9cb5-2dba9e462edd" IS-EDITABLE="true" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="ReqIF.ForeignCreatedBy">
55+
<TYPE>
56+
<DATATYPE-DEFINITION-STRING-REF>polarion_type_string</DATATYPE-DEFINITION-STRING-REF>
57+
</TYPE>
58+
</ATTRIBUTE-DEFINITION-STRING>
59+
<ATTRIBUTE-DEFINITION-DATE IDENTIFIER="rmf-f55d772a-fcd8-4818-96cf-a79643bc63bd" IS-EDITABLE="true" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="ReqIF.ForeignCreatedOn">
60+
<TYPE>
61+
<DATATYPE-DEFINITION-DATE-REF>polarion_type_date_time</DATATYPE-DEFINITION-DATE-REF>
62+
</TYPE>
63+
</ATTRIBUTE-DEFINITION-DATE>
64+
<ATTRIBUTE-DEFINITION-STRING IDENTIFIER="rmf-5edaca06-6e3e-48f4-aeb8-9a9ef1cfcbd7" IS-EDITABLE="true" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="ReqIF.ForeignID">
65+
<TYPE>
66+
<DATATYPE-DEFINITION-STRING-REF>polarion_type_string</DATATYPE-DEFINITION-STRING-REF>
67+
</TYPE>
68+
</ATTRIBUTE-DEFINITION-STRING>
69+
<ATTRIBUTE-DEFINITION-XHTML IDENTIFIER="rmf-a6468304-cb04-41a2-b714-f2531c8acc4b" IS-EDITABLE="true" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="ReqIF.Text">
70+
<TYPE>
71+
<DATATYPE-DEFINITION-XHTML-REF>polarion_type_rich_text</DATATYPE-DEFINITION-XHTML-REF>
72+
</TYPE>
73+
</ATTRIBUTE-DEFINITION-XHTML>
74+
</SPEC-ATTRIBUTES>
75+
</SPEC-OBJECT-TYPE>
76+
<SPEC-OBJECT-TYPE IDENTIFIER="_21afe70a-ac89-48e0-b394-d1cba35c3537" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="System Requirement">
77+
<SPEC-ATTRIBUTES>
78+
<ATTRIBUTE-DEFINITION-STRING IDENTIFIER="rmf-9161875d-39ee-4106-a28d-3b60242ec66e" IS-EDITABLE="true" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="ReqIF.ChapterName">
79+
<TYPE>
80+
<DATATYPE-DEFINITION-STRING-REF>polarion_type_string</DATATYPE-DEFINITION-STRING-REF>
81+
</TYPE>
82+
</ATTRIBUTE-DEFINITION-STRING>
83+
<ATTRIBUTE-DEFINITION-STRING IDENTIFIER="rmf-27e728bc-3e42-4d4c-b7cb-da6a9e4b68ba" IS-EDITABLE="true" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="ReqIF.ForeignCreatedBy">
84+
<TYPE>
85+
<DATATYPE-DEFINITION-STRING-REF>polarion_type_string</DATATYPE-DEFINITION-STRING-REF>
86+
</TYPE>
87+
</ATTRIBUTE-DEFINITION-STRING>
88+
<ATTRIBUTE-DEFINITION-DATE IDENTIFIER="rmf-1056139a-17cf-4dee-ba90-157337945bf1" IS-EDITABLE="true" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="ReqIF.ForeignCreatedOn">
89+
<TYPE>
90+
<DATATYPE-DEFINITION-DATE-REF>polarion_type_date_time</DATATYPE-DEFINITION-DATE-REF>
91+
</TYPE>
92+
</ATTRIBUTE-DEFINITION-DATE>
93+
<ATTRIBUTE-DEFINITION-STRING IDENTIFIER="rmf-da80204e-9dd2-4954-aa8e-e93732255ecb" IS-EDITABLE="true" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="ReqIF.ForeignID">
94+
<TYPE>
95+
<DATATYPE-DEFINITION-STRING-REF>polarion_type_string</DATATYPE-DEFINITION-STRING-REF>
96+
</TYPE>
97+
</ATTRIBUTE-DEFINITION-STRING>
98+
<ATTRIBUTE-DEFINITION-XHTML IDENTIFIER="rmf-7d67ecd1-e8ff-4804-b385-548d6fe8ae00" IS-EDITABLE="true" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="ReqIF.Text">
99+
<TYPE>
100+
<DATATYPE-DEFINITION-XHTML-REF>polarion_type_rich_text</DATATYPE-DEFINITION-XHTML-REF>
101+
</TYPE>
102+
</ATTRIBUTE-DEFINITION-XHTML>
103+
<ATTRIBUTE-DEFINITION-ENUMERATION IDENTIFIER="rmf-4ec70808-b34d-42da-a6d9-16dedc6a1854" IS-EDITABLE="true" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="Status" MULTI-VALUED="false">
104+
<TYPE>
105+
<DATATYPE-DEFINITION-ENUMERATION-REF>rmf-74251127-bfc7-4823-bd6c-dec51864729e</DATATYPE-DEFINITION-ENUMERATION-REF>
106+
</TYPE>
107+
</ATTRIBUTE-DEFINITION-ENUMERATION>
108+
</SPEC-ATTRIBUTES>
109+
</SPEC-OBJECT-TYPE>
110+
</SPEC-TYPES>
111+
<SPEC-OBJECTS>
112+
<SPEC-OBJECT IDENTIFIER="rmf-1d312f18-fa7c-4de3-b8f3-ab105179fddf" LAST-CHANGE="2021-07-01T01:12:06.082Z">
113+
<VALUES>
114+
<ATTRIBUTE-VALUE-STRING THE-VALUE="redacted@mail.com">
115+
<DEFINITION>
116+
<ATTRIBUTE-DEFINITION-STRING-REF>rmf-27e728bc-3e42-4d4c-b7cb-da6a9e4b68ba</ATTRIBUTE-DEFINITION-STRING-REF>
117+
</DEFINITION>
118+
</ATTRIBUTE-VALUE-STRING>
119+
<ATTRIBUTE-VALUE-STRING THE-VALUE="LOREM-818">
120+
<DEFINITION>
121+
<ATTRIBUTE-DEFINITION-STRING-REF>rmf-da80204e-9dd2-4954-aa8e-e93732255ecb</ATTRIBUTE-DEFINITION-STRING-REF>
122+
</DEFINITION>
123+
</ATTRIBUTE-VALUE-STRING>
124+
<ATTRIBUTE-VALUE-ENUMERATION>
125+
<VALUES>
126+
<ENUM-VALUE-REF>rmf-9515c994-87fa-4dff-b66b-ad407bcffbf5</ENUM-VALUE-REF>
127+
</VALUES>
128+
<DEFINITION>
129+
<ATTRIBUTE-DEFINITION-ENUMERATION-REF>rmf-4ec70808-b34d-42da-a6d9-16dedc6a1854</ATTRIBUTE-DEFINITION-ENUMERATION-REF>
130+
</DEFINITION>
131+
</ATTRIBUTE-VALUE-ENUMERATION>
132+
<ATTRIBUTE-VALUE-DATE THE-VALUE="2023-03-15T10:46:58.611Z">
133+
<DEFINITION>
134+
<ATTRIBUTE-DEFINITION-DATE-REF>rmf-1056139a-17cf-4dee-ba90-157337945bf1</ATTRIBUTE-DEFINITION-DATE-REF>
135+
</DEFINITION>
136+
</ATTRIBUTE-VALUE-DATE>
137+
<ATTRIBUTE-VALUE-STRING THE-VALUE="SW: Lorem Ipsum">
138+
<DEFINITION>
139+
<ATTRIBUTE-DEFINITION-STRING-REF>rmf-9161875d-39ee-4106-a28d-3b60242ec66e</ATTRIBUTE-DEFINITION-STRING-REF>
140+
</DEFINITION>
141+
</ATTRIBUTE-VALUE-STRING>
142+
<ATTRIBUTE-VALUE-XHTML>
143+
<DEFINITION>
144+
<ATTRIBUTE-DEFINITION-XHTML-REF>rmf-7d67ecd1-e8ff-4804-b385-548d6fe8ae00</ATTRIBUTE-DEFINITION-XHTML-REF>
145+
</DEFINITION>
146+
<THE-VALUE>
147+
<xhtml:div>The Lorem Ipsum shall do something.</xhtml:div>
148+
</THE-VALUE>
149+
</ATTRIBUTE-VALUE-XHTML>
150+
</VALUES>
151+
<TYPE>
152+
<SPEC-OBJECT-TYPE-REF>_21afe70a-ac89-48e0-b394-d1cba35c3537</SPEC-OBJECT-TYPE-REF>
153+
</TYPE>
154+
</SPEC-OBJECT>
155+
</SPEC-OBJECTS>
156+
<SPECIFICATIONS>
157+
<SPECIFICATION IDENTIFIER="_b937ac1e-14cd-4222-8a19-b77d107d9a02" LAST-CHANGE="2021-07-01T01:12:06.749Z" LONG-NAME="Test Export">
158+
<TYPE>
159+
<SPECIFICATION-TYPE-REF>polarion_live_document</SPECIFICATION-TYPE-REF>
160+
</TYPE>
161+
<CHILDREN>
162+
<SPEC-HIERARCHY IDENTIFIER="rmf-0c4d996f-31e9-41d5-bbf0-73c13fc68f3c" LAST-CHANGE="2021-07-01T01:12:06.078Z">
163+
<OBJECT>
164+
<SPEC-OBJECT-REF>rmf-1d312f18-fa7c-4de3-b8f3-ab105179fddf</SPEC-OBJECT-REF>
165+
</OBJECT>
166+
</SPEC-HIERARCHY>
167+
</CHILDREN>
168+
</SPECIFICATION>
169+
</SPECIFICATIONS>
170+
</REQ-IF-CONTENT>
171+
</CORE-CONTENT>
172+
</REQ-IF>
Binary file not shown.

0 commit comments

Comments
 (0)