Skip to content

Commit 4384bbb

Browse files
jkhsjdhjss-heppner
authored andcommitted
compliance_tool: add verification of Extensions
Previously, the compliance tool would ignore `Extensions` of objects. However, during the update to V3.0 and the changes to the JSON/XML formats, we noticed that the adapters aren't properly tested this way. The validation of `Extensions` can be disabled via the flag `--dont-check-extensions` or the keyword argument `check_extensions` to `AASDataChecker`, since many users are probably only interested in comparing the main model, without any extensions.
1 parent aef37fe commit 4384bbb

6 files changed

Lines changed: 110 additions & 27 deletions

File tree

basyx/aas/compliance_tool/cli.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ def parse_cli_arguments() -> argparse.ArgumentParser:
8282
group.add_argument('--xml', help="Use AAS xml format when checking or creating files", action='store_true')
8383
parser.add_argument('-l', '--logfile', help="Log file to be created in addition to output to stdout", default=None)
8484
parser.add_argument('--aasx', help="Create or read AASX files", action='store_true')
85+
parser.add_argument('--dont-check-extensions', help="Don't compare Extensions", action='store_false')
8586
return parser
8687

8788

@@ -96,6 +97,10 @@ def main():
9697
logger.propagate = False
9798
logger.addHandler(manager)
9899

100+
data_checker_kwargs = {
101+
'check_extensions': args.dont_check_extensions
102+
}
103+
99104
if args.action == 'create' or args.action == 'c':
100105
manager.add_step('Create example data')
101106
if args.aasx:
@@ -154,19 +159,22 @@ def main():
154159
compliance_tool_xml.check_deserialization(args.file_1, manager)
155160
elif args.action == 'example' or args.action == 'e':
156161
if args.aasx:
157-
compliance_tool_aasx.check_aas_example(args.file_1, manager)
162+
compliance_tool_aasx.check_aas_example(args.file_1, manager, **data_checker_kwargs)
158163
elif args.json:
159-
compliance_tool_json.check_aas_example(args.file_1, manager)
164+
compliance_tool_json.check_aas_example(args.file_1, manager, **data_checker_kwargs)
160165
elif args.xml:
161-
compliance_tool_xml.check_aas_example(args.file_1, manager)
166+
compliance_tool_xml.check_aas_example(args.file_1, manager, **data_checker_kwargs)
162167
elif args.action == 'files' or args.action == 'f':
163168
if args.file_2:
164169
if args.aasx:
165-
compliance_tool_aasx.check_aasx_files_equivalence(args.file_1, args.file_2, manager)
170+
compliance_tool_aasx.check_aasx_files_equivalence(args.file_1, args.file_2, manager,
171+
**data_checker_kwargs)
166172
elif args.json:
167-
compliance_tool_json.check_json_files_equivalence(args.file_1, args.file_2, manager)
173+
compliance_tool_json.check_json_files_equivalence(args.file_1, args.file_2, manager,
174+
**data_checker_kwargs)
168175
elif args.xml:
169-
compliance_tool_xml.check_xml_files_equivalence(args.file_1, args.file_2, manager)
176+
compliance_tool_xml.check_xml_files_equivalence(args.file_1, args.file_2, manager,
177+
**data_checker_kwargs)
170178
else:
171179
parser.error("f or files requires two file path.")
172180
exit()

basyx/aas/compliance_tool/compliance_check_aasx.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ def check_schema(file_path: str, state_manager: ComplianceToolStateManager) -> N
158158
reader.close()
159159

160160

161-
def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager) -> None:
161+
def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager, **kwargs) -> None:
162162
"""
163163
Checks if a file contains all elements of the aas example and reports any issues using the given
164164
:class:`~aas.compliance_tool.state_manager.ComplianceToolStateManager`
@@ -168,6 +168,7 @@ def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager)
168168
169169
:param file_path: Given file which should be checked
170170
:param state_manager: :class:`~aas.compliance_tool.state_manager.ComplianceToolStateManager` to log the steps
171+
:param kwargs: Additional arguments to pass to :class:`~aas.examples.data._helper.AASDataChecker`
171172
"""
172173
logger = logging.getLogger('compliance_check')
173174
logger.addHandler(state_manager)
@@ -189,7 +190,7 @@ def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager)
189190
state_manager.set_step_status(Status.NOT_EXECUTED)
190191
return
191192

