tools-python icon indicating copy to clipboard operation
tools-python copied to clipboard

Parser crashes on invalid input file instead of showing errors

Open vargenau opened this issue 3 months ago • 0 comments

output.spdx.json

https://github.com/spdx/tools-java gives:

This SPDX Document is not valid due to:
	object has missing required properties (["downloadLocation"]) for {"pointer":"/packages/0"}
	Document must have at least one relationship of type DOCUMENT_DESCRIBES

tools-python crashes:

pyspdxtools -i output.spdx.json
Traceback (most recent call last):
  File "/Users/mvargena/.local/bin/pyspdxtools", line 7, in <module>
    sys.exit(main())
             ~~~~^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/click/core.py", line 1442, in __call__
    return self.main(*args, **kwargs)
           ~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/click/core.py", line 1363, in main
    rv = self.invoke(ctx)
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/click/core.py", line 1226, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/click/core.py", line 794, in invoke
    return callback(*args, **kwargs)
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/clitools/pyspdxtools.py", line 65, in main
    document: Document = parse_file(infile)
                         ~~~~~~~~~~^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/parse_anything.py", line 34, in parse_file
    return json_parser.parse_from_file(file_name, encoding)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/json/json_parser.py", line 16, in parse_from_file
    return JsonLikeDictParser().parse(input_doc_as_dict)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/jsonlikedict/json_like_dict_parser.py", line 84, in parse
    parsed_fields[argument_name] = parsing_method(field)
                                   ~~~~~~~~~~~~~~^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/jsonlikedict/json_like_dict_parser.py", line 49, in <lambda>
    lambda x: parse_list_of_elements(x, self.package_parser.parse_package, self.package_parser.logger),
              ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/jsonlikedict/dict_parsing_functions.py", line 73, in parse_list_of_elements
    parsed_elements = append_parsed_field_or_log_error(
        logger, parsed_elements, element_dict, method_to_parse_element
    )
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/jsonlikedict/dict_parsing_functions.py", line 43, in append_parsed_field_or_log_error
    parsed_element = method_to_parse(field)
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/jsonlikedict/package_parser.py", line 135, in parse_package
    package = construct_or_raise_parsing_error(
        Package,
    ...<27 lines>...
        ),
    )
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/parsing_functions.py", line 13, in construct_or_raise_parsing_error
    constructed_object = object_to_construct(**args_for_construction)
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/model/package.py", line 134, in __init__
    check_types_and_set_values(self, locals())
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/common/typing/type_checks.py", line 26, in check_types_and_set_values
    setattr(instance_under_construction, key, value)
    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/common/typing/dataclass_with_properties.py", line 32, in set_field_with_error_conversion
    set_field(self, value)
    ~~~~~~~~~^^^^^^^^^^^^^
  File "<@beartype(spdx_tools.common.typing.dataclass_with_properties.make_setter.set_field) at 0x1036a6840>", line 32, in set_field
beartype.roar.BeartypeCallHintParamViolation: Method spdx_tools.common.typing.dataclass_with_properties.make_setter.set_field() parameter value="None" violates type hint typing.Union[str, spdx_tools.spdx.model.spdx_no_assertion.SpdxNoAssertion, spdx_tools.spdx.model.spdx_none.SpdxNone], as <class "builtins.NoneType"> "None" not <class "spdx_tools.spdx.model.spdx_none.SpdxNone">, <class "spdx_tools.spdx.model.spdx_no_assertion.SpdxNoAssertion">, or str.

vargenau avatar Sep 11 '25 15:09 vargenau