192-
checker = AASDataChecker(raise_immediately=False)
193+
checker = AASDataChecker(raise_immediately=False, **kwargs)
193194

194195
state_manager.add_step('Check if data is equal to example data')
195196
example_data = create_example_aas_binding()
@@ -267,7 +268,8 @@ def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager)
267268
state_manager.set_step_status(Status.SUCCESS)
268269

269270

270-
def check_aasx_files_equivalence(file_path_1: str, file_path_2: str, state_manager: ComplianceToolStateManager) -> None:
271+
def check_aasx_files_equivalence(file_path_1: str, file_path_2: str, state_manager: ComplianceToolStateManager,
272+
**kwargs) -> None:
271273
"""
272274
Checks if two aasx files contain the same elements in any order and reports any issues using the given
273275
:class:`~aas.compliance_tool.state_manager.ComplianceToolStateManager`
@@ -278,6 +280,7 @@ def check_aasx_files_equivalence(file_path_1: str, file_path_2: str, state_manag
278280
:param file_path_1: Given first file which should be checked
279281
:param file_path_2: Given second file which should be checked
280282
:param state_manager: :class:`~aas.compliance_tool.state_manager.ComplianceToolStateManager` to log the steps
283+
:param kwargs: Additional arguments to pass to :class:`~aas.examples.data._helper.AASDataChecker`
281284
"""
282285
logger = logging.getLogger('compliance_check')
283286
logger.addHandler(state_manager)
@@ -295,7 +298,7 @@ def check_aasx_files_equivalence(file_path_1: str, file_path_2: str, state_manag
295298
state_manager.set_step_status(Status.NOT_EXECUTED)
296299
return
297300

298-
checker = AASDataChecker(raise_immediately=False)
301+
checker = AASDataChecker(raise_immediately=False, **kwargs)
299302
try:
300303
state_manager.add_step('Check if data in files are equal')
301304
checker.check_object_store(obj_store_1, obj_store_2)

basyx/aas/compliance_tool/compliance_check_json.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ def check_deserialization(file_path: str, state_manager: ComplianceToolStateMana
162162
return obj_store
163163

164164

165-
def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager) -> None:
165+
def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager, **kwargs) -> None:
166166
"""
167167
Checks if a file contains all elements of the aas example and reports any issues using the given
168168
:class:`~aas.compliance_tool.state_manager.ComplianceToolStateManager`
@@ -172,6 +172,7 @@ def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager)
172172
173173
:param file_path: Given file which should be checked
174174
:param state_manager: :class:`~aas.compliance_tool.state_manager.ComplianceToolStateManager` to log the steps
175+
:param kwargs: Additional arguments to pass to :class:`~aas.examples.data._helper.AASDataChecker`
175176
"""
176177
# create handler to get logger info
177178
logger_example = logging.getLogger(example_aas.__name__)
@@ -186,15 +187,16 @@ def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager)
186187
state_manager.set_step_status(Status.NOT_EXECUTED)
187188
return
188189

189-
checker = AASDataChecker(raise_immediately=False)
190+
checker = AASDataChecker(raise_immediately=False, **kwargs)
190191

191192
state_manager.add_step('Check if data is equal to example data')
192193
checker.check_object_store(obj_store, create_example())
193194

194195
state_manager.add_log_records_from_data_checker(checker)
195196

196197

197-
def check_json_files_equivalence(file_path_1: str, file_path_2: str, state_manager: ComplianceToolStateManager) -> None:
198+
def check_json_files_equivalence(file_path_1: str, file_path_2: str, state_manager: ComplianceToolStateManager,
199+
**kwargs) -> None:
198200
"""
199201
Checks if two json files contain the same elements in any order and reports any issues using the given
200202
:class:`~aas.compliance_tool.state_manager.ComplianceToolStateManager`
@@ -205,6 +207,7 @@ def check_json_files_equivalence(file_path_1: str, file_path_2: str, state_manag
205207
:param file_path_1: Given first file which should be checked
206208
:param file_path_2: Given second file which should be checked
207209
:param state_manager: :class:`~aas.compliance_tool.state_manager.ComplianceToolStateManager` to log the steps
210+
:param kwargs: Additional arguments to pass to :class:`~aas.examples.data._helper.AASDataChecker`
208211
"""
209212
logger = logging.getLogger('compliance_check')
210213
logger.addHandler(state_manager)
@@ -220,7 +223,7 @@ def check_json_files_equivalence(file_path_1: str, file_path_2: str, state_manag
220223
state_manager.set_step_status(Status.NOT_EXECUTED)
221224
return
222225

223-
checker = AASDataChecker(raise_immediately=False)
226+
checker = AASDataChecker(raise_immediately=False, **kwargs)
224227
try:
225228
state_manager.add_step('Check if data in files are equal')
226229
checker.check_object_store(obj_store_1, obj_store_2)

basyx/aas/compliance_tool/compliance_check_xml.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ def check_deserialization(file_path: str, state_manager: ComplianceToolStateMana
162162
return obj_store
163163

164164

165-
def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager) -> None:
165+
def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager, **kwargs) -> None:
166166
"""
167167
Checks if a file contains all elements of the aas example and reports any issues using the given
168168
:class:`~aas.compliance_tool.state_manager.ComplianceToolStateManager`
@@ -172,6 +172,7 @@ def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager)
172172
173173
:param file_path: Given file which should be checked
174174
:param state_manager: :class:`~aas.compliance_tool.state_manager.ComplianceToolStateManager` to log the steps
175+
:param kwargs: Additional arguments to pass to :class:`~aas.examples.data._helper.AASDataChecker`
175176
"""
176177
# create handler to get logger info
177178
logger_example = logging.getLogger(example_aas.__name__)
@@ -186,15 +187,16 @@ def check_aas_example(file_path: str, state_manager: ComplianceToolStateManager)
186187
state_manager.set_step_status(Status.NOT_EXECUTED)
187188
return
188189

189-
checker = AASDataChecker(raise_immediately=False)
190+
checker = AASDataChecker(raise_immediately=False, **kwargs)
190191

191192
state_manager.add_step('Check if data is equal to example data')
192193
checker.check_object_store(obj_store, create_example())
193194

194195
state_manager.add_log_records_from_data_checker(checker)
195196

196197

197-
def check_xml_files_equivalence(file_path_1: str, file_path_2: str, state_manager: ComplianceToolStateManager) -> None:
198+
def check_xml_files_equivalence(file_path_1: str, file_path_2: str, state_manager: ComplianceToolStateManager,
199+
**kwargs) -> None:
198200
"""
199201
Checks if two xml files contain the same elements in any order and reports any issues using the given
200202
:class:`~aas.compliance_tool.state_manager.ComplianceToolStateManager`
@@ -205,6 +207,7 @@ def check_xml_files_equivalence(file_path_1: str, file_path_2: str, state_manage
205207
:param file_path_1: Given first file which should be checked
206208
:param file_path_2: Given second file which should be checked
207209
:param state_manager: :class:`~aas.compliance_tool.state_manager.ComplianceToolStateManager` to log the steps
210+
:param kwargs: Additional arguments to pass to :class:`~aas.examples.data._helper.AASDataChecker`
208211
"""
209212
logger = logging.getLogger('compliance_check')
210213
logger.addHandler(state_manager)
@@ -220,7 +223,7 @@ def check_xml_files_equivalence(file_path_1: str, file_path_2: str, state_manage
220223
state_manager.set_step_status(Status.NOT_EXECUTED)
221224
return
222225

223-
checker = AASDataChecker(raise_immediately=False)
226+
checker = AASDataChecker(raise_immediately=False, **kwargs)
224227
try:
225228
state_manager.add_step('Check if data in files are equal')
226229
checker.check_object_store(obj_store_1, obj_store_2)

0 commit comments

Comments
 (0)