├── .editorconfig ├── .envrc ├── .flake8 ├── .github ├── ISSUE_TEMPLATE │ ├── 1-feature_request.md │ ├── 2-bug_report.md │ ├── ValidationError-report.md │ └── config.yml ├── dependabot.yml └── workflows │ ├── docker.yml │ ├── python.yml │ └── release.yml ├── .gitignore ├── .isort.cfg ├── .mypy.ini ├── .readthedocs.yaml ├── CHANGELOG.md ├── CODEOWNERS ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── NOTICE ├── README.md ├── bandit.yml ├── cyclonedx_py ├── __init__.py ├── __main__.py ├── _internal │ ├── __init__.py │ ├── cli.py │ ├── cli_common.py │ ├── environment.py │ ├── pipenv.py │ ├── poetry.py │ ├── requirements.py │ └── utils │ │ ├── __init__.py │ │ ├── args.py │ │ ├── bytes.py │ │ ├── cdx.py │ │ ├── io.py │ │ ├── license_trove_classifier.py │ │ ├── mimetypes.py │ │ ├── packaging.py │ │ ├── pep610.py │ │ ├── pep621.py │ │ ├── pep639.py │ │ ├── poetry.py │ │ ├── pyproject.py │ │ ├── secret.py │ │ └── toml.py └── py.typed ├── docs ├── Makefile ├── changelog.rst ├── conf.py ├── contributing.rst ├── index.rst ├── install.rst ├── make.bat ├── processes │ └── release │ │ └── conda-forge.md ├── requirements.txt ├── support.rst ├── upgrading.rst └── usage.rst ├── package_aliases ├── cyclonedx-py │ ├── .gitignore │ ├── README.md │ └── pyproject.toml └── publishing.md ├── poetry.toml ├── pyproject.toml ├── tests ├── __init__.py ├── _data │ ├── infiles │ │ ├── .editorconfig │ │ ├── .gitattributes │ │ ├── _helpers │ │ │ ├── local_pckages │ │ │ │ ├── a │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── README.md │ │ │ │ │ ├── dist │ │ │ │ │ │ ├── package-a-23.42.tar.gz │ │ │ │ │ │ └── package_a-23.42-py3-none-any.whl │ │ │ │ │ ├── module_a.py │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── b │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── README.md │ │ │ │ │ ├── dist │ │ │ │ │ │ ├── package-b-23.42.tar.gz │ │ │ │ │ │ └── package_b-23.42-py3-none-any.whl │ │ │ │ │ ├── module_b.py │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── c │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── README.md │ │ │ │ │ ├── dist │ │ │ │ │ │ ├── package-c-23.42.tar.gz │ │ │ │ │ │ └── package_c-23.42-py3-none-any.whl │ │ │ │ │ ├── module_c.py │ │ │ │ │ └── pyproject.toml │ │ │ │ └── with-license-pep639_regression-issue868 │ │ │ │ │ ├── .editorconfig │ │ │ │ │ ├── .gitattributes │ │ │ │ │ ├── README.md │ │ │ │ │ ├── my_licenses │ │ │ │ │ ├── richtext.rtf │ │ │ │ │ ├── utf-16be_withBOM.txt │ │ │ │ │ ├── utf-16le_withBOM.txt │ │ │ │ │ ├── utf-8_noBOM.txt │ │ │ │ │ └── utf-8_withBOM.txt │ │ │ │ │ └── pyproject.toml │ │ │ └── pypi-proxy.py │ │ ├── environment │ │ │ ├── broken-env │ │ │ │ ├── README.md │ │ │ │ ├── broken-json.py │ │ │ │ └── non-zero.py │ │ │ ├── editable-self │ │ │ │ ├── init.py │ │ │ │ └── pyproject.toml │ │ │ ├── local │ │ │ │ ├── init.py │ │ │ │ └── pyproject.toml │ │ │ ├── no-deps │ │ │ │ ├── init.py │ │ │ │ └── pyproject.toml │ │ │ ├── normalize-packagename │ │ │ │ ├── init.py │ │ │ │ ├── pinning.txt │ │ │ │ └── pyproject.toml │ │ │ ├── private-packages │ │ │ │ ├── init.py │ │ │ │ └── pyproject.toml │ │ │ ├── via-pdm │ │ │ │ ├── .gitignore │ │ │ │ ├── init.py │ │ │ │ ├── pdm.lock │ │ │ │ ├── pdm.toml │ │ │ │ └── pyproject.toml │ │ │ ├── via-pipenv │ │ │ │ ├── Pipfile │ │ │ │ ├── Pipfile.lock │ │ │ │ ├── init.py │ │ │ │ └── pyproject.toml │ │ │ ├── via-poetry │ │ │ │ ├── dummy.py │ │ │ │ ├── init.py │ │ │ │ ├── poetry.lock │ │ │ │ ├── poetry.toml │ │ │ │ └── pyproject.toml │ │ │ ├── via-uv │ │ │ │ ├── .gitignore │ │ │ │ ├── init.py │ │ │ │ ├── pyproject.toml │ │ │ │ └── uv.lock │ │ │ ├── with-extras │ │ │ │ ├── init.py │ │ │ │ ├── pinning.txt │ │ │ │ └── pyproject.toml │ │ │ ├── with-license-file │ │ │ │ ├── init.py │ │ │ │ ├── pyproject.toml │ │ │ │ └── testing │ │ │ │ │ └── someLicenseFile.txt.bin │ │ │ ├── with-license-pep639 │ │ │ │ ├── init.py │ │ │ │ ├── pinning.txt │ │ │ │ └── pyproject.toml │ │ │ ├── with-license-text │ │ │ │ ├── init.py │ │ │ │ └── pyproject.toml │ │ │ └── with-urls │ │ │ │ ├── init.py │ │ │ │ └── pyproject.toml │ │ ├── pipenv │ │ │ ├── .envrc │ │ │ ├── category-deps │ │ │ │ ├── Pipfile │ │ │ │ ├── Pipfile.lock │ │ │ │ └── pyproject.toml │ │ │ ├── default-and-dev │ │ │ │ ├── Pipfile │ │ │ │ ├── Pipfile.lock │ │ │ │ └── pyproject.toml │ │ │ ├── editable-self │ │ │ │ ├── Pipfile │ │ │ │ ├── Pipfile.lock │ │ │ │ └── pyproject.toml │ │ │ ├── local │ │ │ │ ├── Pipfile │ │ │ │ ├── Pipfile.lock │ │ │ │ └── pyproject.toml │ │ │ ├── no-deps │ │ │ │ ├── Pipfile │ │ │ │ ├── Pipfile.lock │ │ │ │ └── pyproject.toml │ │ │ ├── normalize-packagename │ │ │ │ ├── Pipfile │ │ │ │ ├── Pipfile.lock │ │ │ │ └── pyproject.toml │ │ │ ├── private-packages │ │ │ │ ├── Pipfile │ │ │ │ ├── Pipfile.lock │ │ │ │ └── pyproject.toml │ │ │ ├── with-extras │ │ │ │ ├── Pipfile │ │ │ │ ├── Pipfile.lock │ │ │ │ └── pyproject.toml │ │ │ └── with-urls │ │ │ │ ├── Pipfile │ │ │ │ ├── Pipfile.lock │ │ │ │ └── pyproject.toml │ │ ├── poetry │ │ │ ├── README.md │ │ │ ├── group-deps │ │ │ │ ├── lock11 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock20 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock21 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ ├── local │ │ │ │ ├── lock10 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock11 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock20 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock21 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ ├── main-and-dev │ │ │ │ ├── lock10 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock11 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock20 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock21 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ ├── multi-constraint-deps │ │ │ │ ├── lock11 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock20 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock21 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ ├── no-deps │ │ │ │ ├── lock20 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock21 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ ├── normalize-packagename │ │ │ │ ├── lock10 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock20 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock21 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ ├── private-packges │ │ │ │ ├── lock10 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock11 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock20 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ ├── private-packges_v2 │ │ │ │ ├── lock21 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ ├── regression-issue611 │ │ │ │ ├── lock20 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ ├── pyproject.toml │ │ │ │ │ └── regression-issue611-poetry.lock.bin │ │ │ │ ├── lock21 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ ├── regression-issue702 │ │ │ │ ├── lock10 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock11 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock20 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock21 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ ├── regression-issue727 │ │ │ │ ├── lock20 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock21 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ ├── with-extras │ │ │ │ ├── lock10 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock11 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock20 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock21 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ ├── with-optionals-no-extra │ │ │ │ ├── lock10 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock11 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock20 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock21 │ │ │ │ │ ├── poetry.lock │ │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ │ └── with-urls │ │ │ │ ├── lock10 │ │ │ │ ├── poetry.lock │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock11 │ │ │ │ ├── poetry.lock │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock20 │ │ │ │ ├── poetry.lock │ │ │ │ └── pyproject.toml │ │ │ │ ├── lock21 │ │ │ │ ├── poetry.lock │ │ │ │ └── pyproject.toml │ │ │ │ └── pyproject-proto.toml │ │ └── requirements │ │ │ ├── frozen.txt │ │ │ ├── local.txt │ │ │ ├── nested.txt │ │ │ ├── private-packages.txt │ │ │ ├── pyproject.toml │ │ │ ├── regression-issue448.cp1252.txt.bin │ │ │ ├── with-comments.txt │ │ │ ├── with-extras.txt │ │ │ ├── with-hashes.txt │ │ │ ├── with-urls.txt │ │ │ └── without-pinned-versions.txt │ └── snapshots │ │ ├── .gitattributes │ │ ├── README.md │ │ ├── cli │ │ ├── purls-normal.json.bin │ │ └── purls-short.json.bin │ │ ├── environment │ │ ├── pep639-texts_with-license-pep639_1.0.xml.bin │ │ ├── pep639-texts_with-license-pep639_1.1.xml.bin │ │ ├── pep639-texts_with-license-pep639_1.2.json.bin │ │ ├── pep639-texts_with-license-pep639_1.2.xml.bin │ │ ├── pep639-texts_with-license-pep639_1.3.json.bin │ │ ├── pep639-texts_with-license-pep639_1.3.xml.bin │ │ ├── pep639-texts_with-license-pep639_1.4.json.bin │ │ ├── pep639-texts_with-license-pep639_1.4.xml.bin │ │ ├── pep639-texts_with-license-pep639_1.5.json.bin │ │ ├── pep639-texts_with-license-pep639_1.5.xml.bin │ │ ├── pep639-texts_with-license-pep639_1.6.json.bin │ │ ├── pep639-texts_with-license-pep639_1.6.xml.bin │ │ ├── pep639_with-license-pep639_1.0.xml.bin │ │ ├── pep639_with-license-pep639_1.1.xml.bin │ │ ├── pep639_with-license-pep639_1.2.json.bin │ │ ├── pep639_with-license-pep639_1.2.xml.bin │ │ ├── pep639_with-license-pep639_1.3.json.bin │ │ ├── pep639_with-license-pep639_1.3.xml.bin │ │ ├── pep639_with-license-pep639_1.4.json.bin │ │ ├── pep639_with-license-pep639_1.4.xml.bin │ │ ├── pep639_with-license-pep639_1.5.json.bin │ │ ├── pep639_with-license-pep639_1.5.xml.bin │ │ ├── pep639_with-license-pep639_1.6.json.bin │ │ ├── pep639_with-license-pep639_1.6.xml.bin │ │ ├── plain_editable-self_1.0.xml.bin │ │ ├── plain_editable-self_1.1.xml.bin │ │ ├── plain_editable-self_1.2.json.bin │ │ ├── plain_editable-self_1.2.xml.bin │ │ ├── plain_editable-self_1.3.json.bin │ │ ├── plain_editable-self_1.3.xml.bin │ │ ├── plain_editable-self_1.4.json.bin │ │ ├── plain_editable-self_1.4.xml.bin │ │ ├── plain_editable-self_1.5.json.bin │ │ ├── plain_editable-self_1.5.xml.bin │ │ ├── plain_editable-self_1.6.json.bin │ │ ├── plain_editable-self_1.6.xml.bin │ │ ├── plain_local_1.0.xml.bin │ │ ├── plain_local_1.1.xml.bin │ │ ├── plain_local_1.2.json.bin │ │ ├── plain_local_1.2.xml.bin │ │ ├── plain_local_1.3.json.bin │ │ ├── plain_local_1.3.xml.bin │ │ ├── plain_local_1.4.json.bin │ │ ├── plain_local_1.4.xml.bin │ │ ├── plain_local_1.5.json.bin │ │ ├── plain_local_1.5.xml.bin │ │ ├── plain_local_1.6.json.bin │ │ ├── plain_local_1.6.xml.bin │ │ ├── plain_no-deps_1.0.xml.bin │ │ ├── plain_no-deps_1.1.xml.bin │ │ ├── plain_no-deps_1.2.json.bin │ │ ├── plain_no-deps_1.2.xml.bin │ │ ├── plain_no-deps_1.3.json.bin │ │ ├── plain_no-deps_1.3.xml.bin │ │ ├── plain_no-deps_1.4.json.bin │ │ ├── plain_no-deps_1.4.xml.bin │ │ ├── plain_no-deps_1.5.json.bin │ │ ├── plain_no-deps_1.5.xml.bin │ │ ├── plain_no-deps_1.6.json.bin │ │ ├── plain_no-deps_1.6.xml.bin │ │ ├── plain_normalize-packagename_1.0.xml.bin │ │ ├── plain_normalize-packagename_1.1.xml.bin │ │ ├── plain_normalize-packagename_1.2.json.bin │ │ ├── plain_normalize-packagename_1.2.xml.bin │ │ ├── plain_normalize-packagename_1.3.json.bin │ │ ├── plain_normalize-packagename_1.3.xml.bin │ │ ├── plain_normalize-packagename_1.4.json.bin │ │ ├── plain_normalize-packagename_1.4.xml.bin │ │ ├── plain_normalize-packagename_1.5.json.bin │ │ ├── plain_normalize-packagename_1.5.xml.bin │ │ ├── plain_normalize-packagename_1.6.json.bin │ │ ├── plain_normalize-packagename_1.6.xml.bin │ │ ├── plain_private-packages_1.0.xml.bin │ │ ├── plain_private-packages_1.1.xml.bin │ │ ├── plain_private-packages_1.2.json.bin │ │ ├── plain_private-packages_1.2.xml.bin │ │ ├── plain_private-packages_1.3.json.bin │ │ ├── plain_private-packages_1.3.xml.bin │ │ ├── plain_private-packages_1.4.json.bin │ │ ├── plain_private-packages_1.4.xml.bin │ │ ├── plain_private-packages_1.5.json.bin │ │ ├── plain_private-packages_1.5.xml.bin │ │ ├── plain_private-packages_1.6.json.bin │ │ ├── plain_private-packages_1.6.xml.bin │ │ ├── plain_via-pdm_1.0.xml.bin │ │ ├── plain_via-pdm_1.1.xml.bin │ │ ├── plain_via-pdm_1.2.json.bin │ │ ├── plain_via-pdm_1.2.xml.bin │ │ ├── plain_via-pdm_1.3.json.bin │ │ ├── plain_via-pdm_1.3.xml.bin │ │ ├── plain_via-pdm_1.4.json.bin │ │ ├── plain_via-pdm_1.4.xml.bin │ │ ├── plain_via-pdm_1.5.json.bin │ │ ├── plain_via-pdm_1.5.xml.bin │ │ ├── plain_via-pdm_1.6.json.bin │ │ ├── plain_via-pdm_1.6.xml.bin │ │ ├── plain_via-pipenv_1.0.xml.bin │ │ ├── plain_via-pipenv_1.1.xml.bin │ │ ├── plain_via-pipenv_1.2.json.bin │ │ ├── plain_via-pipenv_1.2.xml.bin │ │ ├── plain_via-pipenv_1.3.json.bin │ │ ├── plain_via-pipenv_1.3.xml.bin │ │ ├── plain_via-pipenv_1.4.json.bin │ │ ├── plain_via-pipenv_1.4.xml.bin │ │ ├── plain_via-pipenv_1.5.json.bin │ │ ├── plain_via-pipenv_1.5.xml.bin │ │ ├── plain_via-pipenv_1.6.json.bin │ │ ├── plain_via-pipenv_1.6.xml.bin │ │ ├── plain_via-poetry_1.0.xml.bin │ │ ├── plain_via-poetry_1.1.xml.bin │ │ ├── plain_via-poetry_1.2.json.bin │ │ ├── plain_via-poetry_1.2.xml.bin │ │ ├── plain_via-poetry_1.3.json.bin │ │ ├── plain_via-poetry_1.3.xml.bin │ │ ├── plain_via-poetry_1.4.json.bin │ │ ├── plain_via-poetry_1.4.xml.bin │ │ ├── plain_via-poetry_1.5.json.bin │ │ ├── plain_via-poetry_1.5.xml.bin │ │ ├── plain_via-poetry_1.6.json.bin │ │ ├── plain_via-poetry_1.6.xml.bin │ │ ├── plain_via-uv_1.0.xml.bin │ │ ├── plain_via-uv_1.1.xml.bin │ │ ├── plain_via-uv_1.2.json.bin │ │ ├── plain_via-uv_1.2.xml.bin │ │ ├── plain_via-uv_1.3.json.bin │ │ ├── plain_via-uv_1.3.xml.bin │ │ ├── plain_via-uv_1.4.json.bin │ │ ├── plain_via-uv_1.4.xml.bin │ │ ├── plain_via-uv_1.5.json.bin │ │ ├── plain_via-uv_1.5.xml.bin │ │ ├── plain_via-uv_1.6.json.bin │ │ ├── plain_via-uv_1.6.xml.bin │ │ ├── plain_with-extras_1.0.xml.bin │ │ ├── plain_with-extras_1.1.xml.bin │ │ ├── plain_with-extras_1.2.json.bin │ │ ├── plain_with-extras_1.2.xml.bin │ │ ├── plain_with-extras_1.3.json.bin │ │ ├── plain_with-extras_1.3.xml.bin │ │ ├── plain_with-extras_1.4.json.bin │ │ ├── plain_with-extras_1.4.xml.bin │ │ ├── plain_with-extras_1.5.json.bin │ │ ├── plain_with-extras_1.5.xml.bin │ │ ├── plain_with-extras_1.6.json.bin │ │ ├── plain_with-extras_1.6.xml.bin │ │ ├── plain_with-license-file_1.0.xml.bin │ │ ├── plain_with-license-file_1.1.xml.bin │ │ ├── plain_with-license-file_1.2.json.bin │ │ ├── plain_with-license-file_1.2.xml.bin │ │ ├── plain_with-license-file_1.3.json.bin │ │ ├── plain_with-license-file_1.3.xml.bin │ │ ├── plain_with-license-file_1.4.json.bin │ │ ├── plain_with-license-file_1.4.xml.bin │ │ ├── plain_with-license-file_1.5.json.bin │ │ ├── plain_with-license-file_1.5.xml.bin │ │ ├── plain_with-license-file_1.6.json.bin │ │ ├── plain_with-license-file_1.6.xml.bin │ │ ├── plain_with-license-pep639_1.0.xml.bin │ │ ├── plain_with-license-pep639_1.1.xml.bin │ │ ├── plain_with-license-pep639_1.2.json.bin │ │ ├── plain_with-license-pep639_1.2.xml.bin │ │ ├── plain_with-license-pep639_1.3.json.bin │ │ ├── plain_with-license-pep639_1.3.xml.bin │ │ ├── plain_with-license-pep639_1.4.json.bin │ │ ├── plain_with-license-pep639_1.4.xml.bin │ │ ├── plain_with-license-pep639_1.5.json.bin │ │ ├── plain_with-license-pep639_1.5.xml.bin │ │ ├── plain_with-license-pep639_1.6.json.bin │ │ ├── plain_with-license-pep639_1.6.xml.bin │ │ ├── plain_with-license-text_1.0.xml.bin │ │ ├── plain_with-license-text_1.1.xml.bin │ │ ├── plain_with-license-text_1.2.json.bin │ │ ├── plain_with-license-text_1.2.xml.bin │ │ ├── plain_with-license-text_1.3.json.bin │ │ ├── plain_with-license-text_1.3.xml.bin │ │ ├── plain_with-license-text_1.4.json.bin │ │ ├── plain_with-license-text_1.4.xml.bin │ │ ├── plain_with-license-text_1.5.json.bin │ │ ├── plain_with-license-text_1.5.xml.bin │ │ ├── plain_with-license-text_1.6.json.bin │ │ ├── plain_with-license-text_1.6.xml.bin │ │ ├── plain_with-urls_1.0.xml.bin │ │ ├── plain_with-urls_1.1.xml.bin │ │ ├── plain_with-urls_1.2.json.bin │ │ ├── plain_with-urls_1.2.xml.bin │ │ ├── plain_with-urls_1.3.json.bin │ │ ├── plain_with-urls_1.3.xml.bin │ │ ├── plain_with-urls_1.4.json.bin │ │ ├── plain_with-urls_1.4.xml.bin │ │ ├── plain_with-urls_1.5.json.bin │ │ ├── plain_with-urls_1.5.xml.bin │ │ ├── plain_with-urls_1.6.json.bin │ │ ├── plain_with-urls_1.6.xml.bin │ │ ├── texts_with-license-pep639_1.0.xml.bin │ │ ├── texts_with-license-pep639_1.1.xml.bin │ │ ├── texts_with-license-pep639_1.2.json.bin │ │ ├── texts_with-license-pep639_1.2.xml.bin │ │ ├── texts_with-license-pep639_1.3.json.bin │ │ ├── texts_with-license-pep639_1.3.xml.bin │ │ ├── texts_with-license-pep639_1.4.json.bin │ │ ├── texts_with-license-pep639_1.4.xml.bin │ │ ├── texts_with-license-pep639_1.5.json.bin │ │ ├── texts_with-license-pep639_1.5.xml.bin │ │ ├── texts_with-license-pep639_1.6.json.bin │ │ └── texts_with-license-pep639_1.6.xml.bin │ │ ├── pipenv │ │ ├── plain_category-deps_1.0.xml.bin │ │ ├── plain_category-deps_1.1.xml.bin │ │ ├── plain_category-deps_1.2.json.bin │ │ ├── plain_category-deps_1.2.xml.bin │ │ ├── plain_category-deps_1.3.json.bin │ │ ├── plain_category-deps_1.3.xml.bin │ │ ├── plain_category-deps_1.4.json.bin │ │ ├── plain_category-deps_1.4.xml.bin │ │ ├── plain_category-deps_1.5.json.bin │ │ ├── plain_category-deps_1.5.xml.bin │ │ ├── plain_category-deps_1.6.json.bin │ │ ├── plain_category-deps_1.6.xml.bin │ │ ├── plain_default-and-dev_1.0.xml.bin │ │ ├── plain_default-and-dev_1.1.xml.bin │ │ ├── plain_default-and-dev_1.2.json.bin │ │ ├── plain_default-and-dev_1.2.xml.bin │ │ ├── plain_default-and-dev_1.3.json.bin │ │ ├── plain_default-and-dev_1.3.xml.bin │ │ ├── plain_default-and-dev_1.4.json.bin │ │ ├── plain_default-and-dev_1.4.xml.bin │ │ ├── plain_default-and-dev_1.5.json.bin │ │ ├── plain_default-and-dev_1.5.xml.bin │ │ ├── plain_default-and-dev_1.6.json.bin │ │ ├── plain_default-and-dev_1.6.xml.bin │ │ ├── plain_editable-self_1.0.xml.bin │ │ ├── plain_editable-self_1.1.xml.bin │ │ ├── plain_editable-self_1.2.json.bin │ │ ├── plain_editable-self_1.2.xml.bin │ │ ├── plain_editable-self_1.3.json.bin │ │ ├── plain_editable-self_1.3.xml.bin │ │ ├── plain_editable-self_1.4.json.bin │ │ ├── plain_editable-self_1.4.xml.bin │ │ ├── plain_editable-self_1.5.json.bin │ │ ├── plain_editable-self_1.5.xml.bin │ │ ├── plain_editable-self_1.6.json.bin │ │ ├── plain_editable-self_1.6.xml.bin │ │ ├── plain_local_1.0.xml.bin │ │ ├── plain_local_1.1.xml.bin │ │ ├── plain_local_1.2.json.bin │ │ ├── plain_local_1.2.xml.bin │ │ ├── plain_local_1.3.json.bin │ │ ├── plain_local_1.3.xml.bin │ │ ├── plain_local_1.4.json.bin │ │ ├── plain_local_1.4.xml.bin │ │ ├── plain_local_1.5.json.bin │ │ ├── plain_local_1.5.xml.bin │ │ ├── plain_local_1.6.json.bin │ │ ├── plain_local_1.6.xml.bin │ │ ├── plain_no-deps_1.0.xml.bin │ │ ├── plain_no-deps_1.1.xml.bin │ │ ├── plain_no-deps_1.2.json.bin │ │ ├── plain_no-deps_1.2.xml.bin │ │ ├── plain_no-deps_1.3.json.bin │ │ ├── plain_no-deps_1.3.xml.bin │ │ ├── plain_no-deps_1.4.json.bin │ │ ├── plain_no-deps_1.4.xml.bin │ │ ├── plain_no-deps_1.5.json.bin │ │ ├── plain_no-deps_1.5.xml.bin │ │ ├── plain_no-deps_1.6.json.bin │ │ ├── plain_no-deps_1.6.xml.bin │ │ ├── plain_normalize-packagename_1.0.xml.bin │ │ ├── plain_normalize-packagename_1.1.xml.bin │ │ ├── plain_normalize-packagename_1.2.json.bin │ │ ├── plain_normalize-packagename_1.2.xml.bin │ │ ├── plain_normalize-packagename_1.3.json.bin │ │ ├── plain_normalize-packagename_1.3.xml.bin │ │ ├── plain_normalize-packagename_1.4.json.bin │ │ ├── plain_normalize-packagename_1.4.xml.bin │ │ ├── plain_normalize-packagename_1.5.json.bin │ │ ├── plain_normalize-packagename_1.5.xml.bin │ │ ├── plain_normalize-packagename_1.6.json.bin │ │ ├── plain_normalize-packagename_1.6.xml.bin │ │ ├── plain_private-packages_1.0.xml.bin │ │ ├── plain_private-packages_1.1.xml.bin │ │ ├── plain_private-packages_1.2.json.bin │ │ ├── plain_private-packages_1.2.xml.bin │ │ ├── plain_private-packages_1.3.json.bin │ │ ├── plain_private-packages_1.3.xml.bin │ │ ├── plain_private-packages_1.4.json.bin │ │ ├── plain_private-packages_1.4.xml.bin │ │ ├── plain_private-packages_1.5.json.bin │ │ ├── plain_private-packages_1.5.xml.bin │ │ ├── plain_private-packages_1.6.json.bin │ │ ├── plain_private-packages_1.6.xml.bin │ │ ├── plain_with-extras_1.0.xml.bin │ │ ├── plain_with-extras_1.1.xml.bin │ │ ├── plain_with-extras_1.2.json.bin │ │ ├── plain_with-extras_1.2.xml.bin │ │ ├── plain_with-extras_1.3.json.bin │ │ ├── plain_with-extras_1.3.xml.bin │ │ ├── plain_with-extras_1.4.json.bin │ │ ├── plain_with-extras_1.4.xml.bin │ │ ├── plain_with-extras_1.5.json.bin │ │ ├── plain_with-extras_1.5.xml.bin │ │ ├── plain_with-extras_1.6.json.bin │ │ ├── plain_with-extras_1.6.xml.bin │ │ ├── plain_with-urls_1.0.xml.bin │ │ ├── plain_with-urls_1.1.xml.bin │ │ ├── plain_with-urls_1.2.json.bin │ │ ├── plain_with-urls_1.2.xml.bin │ │ ├── plain_with-urls_1.3.json.bin │ │ ├── plain_with-urls_1.3.xml.bin │ │ ├── plain_with-urls_1.4.json.bin │ │ ├── plain_with-urls_1.4.xml.bin │ │ ├── plain_with-urls_1.5.json.bin │ │ ├── plain_with-urls_1.5.xml.bin │ │ ├── plain_with-urls_1.6.json.bin │ │ ├── plain_with-urls_1.6.xml.bin │ │ ├── pypi-mirror_private-packages_1.0.xml.bin │ │ ├── pypi-mirror_private-packages_1.1.xml.bin │ │ ├── pypi-mirror_private-packages_1.2.json.bin │ │ ├── pypi-mirror_private-packages_1.2.xml.bin │ │ ├── pypi-mirror_private-packages_1.3.json.bin │ │ ├── pypi-mirror_private-packages_1.3.xml.bin │ │ ├── pypi-mirror_private-packages_1.4.json.bin │ │ ├── pypi-mirror_private-packages_1.4.xml.bin │ │ ├── pypi-mirror_private-packages_1.5.json.bin │ │ ├── pypi-mirror_private-packages_1.5.xml.bin │ │ ├── pypi-mirror_private-packages_1.6.json.bin │ │ ├── pypi-mirror_private-packages_1.6.xml.bin │ │ ├── some-categories_category-deps_1.0.xml.bin │ │ ├── some-categories_category-deps_1.1.xml.bin │ │ ├── some-categories_category-deps_1.2.json.bin │ │ ├── some-categories_category-deps_1.2.xml.bin │ │ ├── some-categories_category-deps_1.3.json.bin │ │ ├── some-categories_category-deps_1.3.xml.bin │ │ ├── some-categories_category-deps_1.4.json.bin │ │ ├── some-categories_category-deps_1.4.xml.bin │ │ ├── some-categories_category-deps_1.5.json.bin │ │ ├── some-categories_category-deps_1.5.xml.bin │ │ ├── some-categories_category-deps_1.6.json.bin │ │ ├── some-categories_category-deps_1.6.xml.bin │ │ ├── with-dev_default-and-dev_1.0.xml.bin │ │ ├── with-dev_default-and-dev_1.1.xml.bin │ │ ├── with-dev_default-and-dev_1.2.json.bin │ │ ├── with-dev_default-and-dev_1.2.xml.bin │ │ ├── with-dev_default-and-dev_1.3.json.bin │ │ ├── with-dev_default-and-dev_1.3.xml.bin │ │ ├── with-dev_default-and-dev_1.4.json.bin │ │ ├── with-dev_default-and-dev_1.4.xml.bin │ │ ├── with-dev_default-and-dev_1.5.json.bin │ │ ├── with-dev_default-and-dev_1.5.xml.bin │ │ ├── with-dev_default-and-dev_1.6.json.bin │ │ └── with-dev_default-and-dev_1.6.xml.bin │ │ ├── poetry │ │ ├── all-extras_with-extras_lock10_1.0.xml.bin │ │ ├── all-extras_with-extras_lock10_1.1.xml.bin │ │ ├── all-extras_with-extras_lock10_1.2.json.bin │ │ ├── all-extras_with-extras_lock10_1.2.xml.bin │ │ ├── all-extras_with-extras_lock10_1.3.json.bin │ │ ├── all-extras_with-extras_lock10_1.3.xml.bin │ │ ├── all-extras_with-extras_lock10_1.4.json.bin │ │ ├── all-extras_with-extras_lock10_1.4.xml.bin │ │ ├── all-extras_with-extras_lock10_1.5.json.bin │ │ ├── all-extras_with-extras_lock10_1.5.xml.bin │ │ ├── all-extras_with-extras_lock10_1.6.json.bin │ │ ├── all-extras_with-extras_lock10_1.6.xml.bin │ │ ├── all-extras_with-extras_lock11_1.0.xml.bin │ │ ├── all-extras_with-extras_lock11_1.1.xml.bin │ │ ├── all-extras_with-extras_lock11_1.2.json.bin │ │ ├── all-extras_with-extras_lock11_1.2.xml.bin │ │ ├── all-extras_with-extras_lock11_1.3.json.bin │ │ ├── all-extras_with-extras_lock11_1.3.xml.bin │ │ ├── all-extras_with-extras_lock11_1.4.json.bin │ │ ├── all-extras_with-extras_lock11_1.4.xml.bin │ │ ├── all-extras_with-extras_lock11_1.5.json.bin │ │ ├── all-extras_with-extras_lock11_1.5.xml.bin │ │ ├── all-extras_with-extras_lock11_1.6.json.bin │ │ ├── all-extras_with-extras_lock11_1.6.xml.bin │ │ ├── all-extras_with-extras_lock20_1.0.xml.bin │ │ ├── all-extras_with-extras_lock20_1.1.xml.bin │ │ ├── all-extras_with-extras_lock20_1.2.json.bin │ │ ├── all-extras_with-extras_lock20_1.2.xml.bin │ │ ├── all-extras_with-extras_lock20_1.3.json.bin │ │ ├── all-extras_with-extras_lock20_1.3.xml.bin │ │ ├── all-extras_with-extras_lock20_1.4.json.bin │ │ ├── all-extras_with-extras_lock20_1.4.xml.bin │ │ ├── all-extras_with-extras_lock20_1.5.json.bin │ │ ├── all-extras_with-extras_lock20_1.5.xml.bin │ │ ├── all-extras_with-extras_lock20_1.6.json.bin │ │ ├── all-extras_with-extras_lock20_1.6.xml.bin │ │ ├── all-extras_with-extras_lock21_1.0.xml.bin │ │ ├── all-extras_with-extras_lock21_1.1.xml.bin │ │ ├── all-extras_with-extras_lock21_1.2.json.bin │ │ ├── all-extras_with-extras_lock21_1.2.xml.bin │ │ ├── all-extras_with-extras_lock21_1.3.json.bin │ │ ├── all-extras_with-extras_lock21_1.3.xml.bin │ │ ├── all-extras_with-extras_lock21_1.4.json.bin │ │ ├── all-extras_with-extras_lock21_1.4.xml.bin │ │ ├── all-extras_with-extras_lock21_1.5.json.bin │ │ ├── all-extras_with-extras_lock21_1.5.xml.bin │ │ ├── all-extras_with-extras_lock21_1.6.json.bin │ │ ├── all-extras_with-extras_lock21_1.6.xml.bin │ │ ├── no-dev_group-deps_lock11_1.0.xml.bin │ │ ├── no-dev_group-deps_lock11_1.1.xml.bin │ │ ├── no-dev_group-deps_lock11_1.2.json.bin │ │ ├── no-dev_group-deps_lock11_1.2.xml.bin │ │ ├── no-dev_group-deps_lock11_1.3.json.bin │ │ ├── no-dev_group-deps_lock11_1.3.xml.bin │ │ ├── no-dev_group-deps_lock11_1.4.json.bin │ │ ├── no-dev_group-deps_lock11_1.4.xml.bin │ │ ├── no-dev_group-deps_lock11_1.5.json.bin │ │ ├── no-dev_group-deps_lock11_1.5.xml.bin │ │ ├── no-dev_group-deps_lock11_1.6.json.bin │ │ ├── no-dev_group-deps_lock11_1.6.xml.bin │ │ ├── no-dev_group-deps_lock20_1.0.xml.bin │ │ ├── no-dev_group-deps_lock20_1.1.xml.bin │ │ ├── no-dev_group-deps_lock20_1.2.json.bin │ │ ├── no-dev_group-deps_lock20_1.2.xml.bin │ │ ├── no-dev_group-deps_lock20_1.3.json.bin │ │ ├── no-dev_group-deps_lock20_1.3.xml.bin │ │ ├── no-dev_group-deps_lock20_1.4.json.bin │ │ ├── no-dev_group-deps_lock20_1.4.xml.bin │ │ ├── no-dev_group-deps_lock20_1.5.json.bin │ │ ├── no-dev_group-deps_lock20_1.5.xml.bin │ │ ├── no-dev_group-deps_lock20_1.6.json.bin │ │ ├── no-dev_group-deps_lock20_1.6.xml.bin │ │ ├── no-dev_group-deps_lock21_1.0.xml.bin │ │ ├── no-dev_group-deps_lock21_1.1.xml.bin │ │ ├── no-dev_group-deps_lock21_1.2.json.bin │ │ ├── no-dev_group-deps_lock21_1.2.xml.bin │ │ ├── no-dev_group-deps_lock21_1.3.json.bin │ │ ├── no-dev_group-deps_lock21_1.3.xml.bin │ │ ├── no-dev_group-deps_lock21_1.4.json.bin │ │ ├── no-dev_group-deps_lock21_1.4.xml.bin │ │ ├── no-dev_group-deps_lock21_1.5.json.bin │ │ ├── no-dev_group-deps_lock21_1.5.xml.bin │ │ ├── no-dev_group-deps_lock21_1.6.json.bin │ │ ├── no-dev_group-deps_lock21_1.6.xml.bin │ │ ├── no-dev_main-and-dev_lock10_1.0.xml.bin │ │ ├── no-dev_main-and-dev_lock10_1.1.xml.bin │ │ ├── no-dev_main-and-dev_lock10_1.2.json.bin │ │ ├── no-dev_main-and-dev_lock10_1.2.xml.bin │ │ ├── no-dev_main-and-dev_lock10_1.3.json.bin │ │ ├── no-dev_main-and-dev_lock10_1.3.xml.bin │ │ ├── no-dev_main-and-dev_lock10_1.4.json.bin │ │ ├── no-dev_main-and-dev_lock10_1.4.xml.bin │ │ ├── no-dev_main-and-dev_lock10_1.5.json.bin │ │ ├── no-dev_main-and-dev_lock10_1.5.xml.bin │ │ ├── no-dev_main-and-dev_lock10_1.6.json.bin │ │ ├── no-dev_main-and-dev_lock10_1.6.xml.bin │ │ ├── no-dev_main-and-dev_lock11_1.0.xml.bin │ │ ├── no-dev_main-and-dev_lock11_1.1.xml.bin │ │ ├── no-dev_main-and-dev_lock11_1.2.json.bin │ │ ├── no-dev_main-and-dev_lock11_1.2.xml.bin │ │ ├── no-dev_main-and-dev_lock11_1.3.json.bin │ │ ├── no-dev_main-and-dev_lock11_1.3.xml.bin │ │ ├── no-dev_main-and-dev_lock11_1.4.json.bin │ │ ├── no-dev_main-and-dev_lock11_1.4.xml.bin │ │ ├── no-dev_main-and-dev_lock11_1.5.json.bin │ │ ├── no-dev_main-and-dev_lock11_1.5.xml.bin │ │ ├── no-dev_main-and-dev_lock11_1.6.json.bin │ │ ├── no-dev_main-and-dev_lock11_1.6.xml.bin │ │ ├── no-dev_main-and-dev_lock20_1.0.xml.bin │ │ ├── no-dev_main-and-dev_lock20_1.1.xml.bin │ │ ├── no-dev_main-and-dev_lock20_1.2.json.bin │ │ ├── no-dev_main-and-dev_lock20_1.2.xml.bin │ │ ├── no-dev_main-and-dev_lock20_1.3.json.bin │ │ ├── no-dev_main-and-dev_lock20_1.3.xml.bin │ │ ├── no-dev_main-and-dev_lock20_1.4.json.bin │ │ ├── no-dev_main-and-dev_lock20_1.4.xml.bin │ │ ├── no-dev_main-and-dev_lock20_1.5.json.bin │ │ ├── no-dev_main-and-dev_lock20_1.5.xml.bin │ │ ├── no-dev_main-and-dev_lock20_1.6.json.bin │ │ ├── no-dev_main-and-dev_lock20_1.6.xml.bin │ │ ├── no-dev_main-and-dev_lock21_1.0.xml.bin │ │ ├── no-dev_main-and-dev_lock21_1.1.xml.bin │ │ ├── no-dev_main-and-dev_lock21_1.2.json.bin │ │ ├── no-dev_main-and-dev_lock21_1.2.xml.bin │ │ ├── no-dev_main-and-dev_lock21_1.3.json.bin │ │ ├── no-dev_main-and-dev_lock21_1.3.xml.bin │ │ ├── no-dev_main-and-dev_lock21_1.4.json.bin │ │ ├── no-dev_main-and-dev_lock21_1.4.xml.bin │ │ ├── no-dev_main-and-dev_lock21_1.5.json.bin │ │ ├── no-dev_main-and-dev_lock21_1.5.xml.bin │ │ ├── no-dev_main-and-dev_lock21_1.6.json.bin │ │ ├── no-dev_main-and-dev_lock21_1.6.xml.bin │ │ ├── only-groups_group-deps_lock11_1.0.xml.bin │ │ ├── only-groups_group-deps_lock11_1.1.xml.bin │ │ ├── only-groups_group-deps_lock11_1.2.json.bin │ │ ├── only-groups_group-deps_lock11_1.2.xml.bin │ │ ├── only-groups_group-deps_lock11_1.3.json.bin │ │ ├── only-groups_group-deps_lock11_1.3.xml.bin │ │ ├── only-groups_group-deps_lock11_1.4.json.bin │ │ ├── only-groups_group-deps_lock11_1.4.xml.bin │ │ ├── only-groups_group-deps_lock11_1.5.json.bin │ │ ├── only-groups_group-deps_lock11_1.5.xml.bin │ │ ├── only-groups_group-deps_lock11_1.6.json.bin │ │ ├── only-groups_group-deps_lock11_1.6.xml.bin │ │ ├── only-groups_group-deps_lock20_1.0.xml.bin │ │ ├── only-groups_group-deps_lock20_1.1.xml.bin │ │ ├── only-groups_group-deps_lock20_1.2.json.bin │ │ ├── only-groups_group-deps_lock20_1.2.xml.bin │ │ ├── only-groups_group-deps_lock20_1.3.json.bin │ │ ├── only-groups_group-deps_lock20_1.3.xml.bin │ │ ├── only-groups_group-deps_lock20_1.4.json.bin │ │ ├── only-groups_group-deps_lock20_1.4.xml.bin │ │ ├── only-groups_group-deps_lock20_1.5.json.bin │ │ ├── only-groups_group-deps_lock20_1.5.xml.bin │ │ ├── only-groups_group-deps_lock20_1.6.json.bin │ │ ├── only-groups_group-deps_lock20_1.6.xml.bin │ │ ├── only-groups_group-deps_lock21_1.0.xml.bin │ │ ├── only-groups_group-deps_lock21_1.1.xml.bin │ │ ├── only-groups_group-deps_lock21_1.2.json.bin │ │ ├── only-groups_group-deps_lock21_1.2.xml.bin │ │ ├── only-groups_group-deps_lock21_1.3.json.bin │ │ ├── only-groups_group-deps_lock21_1.3.xml.bin │ │ ├── only-groups_group-deps_lock21_1.4.json.bin │ │ ├── only-groups_group-deps_lock21_1.4.xml.bin │ │ ├── only-groups_group-deps_lock21_1.5.json.bin │ │ ├── only-groups_group-deps_lock21_1.5.xml.bin │ │ ├── only-groups_group-deps_lock21_1.6.json.bin │ │ ├── only-groups_group-deps_lock21_1.6.xml.bin │ │ ├── plain_group-deps_lock11_1.0.xml.bin │ │ ├── plain_group-deps_lock11_1.1.xml.bin │ │ ├── plain_group-deps_lock11_1.2.json.bin │ │ ├── plain_group-deps_lock11_1.2.xml.bin │ │ ├── plain_group-deps_lock11_1.3.json.bin │ │ ├── plain_group-deps_lock11_1.3.xml.bin │ │ ├── plain_group-deps_lock11_1.4.json.bin │ │ ├── plain_group-deps_lock11_1.4.xml.bin │ │ ├── plain_group-deps_lock11_1.5.json.bin │ │ ├── plain_group-deps_lock11_1.5.xml.bin │ │ ├── plain_group-deps_lock11_1.6.json.bin │ │ ├── plain_group-deps_lock11_1.6.xml.bin │ │ ├── plain_group-deps_lock20_1.0.xml.bin │ │ ├── plain_group-deps_lock20_1.1.xml.bin │ │ ├── plain_group-deps_lock20_1.2.json.bin │ │ ├── plain_group-deps_lock20_1.2.xml.bin │ │ ├── plain_group-deps_lock20_1.3.json.bin │ │ ├── plain_group-deps_lock20_1.3.xml.bin │ │ ├── plain_group-deps_lock20_1.4.json.bin │ │ ├── plain_group-deps_lock20_1.4.xml.bin │ │ ├── plain_group-deps_lock20_1.5.json.bin │ │ ├── plain_group-deps_lock20_1.5.xml.bin │ │ ├── plain_group-deps_lock20_1.6.json.bin │ │ ├── plain_group-deps_lock20_1.6.xml.bin │ │ ├── plain_group-deps_lock21_1.0.xml.bin │ │ ├── plain_group-deps_lock21_1.1.xml.bin │ │ ├── plain_group-deps_lock21_1.2.json.bin │ │ ├── plain_group-deps_lock21_1.2.xml.bin │ │ ├── plain_group-deps_lock21_1.3.json.bin │ │ ├── plain_group-deps_lock21_1.3.xml.bin │ │ ├── plain_group-deps_lock21_1.4.json.bin │ │ ├── plain_group-deps_lock21_1.4.xml.bin │ │ ├── plain_group-deps_lock21_1.5.json.bin │ │ ├── plain_group-deps_lock21_1.5.xml.bin │ │ ├── plain_group-deps_lock21_1.6.json.bin │ │ ├── plain_group-deps_lock21_1.6.xml.bin │ │ ├── plain_local_lock10_1.0.xml.bin │ │ ├── plain_local_lock10_1.1.xml.bin │ │ ├── plain_local_lock10_1.2.json.bin │ │ ├── plain_local_lock10_1.2.xml.bin │ │ ├── plain_local_lock10_1.3.json.bin │ │ ├── plain_local_lock10_1.3.xml.bin │ │ ├── plain_local_lock10_1.4.json.bin │ │ ├── plain_local_lock10_1.4.xml.bin │ │ ├── plain_local_lock10_1.5.json.bin │ │ ├── plain_local_lock10_1.5.xml.bin │ │ ├── plain_local_lock10_1.6.json.bin │ │ ├── plain_local_lock10_1.6.xml.bin │ │ ├── plain_local_lock11_1.0.xml.bin │ │ ├── plain_local_lock11_1.1.xml.bin │ │ ├── plain_local_lock11_1.2.json.bin │ │ ├── plain_local_lock11_1.2.xml.bin │ │ ├── plain_local_lock11_1.3.json.bin │ │ ├── plain_local_lock11_1.3.xml.bin │ │ ├── plain_local_lock11_1.4.json.bin │ │ ├── plain_local_lock11_1.4.xml.bin │ │ ├── plain_local_lock11_1.5.json.bin │ │ ├── plain_local_lock11_1.5.xml.bin │ │ ├── plain_local_lock11_1.6.json.bin │ │ ├── plain_local_lock11_1.6.xml.bin │ │ ├── plain_local_lock20_1.0.xml.bin │ │ ├── plain_local_lock20_1.1.xml.bin │ │ ├── plain_local_lock20_1.2.json.bin │ │ ├── plain_local_lock20_1.2.xml.bin │ │ ├── plain_local_lock20_1.3.json.bin │ │ ├── plain_local_lock20_1.3.xml.bin │ │ ├── plain_local_lock20_1.4.json.bin │ │ ├── plain_local_lock20_1.4.xml.bin │ │ ├── plain_local_lock20_1.5.json.bin │ │ ├── plain_local_lock20_1.5.xml.bin │ │ ├── plain_local_lock20_1.6.json.bin │ │ ├── plain_local_lock20_1.6.xml.bin │ │ ├── plain_local_lock21_1.0.xml.bin │ │ ├── plain_local_lock21_1.1.xml.bin │ │ ├── plain_local_lock21_1.2.json.bin │ │ ├── plain_local_lock21_1.2.xml.bin │ │ ├── plain_local_lock21_1.3.json.bin │ │ ├── plain_local_lock21_1.3.xml.bin │ │ ├── plain_local_lock21_1.4.json.bin │ │ ├── plain_local_lock21_1.4.xml.bin │ │ ├── plain_local_lock21_1.5.json.bin │ │ ├── plain_local_lock21_1.5.xml.bin │ │ ├── plain_local_lock21_1.6.json.bin │ │ ├── plain_local_lock21_1.6.xml.bin │ │ ├── plain_main-and-dev_lock10_1.0.xml.bin │ │ ├── plain_main-and-dev_lock10_1.1.xml.bin │ │ ├── plain_main-and-dev_lock10_1.2.json.bin │ │ ├── plain_main-and-dev_lock10_1.2.xml.bin │ │ ├── plain_main-and-dev_lock10_1.3.json.bin │ │ ├── plain_main-and-dev_lock10_1.3.xml.bin │ │ ├── plain_main-and-dev_lock10_1.4.json.bin │ │ ├── plain_main-and-dev_lock10_1.4.xml.bin │ │ ├── plain_main-and-dev_lock10_1.5.json.bin │ │ ├── plain_main-and-dev_lock10_1.5.xml.bin │ │ ├── plain_main-and-dev_lock10_1.6.json.bin │ │ ├── plain_main-and-dev_lock10_1.6.xml.bin │ │ ├── plain_main-and-dev_lock11_1.0.xml.bin │ │ ├── plain_main-and-dev_lock11_1.1.xml.bin │ │ ├── plain_main-and-dev_lock11_1.2.json.bin │ │ ├── plain_main-and-dev_lock11_1.2.xml.bin │ │ ├── plain_main-and-dev_lock11_1.3.json.bin │ │ ├── plain_main-and-dev_lock11_1.3.xml.bin │ │ ├── plain_main-and-dev_lock11_1.4.json.bin │ │ ├── plain_main-and-dev_lock11_1.4.xml.bin │ │ ├── plain_main-and-dev_lock11_1.5.json.bin │ │ ├── plain_main-and-dev_lock11_1.5.xml.bin │ │ ├── plain_main-and-dev_lock11_1.6.json.bin │ │ ├── plain_main-and-dev_lock11_1.6.xml.bin │ │ ├── plain_main-and-dev_lock20_1.0.xml.bin │ │ ├── plain_main-and-dev_lock20_1.1.xml.bin │ │ ├── plain_main-and-dev_lock20_1.2.json.bin │ │ ├── plain_main-and-dev_lock20_1.2.xml.bin │ │ ├── plain_main-and-dev_lock20_1.3.json.bin │ │ ├── plain_main-and-dev_lock20_1.3.xml.bin │ │ ├── plain_main-and-dev_lock20_1.4.json.bin │ │ ├── plain_main-and-dev_lock20_1.4.xml.bin │ │ ├── plain_main-and-dev_lock20_1.5.json.bin │ │ ├── plain_main-and-dev_lock20_1.5.xml.bin │ │ ├── plain_main-and-dev_lock20_1.6.json.bin │ │ ├── plain_main-and-dev_lock20_1.6.xml.bin │ │ ├── plain_main-and-dev_lock21_1.0.xml.bin │ │ ├── plain_main-and-dev_lock21_1.1.xml.bin │ │ ├── plain_main-and-dev_lock21_1.2.json.bin │ │ ├── plain_main-and-dev_lock21_1.2.xml.bin │ │ ├── plain_main-and-dev_lock21_1.3.json.bin │ │ ├── plain_main-and-dev_lock21_1.3.xml.bin │ │ ├── plain_main-and-dev_lock21_1.4.json.bin │ │ ├── plain_main-and-dev_lock21_1.4.xml.bin │ │ ├── plain_main-and-dev_lock21_1.5.json.bin │ │ ├── plain_main-and-dev_lock21_1.5.xml.bin │ │ ├── plain_main-and-dev_lock21_1.6.json.bin │ │ ├── plain_main-and-dev_lock21_1.6.xml.bin │ │ ├── plain_multi-constraint-deps_lock11_1.0.xml.bin │ │ ├── plain_multi-constraint-deps_lock11_1.1.xml.bin │ │ ├── plain_multi-constraint-deps_lock11_1.2.json.bin │ │ ├── plain_multi-constraint-deps_lock11_1.2.xml.bin │ │ ├── plain_multi-constraint-deps_lock11_1.3.json.bin │ │ ├── plain_multi-constraint-deps_lock11_1.3.xml.bin │ │ ├── plain_multi-constraint-deps_lock11_1.4.json.bin │ │ ├── plain_multi-constraint-deps_lock11_1.4.xml.bin │ │ ├── plain_multi-constraint-deps_lock11_1.5.json.bin │ │ ├── plain_multi-constraint-deps_lock11_1.5.xml.bin │ │ ├── plain_multi-constraint-deps_lock11_1.6.json.bin │ │ ├── plain_multi-constraint-deps_lock11_1.6.xml.bin │ │ ├── plain_multi-constraint-deps_lock20_1.0.xml.bin │ │ ├── plain_multi-constraint-deps_lock20_1.1.xml.bin │ │ ├── plain_multi-constraint-deps_lock20_1.2.json.bin │ │ ├── plain_multi-constraint-deps_lock20_1.2.xml.bin │ │ ├── plain_multi-constraint-deps_lock20_1.3.json.bin │ │ ├── plain_multi-constraint-deps_lock20_1.3.xml.bin │ │ ├── plain_multi-constraint-deps_lock20_1.4.json.bin │ │ ├── plain_multi-constraint-deps_lock20_1.4.xml.bin │ │ ├── plain_multi-constraint-deps_lock20_1.5.json.bin │ │ ├── plain_multi-constraint-deps_lock20_1.5.xml.bin │ │ ├── plain_multi-constraint-deps_lock20_1.6.json.bin │ │ ├── plain_multi-constraint-deps_lock20_1.6.xml.bin │ │ ├── plain_multi-constraint-deps_lock21_1.0.xml.bin │ │ ├── plain_multi-constraint-deps_lock21_1.1.xml.bin │ │ ├── plain_multi-constraint-deps_lock21_1.2.json.bin │ │ ├── plain_multi-constraint-deps_lock21_1.2.xml.bin │ │ ├── plain_multi-constraint-deps_lock21_1.3.json.bin │ │ ├── plain_multi-constraint-deps_lock21_1.3.xml.bin │ │ ├── plain_multi-constraint-deps_lock21_1.4.json.bin │ │ ├── plain_multi-constraint-deps_lock21_1.4.xml.bin │ │ ├── plain_multi-constraint-deps_lock21_1.5.json.bin │ │ ├── plain_multi-constraint-deps_lock21_1.5.xml.bin │ │ ├── plain_multi-constraint-deps_lock21_1.6.json.bin │ │ ├── plain_multi-constraint-deps_lock21_1.6.xml.bin │ │ ├── plain_no-deps_lock20_1.0.xml.bin │ │ ├── plain_no-deps_lock20_1.1.xml.bin │ │ ├── plain_no-deps_lock20_1.2.json.bin │ │ ├── plain_no-deps_lock20_1.2.xml.bin │ │ ├── plain_no-deps_lock20_1.3.json.bin │ │ ├── plain_no-deps_lock20_1.3.xml.bin │ │ ├── plain_no-deps_lock20_1.4.json.bin │ │ ├── plain_no-deps_lock20_1.4.xml.bin │ │ ├── plain_no-deps_lock20_1.5.json.bin │ │ ├── plain_no-deps_lock20_1.5.xml.bin │ │ ├── plain_no-deps_lock20_1.6.json.bin │ │ ├── plain_no-deps_lock20_1.6.xml.bin │ │ ├── plain_no-deps_lock21_1.0.xml.bin │ │ ├── plain_no-deps_lock21_1.1.xml.bin │ │ ├── plain_no-deps_lock21_1.2.json.bin │ │ ├── plain_no-deps_lock21_1.2.xml.bin │ │ ├── plain_no-deps_lock21_1.3.json.bin │ │ ├── plain_no-deps_lock21_1.3.xml.bin │ │ ├── plain_no-deps_lock21_1.4.json.bin │ │ ├── plain_no-deps_lock21_1.4.xml.bin │ │ ├── plain_no-deps_lock21_1.5.json.bin │ │ ├── plain_no-deps_lock21_1.5.xml.bin │ │ ├── plain_no-deps_lock21_1.6.json.bin │ │ ├── plain_no-deps_lock21_1.6.xml.bin │ │ ├── plain_normalize-packagename_lock10_1.0.xml.bin │ │ ├── plain_normalize-packagename_lock10_1.1.xml.bin │ │ ├── plain_normalize-packagename_lock10_1.2.json.bin │ │ ├── plain_normalize-packagename_lock10_1.2.xml.bin │ │ ├── plain_normalize-packagename_lock10_1.3.json.bin │ │ ├── plain_normalize-packagename_lock10_1.3.xml.bin │ │ ├── plain_normalize-packagename_lock10_1.4.json.bin │ │ ├── plain_normalize-packagename_lock10_1.4.xml.bin │ │ ├── plain_normalize-packagename_lock10_1.5.json.bin │ │ ├── plain_normalize-packagename_lock10_1.5.xml.bin │ │ ├── plain_normalize-packagename_lock10_1.6.json.bin │ │ ├── plain_normalize-packagename_lock10_1.6.xml.bin │ │ ├── plain_normalize-packagename_lock20_1.0.xml.bin │ │ ├── plain_normalize-packagename_lock20_1.1.xml.bin │ │ ├── plain_normalize-packagename_lock20_1.2.json.bin │ │ ├── plain_normalize-packagename_lock20_1.2.xml.bin │ │ ├── plain_normalize-packagename_lock20_1.3.json.bin │ │ ├── plain_normalize-packagename_lock20_1.3.xml.bin │ │ ├── plain_normalize-packagename_lock20_1.4.json.bin │ │ ├── plain_normalize-packagename_lock20_1.4.xml.bin │ │ ├── plain_normalize-packagename_lock20_1.5.json.bin │ │ ├── plain_normalize-packagename_lock20_1.5.xml.bin │ │ ├── plain_normalize-packagename_lock20_1.6.json.bin │ │ ├── plain_normalize-packagename_lock20_1.6.xml.bin │ │ ├── plain_normalize-packagename_lock21_1.0.xml.bin │ │ ├── plain_normalize-packagename_lock21_1.1.xml.bin │ │ ├── plain_normalize-packagename_lock21_1.2.json.bin │ │ ├── plain_normalize-packagename_lock21_1.2.xml.bin │ │ ├── plain_normalize-packagename_lock21_1.3.json.bin │ │ ├── plain_normalize-packagename_lock21_1.3.xml.bin │ │ ├── plain_normalize-packagename_lock21_1.4.json.bin │ │ ├── plain_normalize-packagename_lock21_1.4.xml.bin │ │ ├── plain_normalize-packagename_lock21_1.5.json.bin │ │ ├── plain_normalize-packagename_lock21_1.5.xml.bin │ │ ├── plain_normalize-packagename_lock21_1.6.json.bin │ │ ├── plain_normalize-packagename_lock21_1.6.xml.bin │ │ ├── plain_private-packges_lock10_1.0.xml.bin │ │ ├── plain_private-packges_lock10_1.1.xml.bin │ │ ├── plain_private-packges_lock10_1.2.json.bin │ │ ├── plain_private-packges_lock10_1.2.xml.bin │ │ ├── plain_private-packges_lock10_1.3.json.bin │ │ ├── plain_private-packges_lock10_1.3.xml.bin │ │ ├── plain_private-packges_lock10_1.4.json.bin │ │ ├── plain_private-packges_lock10_1.4.xml.bin │ │ ├── plain_private-packges_lock10_1.5.json.bin │ │ ├── plain_private-packges_lock10_1.5.xml.bin │ │ ├── plain_private-packges_lock10_1.6.json.bin │ │ ├── plain_private-packges_lock10_1.6.xml.bin │ │ ├── plain_private-packges_lock11_1.0.xml.bin │ │ ├── plain_private-packges_lock11_1.1.xml.bin │ │ ├── plain_private-packges_lock11_1.2.json.bin │ │ ├── plain_private-packges_lock11_1.2.xml.bin │ │ ├── plain_private-packges_lock11_1.3.json.bin │ │ ├── plain_private-packges_lock11_1.3.xml.bin │ │ ├── plain_private-packges_lock11_1.4.json.bin │ │ ├── plain_private-packges_lock11_1.4.xml.bin │ │ ├── plain_private-packges_lock11_1.5.json.bin │ │ ├── plain_private-packges_lock11_1.5.xml.bin │ │ ├── plain_private-packges_lock11_1.6.json.bin │ │ ├── plain_private-packges_lock11_1.6.xml.bin │ │ ├── plain_private-packges_lock20_1.0.xml.bin │ │ ├── plain_private-packges_lock20_1.1.xml.bin │ │ ├── plain_private-packges_lock20_1.2.json.bin │ │ ├── plain_private-packges_lock20_1.2.xml.bin │ │ ├── plain_private-packges_lock20_1.3.json.bin │ │ ├── plain_private-packges_lock20_1.3.xml.bin │ │ ├── plain_private-packges_lock20_1.4.json.bin │ │ ├── plain_private-packges_lock20_1.4.xml.bin │ │ ├── plain_private-packges_lock20_1.5.json.bin │ │ ├── plain_private-packges_lock20_1.5.xml.bin │ │ ├── plain_private-packges_lock20_1.6.json.bin │ │ ├── plain_private-packges_lock20_1.6.xml.bin │ │ ├── plain_private-packges_v2_lock21_1.0.xml.bin │ │ ├── plain_private-packges_v2_lock21_1.1.xml.bin │ │ ├── plain_private-packges_v2_lock21_1.2.json.bin │ │ ├── plain_private-packges_v2_lock21_1.2.xml.bin │ │ ├── plain_private-packges_v2_lock21_1.3.json.bin │ │ ├── plain_private-packges_v2_lock21_1.3.xml.bin │ │ ├── plain_private-packges_v2_lock21_1.4.json.bin │ │ ├── plain_private-packges_v2_lock21_1.4.xml.bin │ │ ├── plain_private-packges_v2_lock21_1.5.json.bin │ │ ├── plain_private-packges_v2_lock21_1.5.xml.bin │ │ ├── plain_private-packges_v2_lock21_1.6.json.bin │ │ ├── plain_private-packges_v2_lock21_1.6.xml.bin │ │ ├── plain_regression-issue611_lock20_1.0.xml.bin │ │ ├── plain_regression-issue611_lock20_1.1.xml.bin │ │ ├── plain_regression-issue611_lock20_1.2.json.bin │ │ ├── plain_regression-issue611_lock20_1.2.xml.bin │ │ ├── plain_regression-issue611_lock20_1.3.json.bin │ │ ├── plain_regression-issue611_lock20_1.3.xml.bin │ │ ├── plain_regression-issue611_lock20_1.4.json.bin │ │ ├── plain_regression-issue611_lock20_1.4.xml.bin │ │ ├── plain_regression-issue611_lock20_1.5.json.bin │ │ ├── plain_regression-issue611_lock20_1.5.xml.bin │ │ ├── plain_regression-issue611_lock20_1.6.json.bin │ │ ├── plain_regression-issue611_lock20_1.6.xml.bin │ │ ├── plain_regression-issue611_lock21_1.0.xml.bin │ │ ├── plain_regression-issue611_lock21_1.1.xml.bin │ │ ├── plain_regression-issue611_lock21_1.2.json.bin │ │ ├── plain_regression-issue611_lock21_1.2.xml.bin │ │ ├── plain_regression-issue611_lock21_1.3.json.bin │ │ ├── plain_regression-issue611_lock21_1.3.xml.bin │ │ ├── plain_regression-issue611_lock21_1.4.json.bin │ │ ├── plain_regression-issue611_lock21_1.4.xml.bin │ │ ├── plain_regression-issue611_lock21_1.5.json.bin │ │ ├── plain_regression-issue611_lock21_1.5.xml.bin │ │ ├── plain_regression-issue611_lock21_1.6.json.bin │ │ ├── plain_regression-issue611_lock21_1.6.xml.bin │ │ ├── plain_regression-issue702_lock10_1.0.xml.bin │ │ ├── plain_regression-issue702_lock10_1.1.xml.bin │ │ ├── plain_regression-issue702_lock10_1.2.json.bin │ │ ├── plain_regression-issue702_lock10_1.2.xml.bin │ │ ├── plain_regression-issue702_lock10_1.3.json.bin │ │ ├── plain_regression-issue702_lock10_1.3.xml.bin │ │ ├── plain_regression-issue702_lock10_1.4.json.bin │ │ ├── plain_regression-issue702_lock10_1.4.xml.bin │ │ ├── plain_regression-issue702_lock10_1.5.json.bin │ │ ├── plain_regression-issue702_lock10_1.5.xml.bin │ │ ├── plain_regression-issue702_lock10_1.6.json.bin │ │ ├── plain_regression-issue702_lock10_1.6.xml.bin │ │ ├── plain_regression-issue702_lock11_1.0.xml.bin │ │ ├── plain_regression-issue702_lock11_1.1.xml.bin │ │ ├── plain_regression-issue702_lock11_1.2.json.bin │ │ ├── plain_regression-issue702_lock11_1.2.xml.bin │ │ ├── plain_regression-issue702_lock11_1.3.json.bin │ │ ├── plain_regression-issue702_lock11_1.3.xml.bin │ │ ├── plain_regression-issue702_lock11_1.4.json.bin │ │ ├── plain_regression-issue702_lock11_1.4.xml.bin │ │ ├── plain_regression-issue702_lock11_1.5.json.bin │ │ ├── plain_regression-issue702_lock11_1.5.xml.bin │ │ ├── plain_regression-issue702_lock11_1.6.json.bin │ │ ├── plain_regression-issue702_lock11_1.6.xml.bin │ │ ├── plain_regression-issue702_lock20_1.0.xml.bin │ │ ├── plain_regression-issue702_lock20_1.1.xml.bin │ │ ├── plain_regression-issue702_lock20_1.2.json.bin │ │ ├── plain_regression-issue702_lock20_1.2.xml.bin │ │ ├── plain_regression-issue702_lock20_1.3.json.bin │ │ ├── plain_regression-issue702_lock20_1.3.xml.bin │ │ ├── plain_regression-issue702_lock20_1.4.json.bin │ │ ├── plain_regression-issue702_lock20_1.4.xml.bin │ │ ├── plain_regression-issue702_lock20_1.5.json.bin │ │ ├── plain_regression-issue702_lock20_1.5.xml.bin │ │ ├── plain_regression-issue702_lock20_1.6.json.bin │ │ ├── plain_regression-issue702_lock20_1.6.xml.bin │ │ ├── plain_regression-issue702_lock21_1.0.xml.bin │ │ ├── plain_regression-issue702_lock21_1.1.xml.bin │ │ ├── plain_regression-issue702_lock21_1.2.json.bin │ │ ├── plain_regression-issue702_lock21_1.2.xml.bin │ │ ├── plain_regression-issue702_lock21_1.3.json.bin │ │ ├── plain_regression-issue702_lock21_1.3.xml.bin │ │ ├── plain_regression-issue702_lock21_1.4.json.bin │ │ ├── plain_regression-issue702_lock21_1.4.xml.bin │ │ ├── plain_regression-issue702_lock21_1.5.json.bin │ │ ├── plain_regression-issue702_lock21_1.5.xml.bin │ │ ├── plain_regression-issue702_lock21_1.6.json.bin │ │ ├── plain_regression-issue702_lock21_1.6.xml.bin │ │ ├── plain_regression-issue727_lock20_1.0.xml.bin │ │ ├── plain_regression-issue727_lock20_1.1.xml.bin │ │ ├── plain_regression-issue727_lock20_1.2.json.bin │ │ ├── plain_regression-issue727_lock20_1.2.xml.bin │ │ ├── plain_regression-issue727_lock20_1.3.json.bin │ │ ├── plain_regression-issue727_lock20_1.3.xml.bin │ │ ├── plain_regression-issue727_lock20_1.4.json.bin │ │ ├── plain_regression-issue727_lock20_1.4.xml.bin │ │ ├── plain_regression-issue727_lock20_1.5.json.bin │ │ ├── plain_regression-issue727_lock20_1.5.xml.bin │ │ ├── plain_regression-issue727_lock20_1.6.json.bin │ │ ├── plain_regression-issue727_lock20_1.6.xml.bin │ │ ├── plain_regression-issue727_lock21_1.0.xml.bin │ │ ├── plain_regression-issue727_lock21_1.1.xml.bin │ │ ├── plain_regression-issue727_lock21_1.2.json.bin │ │ ├── plain_regression-issue727_lock21_1.2.xml.bin │ │ ├── plain_regression-issue727_lock21_1.3.json.bin │ │ ├── plain_regression-issue727_lock21_1.3.xml.bin │ │ ├── plain_regression-issue727_lock21_1.4.json.bin │ │ ├── plain_regression-issue727_lock21_1.4.xml.bin │ │ ├── plain_regression-issue727_lock21_1.5.json.bin │ │ ├── plain_regression-issue727_lock21_1.5.xml.bin │ │ ├── plain_regression-issue727_lock21_1.6.json.bin │ │ ├── plain_regression-issue727_lock21_1.6.xml.bin │ │ ├── plain_with-extras_lock10_1.0.xml.bin │ │ ├── plain_with-extras_lock10_1.1.xml.bin │ │ ├── plain_with-extras_lock10_1.2.json.bin │ │ ├── plain_with-extras_lock10_1.2.xml.bin │ │ ├── plain_with-extras_lock10_1.3.json.bin │ │ ├── plain_with-extras_lock10_1.3.xml.bin │ │ ├── plain_with-extras_lock10_1.4.json.bin │ │ ├── plain_with-extras_lock10_1.4.xml.bin │ │ ├── plain_with-extras_lock10_1.5.json.bin │ │ ├── plain_with-extras_lock10_1.5.xml.bin │ │ ├── plain_with-extras_lock10_1.6.json.bin │ │ ├── plain_with-extras_lock10_1.6.xml.bin │ │ ├── plain_with-extras_lock11_1.0.xml.bin │ │ ├── plain_with-extras_lock11_1.1.xml.bin │ │ ├── plain_with-extras_lock11_1.2.json.bin │ │ ├── plain_with-extras_lock11_1.2.xml.bin │ │ ├── plain_with-extras_lock11_1.3.json.bin │ │ ├── plain_with-extras_lock11_1.3.xml.bin │ │ ├── plain_with-extras_lock11_1.4.json.bin │ │ ├── plain_with-extras_lock11_1.4.xml.bin │ │ ├── plain_with-extras_lock11_1.5.json.bin │ │ ├── plain_with-extras_lock11_1.5.xml.bin │ │ ├── plain_with-extras_lock11_1.6.json.bin │ │ ├── plain_with-extras_lock11_1.6.xml.bin │ │ ├── plain_with-extras_lock20_1.0.xml.bin │ │ ├── plain_with-extras_lock20_1.1.xml.bin │ │ ├── plain_with-extras_lock20_1.2.json.bin │ │ ├── plain_with-extras_lock20_1.2.xml.bin │ │ ├── plain_with-extras_lock20_1.3.json.bin │ │ ├── plain_with-extras_lock20_1.3.xml.bin │ │ ├── plain_with-extras_lock20_1.4.json.bin │ │ ├── plain_with-extras_lock20_1.4.xml.bin │ │ ├── plain_with-extras_lock20_1.5.json.bin │ │ ├── plain_with-extras_lock20_1.5.xml.bin │ │ ├── plain_with-extras_lock20_1.6.json.bin │ │ ├── plain_with-extras_lock20_1.6.xml.bin │ │ ├── plain_with-extras_lock21_1.0.xml.bin │ │ ├── plain_with-extras_lock21_1.1.xml.bin │ │ ├── plain_with-extras_lock21_1.2.json.bin │ │ ├── plain_with-extras_lock21_1.2.xml.bin │ │ ├── plain_with-extras_lock21_1.3.json.bin │ │ ├── plain_with-extras_lock21_1.3.xml.bin │ │ ├── plain_with-extras_lock21_1.4.json.bin │ │ ├── plain_with-extras_lock21_1.4.xml.bin │ │ ├── plain_with-extras_lock21_1.5.json.bin │ │ ├── plain_with-extras_lock21_1.5.xml.bin │ │ ├── plain_with-extras_lock21_1.6.json.bin │ │ ├── plain_with-extras_lock21_1.6.xml.bin │ │ ├── plain_with-optionals-no-extra_lock10_1.0.xml.bin │ │ ├── plain_with-optionals-no-extra_lock10_1.1.xml.bin │ │ ├── plain_with-optionals-no-extra_lock10_1.2.json.bin │ │ ├── plain_with-optionals-no-extra_lock10_1.2.xml.bin │ │ ├── plain_with-optionals-no-extra_lock10_1.3.json.bin │ │ ├── plain_with-optionals-no-extra_lock10_1.3.xml.bin │ │ ├── plain_with-optionals-no-extra_lock10_1.4.json.bin │ │ ├── plain_with-optionals-no-extra_lock10_1.4.xml.bin │ │ ├── plain_with-optionals-no-extra_lock10_1.5.json.bin │ │ ├── plain_with-optionals-no-extra_lock10_1.5.xml.bin │ │ ├── plain_with-optionals-no-extra_lock10_1.6.json.bin │ │ ├── plain_with-optionals-no-extra_lock10_1.6.xml.bin │ │ ├── plain_with-optionals-no-extra_lock11_1.0.xml.bin │ │ ├── plain_with-optionals-no-extra_lock11_1.1.xml.bin │ │ ├── plain_with-optionals-no-extra_lock11_1.2.json.bin │ │ ├── plain_with-optionals-no-extra_lock11_1.2.xml.bin │ │ ├── plain_with-optionals-no-extra_lock11_1.3.json.bin │ │ ├── plain_with-optionals-no-extra_lock11_1.3.xml.bin │ │ ├── plain_with-optionals-no-extra_lock11_1.4.json.bin │ │ ├── plain_with-optionals-no-extra_lock11_1.4.xml.bin │ │ ├── plain_with-optionals-no-extra_lock11_1.5.json.bin │ │ ├── plain_with-optionals-no-extra_lock11_1.5.xml.bin │ │ ├── plain_with-optionals-no-extra_lock11_1.6.json.bin │ │ ├── plain_with-optionals-no-extra_lock11_1.6.xml.bin │ │ ├── plain_with-optionals-no-extra_lock20_1.0.xml.bin │ │ ├── plain_with-optionals-no-extra_lock20_1.1.xml.bin │ │ ├── plain_with-optionals-no-extra_lock20_1.2.json.bin │ │ ├── plain_with-optionals-no-extra_lock20_1.2.xml.bin │ │ ├── plain_with-optionals-no-extra_lock20_1.3.json.bin │ │ ├── plain_with-optionals-no-extra_lock20_1.3.xml.bin │ │ ├── plain_with-optionals-no-extra_lock20_1.4.json.bin │ │ ├── plain_with-optionals-no-extra_lock20_1.4.xml.bin │ │ ├── plain_with-optionals-no-extra_lock20_1.5.json.bin │ │ ├── plain_with-optionals-no-extra_lock20_1.5.xml.bin │ │ ├── plain_with-optionals-no-extra_lock20_1.6.json.bin │ │ ├── plain_with-optionals-no-extra_lock20_1.6.xml.bin │ │ ├── plain_with-optionals-no-extra_lock21_1.0.xml.bin │ │ ├── plain_with-optionals-no-extra_lock21_1.1.xml.bin │ │ ├── plain_with-optionals-no-extra_lock21_1.2.json.bin │ │ ├── plain_with-optionals-no-extra_lock21_1.2.xml.bin │ │ ├── plain_with-optionals-no-extra_lock21_1.3.json.bin │ │ ├── plain_with-optionals-no-extra_lock21_1.3.xml.bin │ │ ├── plain_with-optionals-no-extra_lock21_1.4.json.bin │ │ ├── plain_with-optionals-no-extra_lock21_1.4.xml.bin │ │ ├── plain_with-optionals-no-extra_lock21_1.5.json.bin │ │ ├── plain_with-optionals-no-extra_lock21_1.5.xml.bin │ │ ├── plain_with-optionals-no-extra_lock21_1.6.json.bin │ │ ├── plain_with-optionals-no-extra_lock21_1.6.xml.bin │ │ ├── plain_with-urls_lock10_1.0.xml.bin │ │ ├── plain_with-urls_lock10_1.1.xml.bin │ │ ├── plain_with-urls_lock10_1.2.json.bin │ │ ├── plain_with-urls_lock10_1.2.xml.bin │ │ ├── plain_with-urls_lock10_1.3.json.bin │ │ ├── plain_with-urls_lock10_1.3.xml.bin │ │ ├── plain_with-urls_lock10_1.4.json.bin │ │ ├── plain_with-urls_lock10_1.4.xml.bin │ │ ├── plain_with-urls_lock10_1.5.json.bin │ │ ├── plain_with-urls_lock10_1.5.xml.bin │ │ ├── plain_with-urls_lock10_1.6.json.bin │ │ ├── plain_with-urls_lock10_1.6.xml.bin │ │ ├── plain_with-urls_lock11_1.0.xml.bin │ │ ├── plain_with-urls_lock11_1.1.xml.bin │ │ ├── plain_with-urls_lock11_1.2.json.bin │ │ ├── plain_with-urls_lock11_1.2.xml.bin │ │ ├── plain_with-urls_lock11_1.3.json.bin │ │ ├── plain_with-urls_lock11_1.3.xml.bin │ │ ├── plain_with-urls_lock11_1.4.json.bin │ │ ├── plain_with-urls_lock11_1.4.xml.bin │ │ ├── plain_with-urls_lock11_1.5.json.bin │ │ ├── plain_with-urls_lock11_1.5.xml.bin │ │ ├── plain_with-urls_lock11_1.6.json.bin │ │ ├── plain_with-urls_lock11_1.6.xml.bin │ │ ├── plain_with-urls_lock20_1.0.xml.bin │ │ ├── plain_with-urls_lock20_1.1.xml.bin │ │ ├── plain_with-urls_lock20_1.2.json.bin │ │ ├── plain_with-urls_lock20_1.2.xml.bin │ │ ├── plain_with-urls_lock20_1.3.json.bin │ │ ├── plain_with-urls_lock20_1.3.xml.bin │ │ ├── plain_with-urls_lock20_1.4.json.bin │ │ ├── plain_with-urls_lock20_1.4.xml.bin │ │ ├── plain_with-urls_lock20_1.5.json.bin │ │ ├── plain_with-urls_lock20_1.5.xml.bin │ │ ├── plain_with-urls_lock20_1.6.json.bin │ │ ├── plain_with-urls_lock20_1.6.xml.bin │ │ ├── plain_with-urls_lock21_1.0.xml.bin │ │ ├── plain_with-urls_lock21_1.1.xml.bin │ │ ├── plain_with-urls_lock21_1.2.json.bin │ │ ├── plain_with-urls_lock21_1.2.xml.bin │ │ ├── plain_with-urls_lock21_1.3.json.bin │ │ ├── plain_with-urls_lock21_1.3.xml.bin │ │ ├── plain_with-urls_lock21_1.4.json.bin │ │ ├── plain_with-urls_lock21_1.4.xml.bin │ │ ├── plain_with-urls_lock21_1.5.json.bin │ │ ├── plain_with-urls_lock21_1.5.xml.bin │ │ ├── plain_with-urls_lock21_1.6.json.bin │ │ ├── plain_with-urls_lock21_1.6.xml.bin │ │ ├── some-extras_with-extras_lock10_1.0.xml.bin │ │ ├── some-extras_with-extras_lock10_1.1.xml.bin │ │ ├── some-extras_with-extras_lock10_1.2.json.bin │ │ ├── some-extras_with-extras_lock10_1.2.xml.bin │ │ ├── some-extras_with-extras_lock10_1.3.json.bin │ │ ├── some-extras_with-extras_lock10_1.3.xml.bin │ │ ├── some-extras_with-extras_lock10_1.4.json.bin │ │ ├── some-extras_with-extras_lock10_1.4.xml.bin │ │ ├── some-extras_with-extras_lock10_1.5.json.bin │ │ ├── some-extras_with-extras_lock10_1.5.xml.bin │ │ ├── some-extras_with-extras_lock10_1.6.json.bin │ │ ├── some-extras_with-extras_lock10_1.6.xml.bin │ │ ├── some-extras_with-extras_lock11_1.0.xml.bin │ │ ├── some-extras_with-extras_lock11_1.1.xml.bin │ │ ├── some-extras_with-extras_lock11_1.2.json.bin │ │ ├── some-extras_with-extras_lock11_1.2.xml.bin │ │ ├── some-extras_with-extras_lock11_1.3.json.bin │ │ ├── some-extras_with-extras_lock11_1.3.xml.bin │ │ ├── some-extras_with-extras_lock11_1.4.json.bin │ │ ├── some-extras_with-extras_lock11_1.4.xml.bin │ │ ├── some-extras_with-extras_lock11_1.5.json.bin │ │ ├── some-extras_with-extras_lock11_1.5.xml.bin │ │ ├── some-extras_with-extras_lock11_1.6.json.bin │ │ ├── some-extras_with-extras_lock11_1.6.xml.bin │ │ ├── some-extras_with-extras_lock20_1.0.xml.bin │ │ ├── some-extras_with-extras_lock20_1.1.xml.bin │ │ ├── some-extras_with-extras_lock20_1.2.json.bin │ │ ├── some-extras_with-extras_lock20_1.2.xml.bin │ │ ├── some-extras_with-extras_lock20_1.3.json.bin │ │ ├── some-extras_with-extras_lock20_1.3.xml.bin │ │ ├── some-extras_with-extras_lock20_1.4.json.bin │ │ ├── some-extras_with-extras_lock20_1.4.xml.bin │ │ ├── some-extras_with-extras_lock20_1.5.json.bin │ │ ├── some-extras_with-extras_lock20_1.5.xml.bin │ │ ├── some-extras_with-extras_lock20_1.6.json.bin │ │ ├── some-extras_with-extras_lock20_1.6.xml.bin │ │ ├── some-extras_with-extras_lock21_1.0.xml.bin │ │ ├── some-extras_with-extras_lock21_1.1.xml.bin │ │ ├── some-extras_with-extras_lock21_1.2.json.bin │ │ ├── some-extras_with-extras_lock21_1.2.xml.bin │ │ ├── some-extras_with-extras_lock21_1.3.json.bin │ │ ├── some-extras_with-extras_lock21_1.3.xml.bin │ │ ├── some-extras_with-extras_lock21_1.4.json.bin │ │ ├── some-extras_with-extras_lock21_1.4.xml.bin │ │ ├── some-extras_with-extras_lock21_1.5.json.bin │ │ ├── some-extras_with-extras_lock21_1.5.xml.bin │ │ ├── some-extras_with-extras_lock21_1.6.json.bin │ │ ├── some-extras_with-extras_lock21_1.6.xml.bin │ │ ├── some-groups_group-deps_lock11_1.0.xml.bin │ │ ├── some-groups_group-deps_lock11_1.1.xml.bin │ │ ├── some-groups_group-deps_lock11_1.2.json.bin │ │ ├── some-groups_group-deps_lock11_1.2.xml.bin │ │ ├── some-groups_group-deps_lock11_1.3.json.bin │ │ ├── some-groups_group-deps_lock11_1.3.xml.bin │ │ ├── some-groups_group-deps_lock11_1.4.json.bin │ │ ├── some-groups_group-deps_lock11_1.4.xml.bin │ │ ├── some-groups_group-deps_lock11_1.5.json.bin │ │ ├── some-groups_group-deps_lock11_1.5.xml.bin │ │ ├── some-groups_group-deps_lock11_1.6.json.bin │ │ ├── some-groups_group-deps_lock11_1.6.xml.bin │ │ ├── some-groups_group-deps_lock20_1.0.xml.bin │ │ ├── some-groups_group-deps_lock20_1.1.xml.bin │ │ ├── some-groups_group-deps_lock20_1.2.json.bin │ │ ├── some-groups_group-deps_lock20_1.2.xml.bin │ │ ├── some-groups_group-deps_lock20_1.3.json.bin │ │ ├── some-groups_group-deps_lock20_1.3.xml.bin │ │ ├── some-groups_group-deps_lock20_1.4.json.bin │ │ ├── some-groups_group-deps_lock20_1.4.xml.bin │ │ ├── some-groups_group-deps_lock20_1.5.json.bin │ │ ├── some-groups_group-deps_lock20_1.5.xml.bin │ │ ├── some-groups_group-deps_lock20_1.6.json.bin │ │ ├── some-groups_group-deps_lock20_1.6.xml.bin │ │ ├── some-groups_group-deps_lock21_1.0.xml.bin │ │ ├── some-groups_group-deps_lock21_1.1.xml.bin │ │ ├── some-groups_group-deps_lock21_1.2.json.bin │ │ ├── some-groups_group-deps_lock21_1.2.xml.bin │ │ ├── some-groups_group-deps_lock21_1.3.json.bin │ │ ├── some-groups_group-deps_lock21_1.3.xml.bin │ │ ├── some-groups_group-deps_lock21_1.4.json.bin │ │ ├── some-groups_group-deps_lock21_1.4.xml.bin │ │ ├── some-groups_group-deps_lock21_1.5.json.bin │ │ ├── some-groups_group-deps_lock21_1.5.xml.bin │ │ ├── some-groups_group-deps_lock21_1.6.json.bin │ │ └── some-groups_group-deps_lock21_1.6.xml.bin │ │ └── requirements │ │ ├── file_frozen_1.0.xml.bin │ │ ├── file_frozen_1.1.xml.bin │ │ ├── file_frozen_1.2.json.bin │ │ ├── file_frozen_1.2.xml.bin │ │ ├── file_frozen_1.3.json.bin │ │ ├── file_frozen_1.3.xml.bin │ │ ├── file_frozen_1.4.json.bin │ │ ├── file_frozen_1.4.xml.bin │ │ ├── file_frozen_1.5.json.bin │ │ ├── file_frozen_1.5.xml.bin │ │ ├── file_frozen_1.6.json.bin │ │ ├── file_frozen_1.6.xml.bin │ │ ├── file_local_1.0.xml.bin │ │ ├── file_local_1.1.xml.bin │ │ ├── file_local_1.2.json.bin │ │ ├── file_local_1.2.xml.bin │ │ ├── file_local_1.3.json.bin │ │ ├── file_local_1.3.xml.bin │ │ ├── file_local_1.4.json.bin │ │ ├── file_local_1.4.xml.bin │ │ ├── file_local_1.5.json.bin │ │ ├── file_local_1.5.xml.bin │ │ ├── file_local_1.6.json.bin │ │ ├── file_local_1.6.xml.bin │ │ ├── file_nested_1.0.xml.bin │ │ ├── file_nested_1.1.xml.bin │ │ ├── file_nested_1.2.json.bin │ │ ├── file_nested_1.2.xml.bin │ │ ├── file_nested_1.3.json.bin │ │ ├── file_nested_1.3.xml.bin │ │ ├── file_nested_1.4.json.bin │ │ ├── file_nested_1.4.xml.bin │ │ ├── file_nested_1.5.json.bin │ │ ├── file_nested_1.5.xml.bin │ │ ├── file_nested_1.6.json.bin │ │ ├── file_nested_1.6.xml.bin │ │ ├── file_private-packages_1.0.xml.bin │ │ ├── file_private-packages_1.1.xml.bin │ │ ├── file_private-packages_1.2.json.bin │ │ ├── file_private-packages_1.2.xml.bin │ │ ├── file_private-packages_1.3.json.bin │ │ ├── file_private-packages_1.3.xml.bin │ │ ├── file_private-packages_1.4.json.bin │ │ ├── file_private-packages_1.4.xml.bin │ │ ├── file_private-packages_1.5.json.bin │ │ ├── file_private-packages_1.5.xml.bin │ │ ├── file_private-packages_1.6.json.bin │ │ ├── file_private-packages_1.6.xml.bin │ │ ├── file_regression-issue448.cp1252.txt_1.0.xml.bin │ │ ├── file_regression-issue448.cp1252.txt_1.1.xml.bin │ │ ├── file_regression-issue448.cp1252.txt_1.2.json.bin │ │ ├── file_regression-issue448.cp1252.txt_1.2.xml.bin │ │ ├── file_regression-issue448.cp1252.txt_1.3.json.bin │ │ ├── file_regression-issue448.cp1252.txt_1.3.xml.bin │ │ ├── file_regression-issue448.cp1252.txt_1.4.json.bin │ │ ├── file_regression-issue448.cp1252.txt_1.4.xml.bin │ │ ├── file_regression-issue448.cp1252.txt_1.5.json.bin │ │ ├── file_regression-issue448.cp1252.txt_1.5.xml.bin │ │ ├── file_regression-issue448.cp1252.txt_1.6.json.bin │ │ ├── file_regression-issue448.cp1252.txt_1.6.xml.bin │ │ ├── file_with-comments_1.0.xml.bin │ │ ├── file_with-comments_1.1.xml.bin │ │ ├── file_with-comments_1.2.json.bin │ │ ├── file_with-comments_1.2.xml.bin │ │ ├── file_with-comments_1.3.json.bin │ │ ├── file_with-comments_1.3.xml.bin │ │ ├── file_with-comments_1.4.json.bin │ │ ├── file_with-comments_1.4.xml.bin │ │ ├── file_with-comments_1.5.json.bin │ │ ├── file_with-comments_1.5.xml.bin │ │ ├── file_with-comments_1.6.json.bin │ │ ├── file_with-comments_1.6.xml.bin │ │ ├── file_with-extras_1.0.xml.bin │ │ ├── file_with-extras_1.1.xml.bin │ │ ├── file_with-extras_1.2.json.bin │ │ ├── file_with-extras_1.2.xml.bin │ │ ├── file_with-extras_1.3.json.bin │ │ ├── file_with-extras_1.3.xml.bin │ │ ├── file_with-extras_1.4.json.bin │ │ ├── file_with-extras_1.4.xml.bin │ │ ├── file_with-extras_1.5.json.bin │ │ ├── file_with-extras_1.5.xml.bin │ │ ├── file_with-extras_1.6.json.bin │ │ ├── file_with-extras_1.6.xml.bin │ │ ├── file_with-hashes_1.0.xml.bin │ │ ├── file_with-hashes_1.1.xml.bin │ │ ├── file_with-hashes_1.2.json.bin │ │ ├── file_with-hashes_1.2.xml.bin │ │ ├── file_with-hashes_1.3.json.bin │ │ ├── file_with-hashes_1.3.xml.bin │ │ ├── file_with-hashes_1.4.json.bin │ │ ├── file_with-hashes_1.4.xml.bin │ │ ├── file_with-hashes_1.5.json.bin │ │ ├── file_with-hashes_1.5.xml.bin │ │ ├── file_with-hashes_1.6.json.bin │ │ ├── file_with-hashes_1.6.xml.bin │ │ ├── file_with-urls_1.0.xml.bin │ │ ├── file_with-urls_1.1.xml.bin │ │ ├── file_with-urls_1.2.json.bin │ │ ├── file_with-urls_1.2.xml.bin │ │ ├── file_with-urls_1.3.json.bin │ │ ├── file_with-urls_1.3.xml.bin │ │ ├── file_with-urls_1.4.json.bin │ │ ├── file_with-urls_1.4.xml.bin │ │ ├── file_with-urls_1.5.json.bin │ │ ├── file_with-urls_1.5.xml.bin │ │ ├── file_with-urls_1.6.json.bin │ │ ├── file_with-urls_1.6.xml.bin │ │ ├── file_without-pinned-versions_1.0.xml.bin │ │ ├── file_without-pinned-versions_1.1.xml.bin │ │ ├── file_without-pinned-versions_1.2.json.bin │ │ ├── file_without-pinned-versions_1.2.xml.bin │ │ ├── file_without-pinned-versions_1.3.json.bin │ │ ├── file_without-pinned-versions_1.3.xml.bin │ │ ├── file_without-pinned-versions_1.4.json.bin │ │ ├── file_without-pinned-versions_1.4.xml.bin │ │ ├── file_without-pinned-versions_1.5.json.bin │ │ ├── file_without-pinned-versions_1.5.xml.bin │ │ ├── file_without-pinned-versions_1.6.json.bin │ │ ├── file_without-pinned-versions_1.6.xml.bin │ │ ├── index_auth_frozen_1.0.xml.bin │ │ ├── index_auth_frozen_1.1.xml.bin │ │ ├── index_auth_frozen_1.2.json.bin │ │ ├── index_auth_frozen_1.2.xml.bin │ │ ├── index_auth_frozen_1.3.json.bin │ │ ├── index_auth_frozen_1.3.xml.bin │ │ ├── index_auth_frozen_1.4.json.bin │ │ ├── index_auth_frozen_1.4.xml.bin │ │ ├── index_auth_frozen_1.5.json.bin │ │ ├── index_auth_frozen_1.5.xml.bin │ │ ├── index_auth_frozen_1.6.json.bin │ │ ├── index_auth_frozen_1.6.xml.bin │ │ ├── stream_frozen_1.0.xml.bin │ │ ├── stream_frozen_1.1.xml.bin │ │ ├── stream_frozen_1.2.json.bin │ │ ├── stream_frozen_1.2.xml.bin │ │ ├── stream_frozen_1.3.json.bin │ │ ├── stream_frozen_1.3.xml.bin │ │ ├── stream_frozen_1.4.json.bin │ │ ├── stream_frozen_1.4.xml.bin │ │ ├── stream_frozen_1.5.json.bin │ │ ├── stream_frozen_1.5.xml.bin │ │ ├── stream_frozen_1.6.json.bin │ │ ├── stream_frozen_1.6.xml.bin │ │ ├── stream_local_1.0.xml.bin │ │ ├── stream_local_1.1.xml.bin │ │ ├── stream_local_1.2.json.bin │ │ ├── stream_local_1.2.xml.bin │ │ ├── stream_local_1.3.json.bin │ │ ├── stream_local_1.3.xml.bin │ │ ├── stream_local_1.4.json.bin │ │ ├── stream_local_1.4.xml.bin │ │ ├── stream_local_1.5.json.bin │ │ ├── stream_local_1.5.xml.bin │ │ ├── stream_local_1.6.json.bin │ │ ├── stream_local_1.6.xml.bin │ │ ├── stream_nested_1.0.xml.bin │ │ ├── stream_nested_1.1.xml.bin │ │ ├── stream_nested_1.2.json.bin │ │ ├── stream_nested_1.2.xml.bin │ │ ├── stream_nested_1.3.json.bin │ │ ├── stream_nested_1.3.xml.bin │ │ ├── stream_nested_1.4.json.bin │ │ ├── stream_nested_1.4.xml.bin │ │ ├── stream_nested_1.5.json.bin │ │ ├── stream_nested_1.5.xml.bin │ │ ├── stream_nested_1.6.json.bin │ │ ├── stream_nested_1.6.xml.bin │ │ ├── stream_private-packages_1.0.xml.bin │ │ ├── stream_private-packages_1.1.xml.bin │ │ ├── stream_private-packages_1.2.json.bin │ │ ├── stream_private-packages_1.2.xml.bin │ │ ├── stream_private-packages_1.3.json.bin │ │ ├── stream_private-packages_1.3.xml.bin │ │ ├── stream_private-packages_1.4.json.bin │ │ ├── stream_private-packages_1.4.xml.bin │ │ ├── stream_private-packages_1.5.json.bin │ │ ├── stream_private-packages_1.5.xml.bin │ │ ├── stream_private-packages_1.6.json.bin │ │ ├── stream_private-packages_1.6.xml.bin │ │ ├── stream_regression-issue448.cp1252.txt_1.0.xml.bin │ │ ├── stream_regression-issue448.cp1252.txt_1.1.xml.bin │ │ ├── stream_regression-issue448.cp1252.txt_1.2.json.bin │ │ ├── stream_regression-issue448.cp1252.txt_1.2.xml.bin │ │ ├── stream_regression-issue448.cp1252.txt_1.3.json.bin │ │ ├── stream_regression-issue448.cp1252.txt_1.3.xml.bin │ │ ├── stream_regression-issue448.cp1252.txt_1.4.json.bin │ │ ├── stream_regression-issue448.cp1252.txt_1.4.xml.bin │ │ ├── stream_regression-issue448.cp1252.txt_1.5.json.bin │ │ ├── stream_regression-issue448.cp1252.txt_1.5.xml.bin │ │ ├── stream_regression-issue448.cp1252.txt_1.6.json.bin │ │ ├── stream_regression-issue448.cp1252.txt_1.6.xml.bin │ │ ├── stream_with-comments_1.0.xml.bin │ │ ├── stream_with-comments_1.1.xml.bin │ │ ├── stream_with-comments_1.2.json.bin │ │ ├── stream_with-comments_1.2.xml.bin │ │ ├── stream_with-comments_1.3.json.bin │ │ ├── stream_with-comments_1.3.xml.bin │ │ ├── stream_with-comments_1.4.json.bin │ │ ├── stream_with-comments_1.4.xml.bin │ │ ├── stream_with-comments_1.5.json.bin │ │ ├── stream_with-comments_1.5.xml.bin │ │ ├── stream_with-comments_1.6.json.bin │ │ ├── stream_with-comments_1.6.xml.bin │ │ ├── stream_with-extras_1.0.xml.bin │ │ ├── stream_with-extras_1.1.xml.bin │ │ ├── stream_with-extras_1.2.json.bin │ │ ├── stream_with-extras_1.2.xml.bin │ │ ├── stream_with-extras_1.3.json.bin │ │ ├── stream_with-extras_1.3.xml.bin │ │ ├── stream_with-extras_1.4.json.bin │ │ ├── stream_with-extras_1.4.xml.bin │ │ ├── stream_with-extras_1.5.json.bin │ │ ├── stream_with-extras_1.5.xml.bin │ │ ├── stream_with-extras_1.6.json.bin │ │ ├── stream_with-extras_1.6.xml.bin │ │ ├── stream_with-hashes_1.0.xml.bin │ │ ├── stream_with-hashes_1.1.xml.bin │ │ ├── stream_with-hashes_1.2.json.bin │ │ ├── stream_with-hashes_1.2.xml.bin │ │ ├── stream_with-hashes_1.3.json.bin │ │ ├── stream_with-hashes_1.3.xml.bin │ │ ├── stream_with-hashes_1.4.json.bin │ │ ├── stream_with-hashes_1.4.xml.bin │ │ ├── stream_with-hashes_1.5.json.bin │ │ ├── stream_with-hashes_1.5.xml.bin │ │ ├── stream_with-hashes_1.6.json.bin │ │ ├── stream_with-hashes_1.6.xml.bin │ │ ├── stream_with-urls_1.0.xml.bin │ │ ├── stream_with-urls_1.1.xml.bin │ │ ├── stream_with-urls_1.2.json.bin │ │ ├── stream_with-urls_1.2.xml.bin │ │ ├── stream_with-urls_1.3.json.bin │ │ ├── stream_with-urls_1.3.xml.bin │ │ ├── stream_with-urls_1.4.json.bin │ │ ├── stream_with-urls_1.4.xml.bin │ │ ├── stream_with-urls_1.5.json.bin │ │ ├── stream_with-urls_1.5.xml.bin │ │ ├── stream_with-urls_1.6.json.bin │ │ ├── stream_with-urls_1.6.xml.bin │ │ ├── stream_without-pinned-versions_1.0.xml.bin │ │ ├── stream_without-pinned-versions_1.1.xml.bin │ │ ├── stream_without-pinned-versions_1.2.json.bin │ │ ├── stream_without-pinned-versions_1.2.xml.bin │ │ ├── stream_without-pinned-versions_1.3.json.bin │ │ ├── stream_without-pinned-versions_1.3.xml.bin │ │ ├── stream_without-pinned-versions_1.4.json.bin │ │ ├── stream_without-pinned-versions_1.4.xml.bin │ │ ├── stream_without-pinned-versions_1.5.json.bin │ │ ├── stream_without-pinned-versions_1.5.xml.bin │ │ ├── stream_without-pinned-versions_1.6.json.bin │ │ └── stream_without-pinned-versions_1.6.xml.bin ├── functional │ ├── __init__.py │ └── test_license_trove_classifier.py ├── integration │ ├── __init__.py │ ├── test_cli.py │ ├── test_cli_environment.py │ ├── test_cli_pipenv.py │ ├── test_cli_poetry.py │ └── test_cli_requirements.py └── unit │ ├── __init__.py │ ├── test_cli.py │ └── test_utils_cdx.py └── tox.ini /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | insert_final_newline = true 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | end_of_line = lf 10 | 11 | [*.py] 12 | indent_style = space 13 | indent_size = 4 14 | 15 | [*.{yml,yaml}] 16 | indent_style = space 17 | indent_size = 2 18 | 19 | [*.toml] 20 | indent_style = space 21 | indent_size = 2 22 | 23 | [*.md] 24 | charset = latin1 25 | indent_style = space 26 | indent_size = 2 27 | # 2 trailing spaces indicate line breaks. 28 | trim_trailing_whitespace = false 29 | 30 | [*.{rst,txt}] 31 | indent_style = space 32 | indent_size = 4 33 | 34 | [{*.ini,.bandit,.flake8}] 35 | charset = latin1 36 | indent_style = space 37 | indent_size = 4 38 | -------------------------------------------------------------------------------- /.envrc: -------------------------------------------------------------------------------- 1 | # https://pipenv.pypa.io/en/latest/configuration.html 2 | export PIPENV_IGNORE_VIRTUALENVS=1 3 | 4 | # https://pdm-project.org/latest/usage/venv/ 5 | export PDM_IGNORE_ACTIVE_VENV=1 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/1-feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## Is your feature request related to a problem? Please describe. 11 | 12 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 13 | 14 | ## Describe the solution you'd like 15 | 16 | A clear and concise description of what you want to happen. 17 | 18 | ## Describe alternatives you've considered 19 | 20 | A clear and concise description of any alternative solutions or features you've considered. 21 | 22 | ## Additional context 23 | 24 | Add any other context or screenshots about the feature request here. 25 | 26 | 27 | ## Contribution 28 | 29 | 30 | - [ ] I am willing to provide an implementation 31 | - [ ] I will wait until somebody else implements it 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/2-bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[BUG]" 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## Describe the bug 11 | 12 | A clear and concise description of what the bug is. 13 | 14 | ## To Reproduce 15 | 16 | Steps to reproduce the behavior 17 | 18 | ## Expected behavior 19 | 20 | A clear and concise description of what you expected to happen. 21 | 22 | ## Screenshots or output-paste 23 | 24 | If applicable, add screenshots or past the output to help explain your problem. 25 | 26 | ## Environment 27 | 28 | - _cyclonedx-py_ version: 29 | - Python version: 30 | - OS: 31 | 32 | ## Additional context 33 | 34 | Add any other context about the problem here. 35 | 36 | ## Contribution 37 | 38 | 39 | - [ ] I am willing to provide a fix 40 | - [ ] I will wait until somebody else fixes it 41 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/ValidationError-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: ValidationError report 3 | about: Report a ValidationError to help us improve 4 | title: "[ValidationError]" 5 | labels: ValidationError 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## To Reproduce 11 | 12 | Steps to reproduce the behavior: 13 | 14 | 1. How was _cyclonedx-py_ called? 15 | 16 | 2. What kind of evidence was processed? 17 | 18 | 3. Error report: 19 | 20 | 4. Expected result: 21 | 24 | 25 | ## Environment 26 | 27 | - _cyclonedx-py_ version: 28 | - Python version: 29 | - OS: 30 | 31 | ## Additional context 32 | 33 | Add any other context about the problem here. 34 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: Discussions 4 | url: https://github.com/CycloneDX/cyclonedx-python/discussions 5 | about: Please ask and answer questions here. 6 | - name: Community slack support channel 7 | url: https://cyclonedx.slack.com/archives/CVA0QJEVA 8 | about: Community slack channel. 9 | - name: Community slack invite 10 | url: https://cyclonedx.org/slack/invite 11 | about: Community slack invite. 12 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file 2 | 3 | version: 2 4 | updates: 5 | - package-ecosystem: 'github-actions' 6 | directory: '/' 7 | schedule: 8 | interval: 'weekly' 9 | day: 'saturday' 10 | labels: [ 'dependencies' ] 11 | commit-message: 12 | prefix: 'chore' ## prefix maximum string length of 15 13 | include: 'scope' 14 | open-pull-requests-limit: 999 15 | - package-ecosystem: 'docker' 16 | directory: '/' 17 | schedule: 18 | interval: 'weekly' 19 | day: 'saturday' 20 | allow: 21 | - dependency-type: 'all' 22 | labels: [ 'dependencies' ] 23 | commit-message: 24 | prefix: 'chore' ## prefix maximum string length of 15 25 | include: 'scope' 26 | open-pull-requests-limit: 999 27 | - package-ecosystem: 'pip' 28 | directory: '/' 29 | schedule: 30 | interval: 'weekly' 31 | day: 'saturday' 32 | allow: 33 | - dependency-type: 'all' 34 | versioning-strategy: 'auto' 35 | labels: [ 'dependencies' ] 36 | commit-message: 37 | prefix: 'chore' ## prefix maximum string length of 15 38 | include: 'scope' 39 | open-pull-requests-limit: 999 40 | -------------------------------------------------------------------------------- /.isort.cfg: -------------------------------------------------------------------------------- 1 | [settings] 2 | ## read the docs: https://pycqa.github.io/isort/docs/configuration/options.html 3 | ## keep in sync with flake8 config - in `.flake8` file 4 | known_first_party = cyclonedx_py 5 | skip_gitignore = true 6 | skip_glob = 7 | build/*,dist/*,__pycache__,.eggs,*.egg-info*, 8 | *_cache,*.cache, 9 | .git/*,.tox/*,.venv/*,venv/* 10 | _OLD/*,_TEST/*, 11 | docs/* 12 | combine_as_imports = true 13 | default_section = THIRDPARTY 14 | ensure_newline_before_comments = true 15 | include_trailing_comma = true 16 | line_length = 120 17 | multi_line_output = 3 18 | src_paths = 19 | cyclonedx_py 20 | tests 21 | -------------------------------------------------------------------------------- /.mypy.ini: -------------------------------------------------------------------------------- 1 | [mypy] 2 | 3 | files = cyclonedx_py/ 4 | 5 | show_error_codes = True 6 | pretty = True 7 | 8 | warn_unreachable = True 9 | allow_redefinition = False 10 | 11 | # ignore_missing_imports = False 12 | # follow_imports = normal 13 | # follow_imports_for_stubs = True 14 | 15 | ### Strict mode ### 16 | warn_unused_configs = True 17 | disallow_subclassing_any = True 18 | disallow_any_generics = True 19 | disallow_untyped_calls = True 20 | disallow_untyped_defs = True 21 | disallow_incomplete_defs = True 22 | check_untyped_defs = True 23 | disallow_untyped_decorators = True 24 | no_implicit_optional = True 25 | warn_redundant_casts = True 26 | warn_unused_ignores = True 27 | warn_return_any = True 28 | no_implicit_reexport = True 29 | 30 | [mypy-pytest.*] 31 | ignore_missing_imports = True 32 | 33 | [mypy-tests.*] 34 | disallow_untyped_decorators = False 35 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # Read the Docs configuration file 2 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 3 | 4 | # Required 5 | version: 2 6 | 7 | # Set the version of Python and other tools you might need 8 | build: 9 | os: ubuntu-22.04 10 | tools: 11 | python: "3.9" 12 | # You can also specify other tool versions: 13 | # nodejs: "16" 14 | # rust: "1.55" 15 | # golang: "1.17" 16 | 17 | # Build documentation in the docs/ directory with Sphinx 18 | sphinx: 19 | configuration: docs/conf.py 20 | 21 | # Formats 22 | formats: all 23 | 24 | # Optionally declare the Python requirements required to build your docs 25 | python: 26 | install: 27 | - requirements: docs/requirements.txt 28 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | # see https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners 2 | 3 | 4 | # all maintainers are default-reviewers of new pull requests. 5 | # see https://github.com/orgs/CycloneDX/teams/python-maintainers 6 | * @CycloneDX/python-maintainers 7 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.13-slim 2 | 3 | ARG VERSION 4 | 5 | ARG CDX_PATH=/opt/cyclonedx-py 6 | ARG CDX_VENV=${CDX_PATH}/venv 7 | 8 | RUN addgroup --system --gid 1000 cyclonedx \ 9 | && adduser --system --shell /bin/bash --uid 1000 --ingroup cyclonedx cyclonedx 10 | 11 | RUN mkdir -p "${CDX_PATH}" 12 | RUN python -m venv --without-pip "${CDX_VENV}" 13 | ENV VIRTUAL_ENV=${CDX_VENV} 14 | ENV PATH=${VIRTUAL_ENV}/bin:${PATH} 15 | 16 | COPY ./dist ${CDX_PATH}/dist 17 | RUN pip --python "${CDX_VENV}" \ 18 | install --no-cache-dir --no-input --progress-bar=off \ 19 | --verbose --debug \ 20 | --prefix "${CDX_VENV}" --require-virtualenv \ 21 | --compile \ 22 | "cyclonedx-bom==${VERSION}" --find-links "file://${CDX_PATH}/dist" 23 | RUN rm -rf ${CDX_PATH}/dist 24 | 25 | USER cyclonedx 26 | ENTRYPOINT ["cyclonedx-py"] 27 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | CycloneDX Python 2 | Copyright (c) OWASP Foundation 3 | 4 | This product includes software developed by the 5 | CycloneDX community (https://cyclonedx.org/). 6 | -------------------------------------------------------------------------------- /bandit.yml: -------------------------------------------------------------------------------- 1 | # https://bandit.readthedocs.io 2 | # filename must be like this, so codacy can pick it up: https://github.com/codacy/codacy-bandit/blob/master/src/main/scala/codacy/bandit/Bandit.scala#L35C49-L35C59 3 | 4 | exclude_dirs: 5 | - docs 6 | - .venv 7 | - .tox 8 | 9 | skips: 10 | - B101 11 | -------------------------------------------------------------------------------- /cyclonedx_py/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | 18 | # !! version is managed by `semantic_release` 19 | # do not use typing here, or else `semantic_release` might have issues finding the variable 20 | __version__ = "6.1.1" # noqa:Q000 21 | 22 | # There is no stable/public API. 23 | # However, you might call the stable CLI instead, like so: 24 | # from sys import executable 25 | # from subprocess import run 26 | # run((executable, '-m', 'cyclonedx_py', '--help')) 27 | -------------------------------------------------------------------------------- /cyclonedx_py/__main__.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | 18 | __all__ = [ # type:ignore[var-annotated] 19 | # There is no stable/public API. 20 | # However, you might call the stable CLI instead, like so: 21 | # from sys import executable 22 | # from subprocess import run 23 | # run((executable, '-m', 'cyclonedx_py', '--help')) 24 | ] 25 | 26 | from sys import exit 27 | 28 | from ._internal.cli import run as _run 29 | 30 | exit(_run(prog=f'python -m {__package__}' if __package__ else None)) 31 | -------------------------------------------------------------------------------- /cyclonedx_py/_internal/utils/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | -------------------------------------------------------------------------------- /cyclonedx_py/_internal/utils/bytes.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | 18 | from sys import getdefaultencoding 19 | 20 | from chardet import detect as chardetect 21 | 22 | 23 | def bytes2str(data: bytes, *, errors: str = 'strict') -> str: 24 | # see https://docs.python.org/3/library/codecs.html#standard-encodings 25 | encoding = (chardetect(data)['encoding'] or getdefaultencoding()).replace( 26 | # replace Windows-encoding with code-page 27 | 'Windows-', 'cp') 28 | return data.decode(encoding, errors) 29 | -------------------------------------------------------------------------------- /cyclonedx_py/_internal/utils/secret.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | 18 | from re import compile as re_compile 19 | 20 | _URL_AUTH_MATCHER = re_compile(r'(?<=://)[^/@:]+:[^/@]+@') 21 | _URL_AUTH_REPLACE = '' # drop auth - in accordance with PEP 610 22 | 23 | 24 | def redact_auth_from_url(s: str) -> str: 25 | # is intended to work on any string that contains an url. 26 | return _URL_AUTH_MATCHER.sub(_URL_AUTH_REPLACE, s) \ 27 | if '@' in s \ 28 | else s 29 | -------------------------------------------------------------------------------- /cyclonedx_py/_internal/utils/toml.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | 18 | 19 | __all__ = ['toml_loads'] 20 | 21 | import sys 22 | 23 | # TOML polyfill: https://github.com/hukkin/tomli#intro 24 | # > A version of `tomli`, the `tomllib` module, was added to the standard library in Python 3.11 via PEP 680. 25 | # > `Tomli` continues to provide a backport on PyPI for Python versions 26 | # > where the standard library module is not available and that have not yet reached their end-of-life. 27 | if sys.version_info >= (3, 11): 28 | from tomllib import loads as toml_loads 29 | else: 30 | from tomli import loads as toml_loads 31 | -------------------------------------------------------------------------------- /cyclonedx_py/py.typed: -------------------------------------------------------------------------------- 1 | # Marker file for PEP 561. This package uses inline types. 2 | # This file is needed to allow other packages to type-check their code against this package. 3 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = . 9 | BUILDDIR = _build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /docs/changelog.rst: -------------------------------------------------------------------------------- 1 | ========= 2 | Changelog 3 | ========= 4 | 5 | .. mdinclude:: ../CHANGELOG.md 6 | -------------------------------------------------------------------------------- /docs/contributing.rst: -------------------------------------------------------------------------------- 1 | .. mdinclude:: ../CONTRIBUTING.md 2 | -------------------------------------------------------------------------------- /docs/install.rst: -------------------------------------------------------------------------------- 1 | Installation 2 | ============ 3 | 4 | Install from pypi.org as you would any other Python module using your preferred package manager: 5 | 6 | .. code-block:: sh 7 | 8 | python -m pip install cyclonedx-bom # install via pip 9 | pipx install cyclonedx-bom # install via pipx 10 | poetry add cyclonedx-bom # install via poetry 11 | uv tool install cyclonedx-bom # install via uv 12 | 13 | # ... you get the hang 14 | -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=. 11 | set BUILDDIR=_build 12 | 13 | if "%1" == "" goto help 14 | 15 | %SPHINXBUILD% >NUL 2>NUL 16 | if errorlevel 9009 ( 17 | echo. 18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 19 | echo.installed, then set the SPHINXBUILD environment variable to point 20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 21 | echo.may add the Sphinx directory to PATH. 22 | echo. 23 | echo.If you don't have Sphinx installed, grab it from 24 | echo.https://www.sphinx-doc.org/ 25 | exit /b 1 26 | ) 27 | 28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 29 | goto end 30 | 31 | :help 32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 33 | 34 | :end 35 | popd 36 | -------------------------------------------------------------------------------- /docs/requirements.txt: -------------------------------------------------------------------------------- 1 | m2r2>=0.3.2 2 | sphinx>=7.2.6,<9 3 | sphinx-rtd-theme>=2.0.0,<3 4 | -------------------------------------------------------------------------------- /docs/support.rst: -------------------------------------------------------------------------------- 1 | Support 2 | ======= 3 | 4 | If you run into issues utilising this library, please raise a `GitHub Issue`_. When raising an issue please include as 5 | much detail as possible including: 6 | 7 | * Version ``cyclonedx-bom`` you have installed. fetch via ``python -m cyclonedx_py --version``. 8 | * Input(s) you used, as well as command line options and switches 9 | * Expected Output(s) 10 | * Actual Output(s) 11 | 12 | Python support 13 | ============== 14 | 15 | We endeavour to support all functionality for all `current actively supported Python versions`_. 16 | However, some features may not be possible/present in older Python versions due to their lack of support. 17 | 18 | 19 | .. _GitHub Issue: https://github.com/CycloneDX/cyclonedx-python/issues 20 | .. _current actively supported Python versions: https://www.python.org/downloads/ 21 | -------------------------------------------------------------------------------- /package_aliases/cyclonedx-py/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !/.gitignore 3 | !/pyproject.toml 4 | !/README.md 5 | -------------------------------------------------------------------------------- /package_aliases/cyclonedx-py/README.md: -------------------------------------------------------------------------------- 1 | # Alias for package `cyclonedx-bom` 2 | 3 | The package `cyclonedx-bom` may use a script entrypoint that does not match the package's name on PyPI. 4 | To prevent unexpected existence of a package on PyPI that could cause confusion, some alias package is published. 5 | 6 | Instead of relying on this very package, you should require the actual tool: 7 | * [`cyclonedx-bom`](https://pypi.org/project/cyclonedx-bom/) 8 | -------------------------------------------------------------------------------- /package_aliases/cyclonedx-py/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "cyclonedx-py" 3 | version = "1.0.1" 4 | description = "Alias for package 'cyclonedx-bom'" 5 | readme = "README.md" 6 | dependencies = [ 7 | # no versions, just the name 8 | "cyclonedx-bom" 9 | ] 10 | 11 | [project.urls] 12 | repository = "https://github.com/CycloneDX/cyclonedx-python/#package_aliases/cyclonedx-py" 13 | -------------------------------------------------------------------------------- /package_aliases/publishing.md: -------------------------------------------------------------------------------- 1 | for publishing, run: 2 | ```shell 3 | python -m build # build 4 | twine upload /dist/* # upload 5 | ``` 6 | -------------------------------------------------------------------------------- /poetry.toml: -------------------------------------------------------------------------------- 1 | 2 | [virtualenvs.options] 3 | system-site-packages = false 4 | # these are already dev-dependencies, and therefore will come as needed 5 | no-pip = true 6 | no-setuptools = true 7 | -------------------------------------------------------------------------------- /tests/_data/infiles/.editorconfig: -------------------------------------------------------------------------------- 1 | 2 | [*.cp1252.txt.bin] 3 | charset = unset 4 | end_of_line = crlf 5 | -------------------------------------------------------------------------------- /tests/_data/infiles/.gitattributes: -------------------------------------------------------------------------------- 1 | *.bin binary 2 | *.txt.bin binary diff=text 3 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/a/.gitignore: -------------------------------------------------------------------------------- 1 | # in these cases we need to keep the dists, for showcasing purposes 2 | !/dist/ 3 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/a/README.md: -------------------------------------------------------------------------------- 1 | build via : 2 | ```shell 3 | python -m build 4 | ``` 5 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/a/dist/package-a-23.42.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CycloneDX/cyclonedx-python/80e2c2ba8833f10dcb771c2d8ee94a8e4caa401e/tests/_data/infiles/_helpers/local_pckages/a/dist/package-a-23.42.tar.gz -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CycloneDX/cyclonedx-python/80e2c2ba8833f10dcb771c2d8ee94a8e4caa401e/tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/a/module_a.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | 18 | 19 | """ 20 | module A 21 | """ 22 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/a/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "package-a" 3 | version = "23.42" 4 | description = "some package A" 5 | license = { text = "some license text" } # intentional not a SPDX ID/Expression 6 | authors = [] 7 | requires-python = ">=3.8" 8 | 9 | [tool.setuptools] 10 | py-modules = ["module_a"] 11 | 12 | [build-system] 13 | requires = ["setuptools>=61.0"] 14 | build-backend = "setuptools.build_meta" 15 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/b/.gitignore: -------------------------------------------------------------------------------- 1 | # in these cases we need to keep the dists, for showcasing purposes 2 | !/dist/ 3 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/b/README.md: -------------------------------------------------------------------------------- 1 | build via 2 | ```shell 3 | python -m build 4 | ``` 5 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CycloneDX/cyclonedx-python/80e2c2ba8833f10dcb771c2d8ee94a8e4caa401e/tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CycloneDX/cyclonedx-python/80e2c2ba8833f10dcb771c2d8ee94a8e4caa401e/tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/b/module_b.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | 18 | 19 | """ 20 | module B 21 | """ 22 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/b/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "package-b" 3 | version = "23.42" 4 | description = "some package B" 5 | license = { text = "Apache-2.0" } # intentional same as a classifier 6 | authors = [] 7 | requires-python = ">=3.8" 8 | classifiers = [ 9 | "License :: OSI Approved :: Apache Software License" 10 | ] 11 | 12 | [tool.setuptools] 13 | py-modules = ["module_b"] 14 | 15 | [build-system] 16 | requires = ["setuptools>=61.0"] 17 | build-backend = "setuptools.build_meta" 18 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/c/.gitignore: -------------------------------------------------------------------------------- 1 | # in these cases we need to keep the dists, for showcasing purposes 2 | !/dist/ 3 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/c/README.md: -------------------------------------------------------------------------------- 1 | build via 2 | ```shell 3 | python -m build 4 | ``` 5 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/c/dist/package-c-23.42.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CycloneDX/cyclonedx-python/80e2c2ba8833f10dcb771c2d8ee94a8e4caa401e/tests/_data/infiles/_helpers/local_pckages/c/dist/package-c-23.42.tar.gz -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CycloneDX/cyclonedx-python/80e2c2ba8833f10dcb771c2d8ee94a8e4caa401e/tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/c/module_c.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | 18 | 19 | """ 20 | module C 21 | """ 22 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/c/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "package-c" 3 | version = "23.42" 4 | description = "some package C" 5 | license = { text = "Apache-2.0 OR MIT" } # intentional a SPDX Expression 6 | authors = [] 7 | requires-python = ">=3.8" 8 | classifiers = [ 9 | "License :: OSI Approved :: Apache Software License", 10 | "License :: OSI Approved :: MIT License" 11 | ] 12 | 13 | [tool.setuptools] 14 | py-modules = ["module_c"] 15 | 16 | [build-system] 17 | requires = ["setuptools>=61.0"] 18 | build-backend = "setuptools.build_meta" 19 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868/.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://editorconfig.org 2 | 3 | [my_licenses/utf-8*] 4 | charset = utf-8 5 | 6 | [my_licenses/utf-16le*] 7 | charset = utf-16le 8 | 9 | [my_licenses/utf-16be*] 10 | charset = utf-16be 11 | 12 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868/.gitattributes: -------------------------------------------------------------------------------- 1 | Licenses/* binary 2 | Licenses/*.txt binary diff=txt 3 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868/README.md: -------------------------------------------------------------------------------- 1 | # PEP 639 - regression 868 2 | 3 | see 4 | 5 | PEP-630 expects license gfiles to be UTF8 encoded text. 6 | some license files may not be text, some may not be UTF8 encoded, but still be added as license files. 7 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868/my_licenses/richtext.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1031{\fonttbl{\f0\fnil\fcharset0 Calibri;}} 2 | {\*\generator Riched20 10.0.19041}\viewkind4\uc1 3 | \pard\sa200\sl276\slmult1\f0\fs22\lang7 RTF License File\par 4 | } 5 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868/my_licenses/utf-16be_withBOM.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CycloneDX/cyclonedx-python/80e2c2ba8833f10dcb771c2d8ee94a8e4caa401e/tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868/my_licenses/utf-16be_withBOM.txt -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868/my_licenses/utf-16le_withBOM.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CycloneDX/cyclonedx-python/80e2c2ba8833f10dcb771c2d8ee94a8e4caa401e/tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868/my_licenses/utf-16le_withBOM.txt -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868/my_licenses/utf-8_noBOM.txt: -------------------------------------------------------------------------------- 1 | this file is 2 | utf-8 encoded 3 | without BOM 4 | 😃 5 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868/my_licenses/utf-8_withBOM.txt: -------------------------------------------------------------------------------- 1 | this file is 2 | utf-8 encoded 3 | with BOM 4 | 😃 5 | -------------------------------------------------------------------------------- /tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | # Known broken version 3 | requires = ["setuptools == 78.1.0"] 4 | build-backend = "setuptools.build_meta" 5 | 6 | [project] 7 | name = "regression-issue868" 8 | version = "0.1" 9 | license-files = ["my_licenses/*"] 10 | readme = "README.md" 11 | 12 | [tool.setuptools] 13 | include-package-data = false 14 | exclude-package-data = { "*" = ["*", "**"] } 15 | [tool.setuptools.package-data] 16 | # do not want any content installed 17 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/broken-env/README.md: -------------------------------------------------------------------------------- 1 | A dir that MUST NOT contain any (python (virtual) environment. 2 | This is used in integration tests. 3 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/broken-env/broken-json.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | """ 4 | print broken JSON. 5 | """ 6 | 7 | print(r'{"some unfinished json') 8 | exit(0) 9 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/broken-env/non-zero.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | """ 4 | exit non-zero. 5 | """ 6 | 7 | print(r'[]') 8 | exit(1337) 9 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/editable-self/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "editable-self" 4 | version = "0.1.0" 5 | description = "install the current project as an editable" 6 | dependencies = [ 7 | 'six==1.16.0' 8 | ] 9 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/local/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "local" 4 | version = "0.1.0" 5 | description = "packages from local paths" 6 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/no-deps/init.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | 18 | """ 19 | initialize this testbed. 20 | """ 21 | 22 | from os import name as os_name 23 | from os.path import dirname, join 24 | from venv import EnvBuilder 25 | 26 | __all__ = ['main'] 27 | 28 | env_dir = join(dirname(__file__), '.venv') 29 | 30 | 31 | def main() -> None: 32 | EnvBuilder( 33 | system_site_packages=False, 34 | symlinks=os_name != 'nt', 35 | with_pip=False, 36 | ).create(env_dir) 37 | 38 | 39 | if __name__ == '__main__': 40 | main() 41 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/no-deps/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "no-deps" 4 | version = "0.1.0" 5 | description = "packages with all meta, but no deps" 6 | license = {text="Apache-2.0 OR MIT"} 7 | readme = "README.md" 8 | requires-python = ">=3.8" 9 | 10 | # dynamic = [] # TODO 11 | 12 | authors = ["Your Name ", "My Name"] 13 | maintainers = [ 14 | "John Smith ", 15 | "Jane Smith ", 16 | ] 17 | 18 | keywords = ["packaging", "pipenv", "test"] 19 | classifiers = [ 20 | "License :: OSI Approved :: Apache Software License", 21 | "License :: OSI Approved :: MIT License", 22 | "Classifier: Development Status :: 4 - Beta", 23 | "Intended Audience :: Developers" 24 | ] 25 | 26 | # dependencies = [] # TODO 27 | # optional-dependencies = [] # TODO 28 | 29 | # entry-point = {} # TODO 30 | 31 | # gui-scripts = {} # TODO 32 | # scripts = {} # TODO 33 | 34 | [project.urls] 35 | homepage = "https://oss.acme.org/my-project/" 36 | repository = "https://oss.acme.org/my-project.git" 37 | documentation = "https://oss.acme.org/my-project/docs/" 38 | "Bug Tracker" = "https://oss.acme.org/my-project/bugs/" 39 | "Funding" = "https://oss.acme.org/my-project/funding/" 40 | "Change log" = "https://oss.acme.org/my-project/changelog/" 41 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/normalize-packagename/pinning.txt: -------------------------------------------------------------------------------- 1 | ruamel.yaml==0.18.5 2 | ruamel.yaml.clib==0.2.8 3 | ruamel.yaml.jinja2==0.2.7 4 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/normalize-packagename/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "normalize-packagename" 4 | version = "0.1.0" 5 | description = "packages with non-normalized names" 6 | 7 | # see https://packaging.python.org/en/latest/specifications/name-normalization/#name-normalization 8 | 9 | dependencies = [ 10 | "ruamel-YAML[jinja2]" # actually "ruamel.yaml", normalizes to "ruamel-yaml" 11 | ] 12 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/private-packages/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "with-urls" 4 | version = "0.1.0" 5 | description = "packages from direct urls" 6 | dependencies = [ 7 | 'six', 8 | 'something-that-is-not-installed', 9 | ] 10 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/via-pdm/.gitignore: -------------------------------------------------------------------------------- 1 | .pdm-python 2 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/via-pdm/pdm.lock: -------------------------------------------------------------------------------- 1 | # This file is @generated by PDM. 2 | # It is not intended for manual editing. 3 | 4 | [metadata] 5 | groups = ["default", "dev"] 6 | strategy = ["cross_platform", "inherit_metadata"] 7 | lock_version = "4.5.0" 8 | content_hash = "sha256:adaefe9c99e680ca2643b70e0edef5b69b10e0859e2a863b5c0b81f9cd946230" 9 | 10 | [[metadata.targets]] 11 | requires_python = ">=3.8" 12 | 13 | [[package]] 14 | name = "ddt" 15 | version = "1.7.1" 16 | summary = "Data-Driven/Decorated Tests" 17 | groups = ["dev"] 18 | files = [ 19 | {file = "ddt-1.7.1-py2.py3-none-any.whl", hash = "sha256:2c4ac421bbdc10d2403b472294500c6f75ca822386c34d9fe82882d7a2ce9682"}, 20 | {file = "ddt-1.7.1.tar.gz", hash = "sha256:1a4472c477bf766f75f7b1efb628656ff3c35ff3f6c821129ae8e328fff8a9a2"}, 21 | ] 22 | 23 | [[package]] 24 | name = "toml" 25 | version = "0.10.2" 26 | requires_python = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 27 | summary = "Python Library for Tom's Obvious, Minimal Language" 28 | groups = ["default"] 29 | files = [ 30 | {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, 31 | {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, 32 | ] 33 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/via-pdm/pdm.toml: -------------------------------------------------------------------------------- 1 | # use `pdm config --local` to edit this file 2 | 3 | build_isolation = true 4 | 5 | [venv] 6 | in_project = true 7 | with_pip = false 8 | 9 | [python] 10 | use_venv = true 11 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/via-pdm/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://pdm-project.org/ 3 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 4 | name = "via-pdm" 5 | version = "0.1.0" 6 | description = "environment via PDM" 7 | license = { text = "Apache-2.0 OR MIT" } 8 | readme = "README.md" 9 | requires-python = ">=3.8" 10 | 11 | authors = [ 12 | { name = "Your Name", email = "you@example.com>" }, 13 | ] 14 | maintainers = [ 15 | "John Smith ", 16 | "Jane Smith ", 17 | ] 18 | 19 | keywords = ["packaging", "PDM", "test"] 20 | classifiers = [ 21 | "License :: OSI Approved :: Apache Software License", 22 | "License :: OSI Approved :: MIT License", 23 | "Classifier: Development Status :: 4 - Beta", 24 | "Intended Audience :: Developers" 25 | ] 26 | 27 | dependencies = [ 28 | "toml>=0.10.2", 29 | ] 30 | 31 | 32 | 33 | [tool.pdm] 34 | package-type = "application" 35 | 36 | [tool.pdm.dev-dependencies] 37 | dev = [ 38 | "ddt>=1.7.1", 39 | ] 40 | 41 | [tool.pdm.options] 42 | install = ['--venv'] 43 | lock = [] 44 | 45 | 46 | 47 | [build-system] 48 | requires = ["pdm-backend"] 49 | build-backend = "pdm.backend" 50 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/via-pipenv/Pipfile: -------------------------------------------------------------------------------- 1 | [pipenv] 2 | sort_pipfile = true 3 | 4 | [packages] 5 | toml = ">=0.10.2, <0.11" 6 | 7 | [dev-packages] 8 | ddt = ">=1.6.0, <2" 9 | 10 | # custom catrogys/groups 11 | # see https://pipenv.pypa.io/en/latest/pipfile.html#package-category-groups 12 | 13 | [categoryB] 14 | colorama = ">=0.4.3" 15 | 16 | [groupA] 17 | isoduration = "==20.11.0" 18 | colorama = ">=0.4, <0.5" 19 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/via-pipenv/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "via-pipenv" 4 | version = "0.1.0" 5 | description = "environment via Pipenv" 6 | license = { text = "Apache-2.0 OR MIT" } 7 | readme = "README.md" 8 | requires-python = ">=3.8" 9 | 10 | # dynamic = [] # TODO 11 | 12 | authors = ["Your Name ", "My Name"] 13 | maintainers = [ 14 | "John Smith ", 15 | "Jane Smith ", 16 | ] 17 | 18 | keywords = ["packaging", "pipenv", "test"] 19 | classifiers = [ 20 | "License :: OSI Approved :: Apache Software License", 21 | "License :: OSI Approved :: MIT License", 22 | "Classifier: Development Status :: 4 - Beta", 23 | "Intended Audience :: Developers" 24 | ] 25 | 26 | dependencies = [ 27 | 'toml' 28 | ] 29 | optional-dependencies = { 'foo' = ['ddt'] } 30 | 31 | # entry-point = {} # TODO 32 | 33 | # gui-scripts = {} # TODO 34 | # scripts = {} # TODO 35 | 36 | [project.urls] 37 | homepage = "https://oss.acme.org/my-project/" 38 | repository = "https://oss.acme.org/my-project.git" 39 | documentation = "https://oss.acme.org/my-project/docs/" 40 | "Bug Tracker" = "https://oss.acme.org/my-project/bugs/" 41 | "Funding" = "https://oss.acme.org/my-project/funding/" 42 | "Change log" = "https://oss.acme.org/my-project/changelog/" 43 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/via-poetry/dummy.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/via-poetry/poetry.toml: -------------------------------------------------------------------------------- 1 | [virtualenvs] 2 | in-project = true 3 | [virtualenvs.options] 4 | no-pip = true 5 | no-setuptools = true 6 | system-site-packages = false 7 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/via-uv/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CycloneDX/cyclonedx-python/80e2c2ba8833f10dcb771c2d8ee94a8e4caa401e/tests/_data/infiles/environment/via-uv/.gitignore -------------------------------------------------------------------------------- /tests/_data/infiles/environment/with-extras/pinning.txt: -------------------------------------------------------------------------------- 1 | arrow==1.3.0 2 | attrs==24.2.0 3 | boolean.py==4.0 4 | cyclonedx-python-lib==8.2.0 5 | defusedxml==0.7.1 6 | fqdn==1.5.1 7 | idna==3.10 8 | importlib_resources==6.4.5 9 | isoduration==20.11.0 10 | jsonpointer==3.0.0 11 | jsonschema==4.23.0 12 | jsonschema-specifications==2023.3.6 13 | license-expression==30.3.1 14 | lxml==5.3.0 15 | packageurl-python==0.16.0 16 | pkgutil_resolve_name==1.3.10 17 | py-serializable==1.1.2 18 | python-dateutil==2.9.0.post0 19 | referencing==0.35.1 20 | rfc3339-validator==0.1.4 21 | rfc3987==1.3.8 22 | rpds-py==0.20.0 23 | six==1.16.0 24 | sortedcontainers==2.4.0 25 | types-python-dateutil==2.9.0.20241003 26 | uri-template==1.3.0 27 | webcolors==24.8.0 28 | zipp==3.20.2 29 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/with-extras/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "with-extras" 4 | version = "0.1.0" 5 | description = "depenndencies with extras" 6 | 7 | dependencies = [ 8 | "cyclonedx-python-lib[xml-Validation]" # exrra name is expected to be normalized 9 | ] 10 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/with-license-file/init.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | 18 | """ 19 | initialize this testbed. 20 | """ 21 | 22 | from os import name as os_name 23 | from os.path import dirname, join 24 | from venv import EnvBuilder 25 | 26 | __all__ = ['main'] 27 | 28 | this_dir = dirname(__file__) 29 | env_dir = join(this_dir, '.venv') 30 | 31 | 32 | def main() -> None: 33 | EnvBuilder( 34 | system_site_packages=False, 35 | symlinks=os_name != 'nt', 36 | with_pip=False, 37 | ).create(env_dir) 38 | 39 | 40 | if __name__ == '__main__': 41 | main() 42 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/with-license-file/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "with-license-file" 4 | version = "0.1.0" 5 | description = "with licenses from file, instead of SPDX ID/Expression" 6 | # see https://packaging.python.org/en/latest/specifications/pyproject-toml/#license 7 | license = { file = "testing/someLicenseFile.txt.bin" } 8 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/with-license-file/testing/someLicenseFile.txt.bin: -------------------------------------------------------------------------------- 1 | This is the license text of this component. 2 | It is expected to be available in a SBOM. 3 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/with-license-pep639/pinning.txt: -------------------------------------------------------------------------------- 1 | attrs==23.2.0 2 | boolean.py==4.0 3 | cryptography==43.0.1 4 | jsonpointer==2.4 5 | license-expression==30.3.0 6 | lxml==5.3.0 7 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/with-license-pep639/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "with-extras" 4 | version = "0.1.0" 5 | description = "depenndencies with license declaration accoring to PEP 639" 6 | 7 | [project.dependencies] 8 | # with License-Expression 9 | "attrs" = { } 10 | # with License-File 11 | "boolean.py" = { } 12 | "jsonpointer" = { } 13 | "license_expression" = { } 14 | "lxml" = { } 15 | # with expression-like License AND License-File 16 | "cryptography" = { } 17 | # with possibly unexpected license files 18 | "regression-issue868" = { path = "../../_helpers/local_pckages/with-license-pep639_regression-issue868" } 19 | 20 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/with-license-text/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "with-license-text" 4 | version = "0.1.0" 5 | description = "with licenses as text, instead of SPDX ID/Expression" 6 | # see https://packaging.python.org/en/latest/specifications/pyproject-toml/#license 7 | license = { text = "This is the license text of this component.\nIt is expected to be available in a SBOM." } 8 | -------------------------------------------------------------------------------- /tests/_data/infiles/environment/with-urls/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "with-urls" 4 | version = "0.1.0" 5 | description = "packages from direct urls" 6 | dependencies = [ 7 | 'six', 8 | 'something-that-is-not-installed', 9 | ] 10 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/.envrc: -------------------------------------------------------------------------------- 1 | # https://pipenv.pypa.io/en/latest/configuration.html 2 | export PIPENV_IGNORE_VIRTUALENVS=1 3 | 4 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/category-deps/Pipfile: -------------------------------------------------------------------------------- 1 | [pipenv] 2 | sort_pipfile = true 3 | 4 | [packages] 5 | toml = ">=0.10.2, <0.11" 6 | 7 | [dev-packages] 8 | ddt = ">=1.6.0, <2" 9 | 10 | # custom catrogys/groups 11 | # see https://pipenv.pypa.io/en/latest/pipfile.html#package-category-groups 12 | 13 | [categoryB] 14 | colorama = ">=0.4.3" 15 | 16 | [groupA] 17 | isoduration = "==20.11.0" 18 | colorama = ">=0.4, <0.5" 19 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/category-deps/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "category-deps" 4 | version = "0.1.0" 5 | description = "dependencies organized in groups" 6 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/default-and-dev/Pipfile: -------------------------------------------------------------------------------- 1 | [pipenv] 2 | sort_pipfile = true 3 | 4 | [packages] 5 | colorama = "*" 6 | toml = ">=0.10.2, <0.11" 7 | 8 | [dev-packages] 9 | isoduration = ">=20.11.0, <21" 10 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/default-and-dev/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "default-and-dev" 4 | version = "0.1.0" 5 | description = "default and dev depenndencies" 6 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/editable-self/Pipfile: -------------------------------------------------------------------------------- 1 | [pipenv] 2 | sort_pipfile = true 3 | 4 | [packages] 5 | # https://pipenv.pypa.io/en/latest/specifiers.html?highlight=ref#editable-dependencies-e 6 | editable-self = {path = ".", editable = true} 7 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/editable-self/Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "eeede3274cf3ff5afa3e8133d5dec39de8939885aad846fb1e5d4807898a57de" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": {}, 8 | "sources": [ 9 | { 10 | "name": "pypi", 11 | "url": "https://pypi.org/simple", 12 | "verify_ssl": true 13 | } 14 | ] 15 | }, 16 | "default": { 17 | "editable-self": { 18 | "editable": true, 19 | "path": "." 20 | } 21 | }, 22 | "develop": {} 23 | } 24 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/editable-self/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "editable-self" 4 | version = "0.1.0" 5 | description = "install the current project as an editable" 6 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/local/Pipfile: -------------------------------------------------------------------------------- 1 | [pipenv] 2 | sort_pipfile = true 3 | 4 | [packages] 5 | package-a = {file = "../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz"} 6 | package-b = {file = "file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl"} 7 | package-c = {path = "../../_helpers/local_pckages/c"} 8 | 9 | [dev-packages] 10 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/local/Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "b6b344a88a20d99f1cff5db6c549e31c5aa79bf36bb9859c3f818ef795d62850" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": {}, 8 | "sources": [ 9 | { 10 | "name": "pypi", 11 | "url": "https://pypi.org/simple", 12 | "verify_ssl": true 13 | } 14 | ] 15 | }, 16 | "default": { 17 | "package-a": { 18 | "file": "../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz", 19 | "hashes": [ 20 | "sha256:3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" 21 | ] 22 | }, 23 | "package-b": { 24 | "file": "file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl", 25 | "hashes": [ 26 | "sha256:4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" 27 | ] 28 | }, 29 | "package-c": { 30 | "path": "../../_helpers/local_pckages/c" 31 | } 32 | }, 33 | "develop": {} 34 | } 35 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/local/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "local" 4 | version = "0.1.0" 5 | description = "packages from local paths" 6 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/no-deps/Pipfile: -------------------------------------------------------------------------------- 1 | [pipenv] 2 | sort_pipfile = true 3 | 4 | [packages] 5 | 6 | [dev-packages] 7 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/no-deps/Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "ebffa69a1fa192d1cef7cb42ad79231ca976565c5ce371a70160b3048d3cbc06" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": {}, 8 | "sources": [ 9 | { 10 | "name": "pypi", 11 | "url": "https://pypi.org/simple", 12 | "verify_ssl": true 13 | } 14 | ] 15 | }, 16 | "default": {}, 17 | "develop": {} 18 | } 19 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/no-deps/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "no-deps" 4 | version = "0.1.0" 5 | description = "packages with all meta, but no deps" 6 | license = {text="Apache-2.0 OR MIT"} 7 | readme = "README.md" 8 | requires-python = ">=3.8" 9 | 10 | # dynamic = [] # TODO 11 | 12 | authors = ["Your Name ", "My Name"] 13 | maintainers = [ 14 | "John Smith ", 15 | "Jane Smith ", 16 | ] 17 | 18 | keywords = ["packaging", "pipenv", "test"] 19 | classifiers = [ 20 | "License :: OSI Approved :: Apache Software License", 21 | "License :: OSI Approved :: MIT License", 22 | "Classifier: Development Status :: 4 - Beta", 23 | "Intended Audience :: Developers" 24 | ] 25 | 26 | # dependencies = [] # TODO 27 | # optional-dependencies = [] # TODO 28 | 29 | # entry-point = {} # TODO 30 | 31 | # gui-scripts = {} # TODO 32 | # scripts = {} # TODO 33 | 34 | [project.urls] 35 | homepage = "https://oss.acme.org/my-project/" 36 | repository = "https://oss.acme.org/my-project.git" 37 | documentation = "https://oss.acme.org/my-project/docs/" 38 | "Bug Tracker" = "https://oss.acme.org/my-project/bugs/" 39 | "Funding" = "https://oss.acme.org/my-project/funding/" 40 | "Change log" = "https://oss.acme.org/my-project/changelog/" 41 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/normalize-packagename/Pipfile: -------------------------------------------------------------------------------- 1 | [pipenv] 2 | sort_pipfile = true 3 | 4 | [packages] 5 | "ruamel-YAML[jinja2]" = "*" # actually "ruamel.yaml", normalizes to "ruamel-yaml" 6 | 7 | [dev-packages] 8 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/normalize-packagename/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "normalize-packagename" 4 | version = "0.1.0" 5 | description = "packages with non-normalized names" 6 | 7 | # see https://packaging.python.org/en/latest/specifications/name-normalization/#name-normalization 8 | 9 | dependencies = [ 10 | "ruamel-YAML[jinja2]" # actually "ruamel.yaml", normalizes to "ruamel-yaml" 11 | ] 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/private-packages/Pipfile: -------------------------------------------------------------------------------- 1 | [pipenv] 2 | sort_pipfile = true 3 | install_search_all_sources = true 4 | 5 | # see https://pipenv.pypa.io/en/latest/indexes.html#specifying-package-indexes 6 | # run the `//tests/_data/infiles/_helpers/pypi-proxy.py` to setup a PyPI proxy 7 | # call with `pipenv ... --pypi-mirror http://pysrc2.acme.org:8080/simple/ ...` 8 | 9 | [[source]] 10 | url = "https://pypi.org/simple" 11 | verify_ssl = true 12 | name = "pypi" 13 | 14 | [[source]] 15 | url = "http://user:password@pysrc1.acme.org:8080/simple/" 16 | verify_ssl = false 17 | name = "pysrc1.acme.org" 18 | 19 | [packages] 20 | numpy = { version = "1.26.2", index = "pypi" } 21 | six = { file = "https://user:password@files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl" } 22 | toml = { version = "0.10.2", index = "pysrc1.acme.org" } 23 | 24 | [dev-packages] 25 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/private-packages/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "private-packges" 4 | version = "0.1.0" 5 | description = "packages from aternative package repositories" 6 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/with-extras/Pipfile: -------------------------------------------------------------------------------- 1 | [pipenv] 2 | sort_pipfile = true 3 | 4 | [packages] 5 | cyclonedx-python-lib = {version = "==5.1.1", extras = ["xml-Validation", "JSON-validation"]} 6 | 7 | [dev-packages] 8 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/with-extras/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "with-extras" 4 | version = "0.1.0" 5 | description = "depenndencies with extras" 6 | 7 | dependencies = [ 8 | "cyclonedx-python-lib[xml-Validation]" # extra name is expected to be normalized 9 | ] 10 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/with-urls/Pipfile: -------------------------------------------------------------------------------- 1 | [pipenv] 2 | sort_pipfile = true 3 | 4 | [packages] 5 | # numpy = {file = "https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz"} 6 | pillow = {ref = "10.1.0", git = "git+https://github.com/python-pillow/Pillow.git"} 7 | six = {ref = "1.16.0", git = "git+ssh://git@github.com/benjaminp/six.git"} 8 | # wxpython-phoenix = {file = "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5624+e95b6c8b-cp311-cp311-win32.whl", markers="sys_platform == 'win32'"} 9 | urllib3 = {file = "https://github.com/urllib3/urllib3/archive/refs/tags/2.2.0.zip"} 10 | requests = {git = "git+https://github.com/requests/requests.git#egg=requests"} 11 | 12 | [dev-packages] 13 | -------------------------------------------------------------------------------- /tests/_data/infiles/pipenv/with-urls/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "with-urls" 4 | version = "0.1.0" 5 | description = "packages from direct urls" 6 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/README.md: -------------------------------------------------------------------------------- 1 | poetry lock file version -- preferred poetry versions: 2 | - `1.0` -> poetry==1.0.10 3 | - `1.1` -> poetry==1.1.15 4 | - `2.0` -> poetry==1.8.5 5 | - `2.1` -> poetry==2.x 6 | 7 | !! remove [poetry cache dir](https://python-poetry.org/docs/configuration/#cache-directory), 8 | when switching versions: 9 | - `rm -rf "$HOME/.cache/pypoetry" "$XDG_CACHE_HOME/pypoetry"` 10 | - `poetry cache clear --all PyPI` 11 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/group-deps/lock11/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/group-deps/lock20/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/group-deps/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/group-deps/pyproject-proto.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "group-deps" 3 | version = "0.1.0" 4 | description = "dependencies organized in groups" 5 | authors = ["Your Name "] 6 | readme = "README.md" 7 | 8 | # see https://python-poetry.org/docs/master/managing-dependencies/#dependency-groups 9 | # This group notation is preferred since Poetry 1.2.0 and not usable in earlier versions. 10 | 11 | [tool.poetry.dependencies] 12 | python = "^3.11" 13 | toml = "^0.10.2" 14 | 15 | [tool.poetry.group.dev.dependencies] 16 | ddt = "^1.6.0" 17 | 18 | [tool.poetry.group.groupB.dependencies] 19 | isoduration = "^20.11.0" 20 | 21 | [tool.poetry.group.groupA] 22 | optional = true 23 | 24 | [tool.poetry.group.groupA.dependencies] 25 | isoduration = "^20.11.0" 26 | colorama = "^0.4.6" 27 | 28 | [build-system] 29 | requires = ["poetry-core"] 30 | build-backend = "poetry.core.masonry.api" 31 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/local/lock10/poetry.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | name = "package-a" 3 | version = "23.42" 4 | description = "some package A" 5 | category = "main" 6 | optional = false 7 | python-versions = ">=3.8" 8 | 9 | [package.source] 10 | type = "file" 11 | url = "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" 12 | 13 | [[package]] 14 | name = "package-b" 15 | version = "23.42" 16 | description = "some package B" 17 | category = "main" 18 | optional = false 19 | python-versions = ">=3.8" 20 | 21 | [package.source] 22 | type = "file" 23 | url = "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" 24 | 25 | [metadata] 26 | lock-version = "1.1" 27 | python-versions = "^3.8" 28 | content-hash = "734048232bb6dda94b2a854173814b14cb126075501e789ccddc26b4a4b31c5e" 29 | 30 | [metadata.files] 31 | package-a = [ 32 | {file = "package-a-23.42.tar.gz", hash = "sha256:3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592"}, 33 | ] 34 | package-b = [ 35 | {file = "package_b-23.42-py3-none-any.whl", hash = "sha256:4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602"}, 36 | ] 37 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/local/lock10/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/local/lock11/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/local/lock20/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/local/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/local/pyproject-proto.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "local" 3 | version = "0.1.0" 4 | description = "packages from local paths" 5 | authors = ["Your Name "] 6 | 7 | 8 | # You can specify a package in the following forms: 9 | # [...] 10 | # - A file path (../my-package/my-package.whl) 11 | # - A directory (../my-package/) 12 | # [...] 13 | 14 | 15 | [tool.poetry.dependencies] 16 | python = "^3.8" 17 | # path dependency - https://python-poetry.org/docs/dependency-specification/#path-dependencies 18 | package-a = {path = "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz"} 19 | package-b = {path = "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl"} 20 | # package-c not in poetry v1.0 available 21 | package-c = {path = "../../../_helpers/local_pckages/c"} 22 | 23 | 24 | 25 | [build-system] 26 | requires = ["poetry-core"] 27 | build-backend = "poetry.core.masonry.api" 28 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/main-and-dev/lock10/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/main-and-dev/lock11/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/main-and-dev/lock20/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/main-and-dev/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/main-and-dev/pyproject-proto.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "main-and-dev" 3 | version = "0.1.0" 4 | description = "main and dev depenndencies" 5 | authors = ["Your Name "] 6 | readme = "README.md" 7 | 8 | 9 | 10 | [tool.poetry.dependencies] 11 | python = "^3.8" 12 | toml = "^0.10.2" 13 | colorama = "*" 14 | arrow = "^1.3" 15 | 16 | # > This group notation is preferred since Poetry 1.2.0 and not usable in earlier versions. 17 | # > For backwards compatibility with older versions of Poetry, any dependency declared in the dev-dependencies 18 | # > section will automatically be added to the dev group. 19 | 20 | [tool.poetry.dev-dependencies] 21 | isoduration = "^20.11.0" 22 | 23 | 24 | [build-system] 25 | requires = ["poetry-core"] 26 | build-backend = "poetry.core.masonry.api" 27 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/multi-constraint-deps/lock11/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/multi-constraint-deps/lock20/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/multi-constraint-deps/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/multi-constraint-deps/pyproject-proto.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "multi-constraint-deps" 3 | version = "0.1.0" 4 | description = "multi-constraint depenndencies" 5 | authors = ["Your Name "] 6 | readme = "README.md" 7 | 8 | # multi-constraint dependencies 9 | # see https://python-poetry.org/docs/dependency-specification/#multiple-constraints-dependencies 10 | 11 | [tool.poetry.dependencies] 12 | python = "^3" 13 | pathlib2 = [ 14 | { version = "2.3.7.post1", python = ">=3.7" }, 15 | { version = "2.3.6", markers = "python_version < '3.7' and sys_platform == 'win32'" }, 16 | { version = "2.3.5", python = "<3.7", platform = "linux" }, 17 | # same version but from different source -- SHALL be treated as non-identical 18 | { git = "https://github.com/jazzband/pathlib2.git", tag = "2.3.5", python = "<3.7", platform = "darwin" }, 19 | ] 20 | 21 | 22 | [build-system] 23 | requires = ["poetry-core"] 24 | build-backend = "poetry.core.masonry.api" 25 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/no-deps/lock20/poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. 2 | package = [] 3 | 4 | [metadata] 5 | lock-version = "2.0" 6 | python-versions = "*" 7 | content-hash = "29c1d764c213c1f51fb6bcfa0fe43f351248fae4d4d20a20ade46059d3b7be05" 8 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/no-deps/lock20/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/no-deps/lock21/poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. 2 | package = [] 3 | 4 | [metadata] 5 | lock-version = "2.1" 6 | python-versions = "*" 7 | content-hash = "29c1d764c213c1f51fb6bcfa0fe43f351248fae4d4d20a20ade46059d3b7be05" 8 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/no-deps/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/no-deps/pyproject-proto.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | ## https://python-poetry.org/docs/pyproject/ 3 | name = "no-deps" 4 | license = "Apache-2.0 OR MIT" 5 | version = "0.1.0" 6 | description = "packages with all meta, but no deps" 7 | authors = ["Your Name ", "My Name"] 8 | maintainers = [ 9 | "John Smith ", 10 | "Jane Smith ", 11 | ] 12 | homepage = "https://oss.acme.org/my-project/" 13 | repository = "https://oss.acme.org/my-project.git" 14 | documentation = "https://oss.acme.org/my-project/docs/" 15 | keywords = ["packaging", "poetry", "test"] 16 | classifiers = [ 17 | "License :: OSI Approved :: Apache Software License", 18 | "License :: OSI Approved :: MIT License", 19 | "Classifier: Development Status :: 4 - Beta", 20 | "Intended Audience :: Developers" 21 | ] 22 | 23 | [tool.poetry.urls] 24 | "Bug Tracker" = "https://oss.acme.org/my-project/bugs/" 25 | "Funding" = "https://oss.acme.org/my-project/funding/" 26 | "Change log" = "https://oss.acme.org/my-project/changelog/" 27 | 28 | [tool.poetry.dependencies] 29 | python = "*" 30 | 31 | 32 | [build-system] 33 | requires = ["poetry-core"] 34 | build-backend = "poetry.core.masonry.api" 35 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/normalize-packagename/lock10/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/normalize-packagename/lock20/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/normalize-packagename/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/normalize-packagename/pyproject-proto.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "normalize-packagename" 3 | version = "0.1.0" 4 | description = "packages with non-normalized names" 5 | authors = ["Your Name "] 6 | readme = "README.md" 7 | 8 | # see https://packaging.python.org/en/latest/specifications/name-normalization/#name-normalization 9 | 10 | [tool.poetry.dependencies] 11 | python = "^3.8" 12 | "ruamel-YAML" = { version="*", extras=["jinja2"] } # actually "ruamel.yaml", normalizes to "ruamel-yaml" 13 | 14 | 15 | 16 | 17 | [build-system] 18 | requires = ["poetry-core"] 19 | build-backend = "poetry.core.masonry.api" 20 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/private-packges_v2/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue611/lock20/poetry.lock: -------------------------------------------------------------------------------- 1 | regression-issue611-poetry.lock.bin -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue611/lock20/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue611/lock20/regression-issue611-poetry.lock.bin: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "pyhumps" 5 | version = "3.7.1" 6 | description = "🐫 Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node" 7 | optional = false 8 | python-versions = "*" 9 | files = [ 10 | {file = "pyhumps-3.7.1-py3-none-any.whl", hash = "sha256:c6f2d833f2c7afae039d71b7dc0aba5412ae5b8c8c33d4a208c1d412de17229e"}, 11 | {file = "pyhumps-3.7.1.tar.gz", hash = "sha256:5616f0afdbc73ef479fa9999f4abdcb336a0232707ff1a0b86e29fc9339e18da"}, 12 | ] 13 | 14 | [metadata] 15 | lock-version = "2.0" 16 | python-versions = "^3.11" 17 | content-hash = "e9676d347231afe6a46e027d88442e90348436b55346267e68a37e340c5f8f6f" 18 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue611/lock21/poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "pyhumps" 5 | version = "3.7.1" 6 | description = "🐫 Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node" 7 | optional = false 8 | python-versions = "*" 9 | groups = ["main"] 10 | files = [ 11 | {file = "pyhumps-3.7.1-py3-none-any.whl", hash = "sha256:c6f2d833f2c7afae039d71b7dc0aba5412ae5b8c8c33d4a208c1d412de17229e"}, 12 | {file = "pyhumps-3.7.1.tar.gz", hash = "sha256:5616f0afdbc73ef479fa9999f4abdcb336a0232707ff1a0b86e29fc9339e18da"}, 13 | ] 14 | 15 | [metadata] 16 | lock-version = "2.1" 17 | python-versions = "^3.11" 18 | content-hash = "e9676d347231afe6a46e027d88442e90348436b55346267e68a37e340c5f8f6f" 19 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue611/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue611/pyproject-proto.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "regression-issue611" 3 | version = "0.1.0" 4 | description = "regression for issue #611" 5 | authors = ["Your Name "] 6 | readme = "README.md" 7 | 8 | [tool.poetry.dependencies] 9 | python = "^3.11" 10 | pyhumps = "3.7.1" 11 | 12 | [build-system] 13 | requires = ["poetry-core"] 14 | build-backend = "poetry.core.masonry.api" 15 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue702/lock10/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue702/lock11/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue702/lock20/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue702/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue702/pyproject-proto.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "regression-issue702" 3 | version = "0.1.0" 4 | description = "regression for issue #702" 5 | authors = ["Your Name "] 6 | readme = "README.md" 7 | 8 | [tool.poetry.dependencies] 9 | python = "^3.10.13" # like in issue report 10 | ray = { version = ">=2.10.0", extras = ["serve"] } # like in issue report 11 | 12 | [build-system] 13 | requires = ["poetry-core"] 14 | build-backend = "poetry.core.masonry.api" 15 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue727/lock20/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue727/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/regression-issue727/pyproject-proto.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "regression-issue727" 3 | version = "0.1.0" 4 | description = "regression for issue #727" 5 | authors = ["Your Name "] 6 | readme = "README.md" 7 | 8 | [tool.poetry.dependencies] 9 | python = "^3.10" 10 | torch = [ 11 | {url = "https://download.pytorch.org/whl/cpu/torch-2.1.2-cp310-none-macosx_11_0_arm64.whl"}, 12 | ] 13 | 14 | 15 | [build-system] 16 | requires = ["poetry-core"] 17 | build-backend = "poetry.core.masonry.api" 18 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-extras/lock10/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-extras/lock11/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-extras/lock20/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-extras/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-extras/pyproject-proto.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "with-extras" 3 | version = "0.1.0" 4 | description = "depenndencies with extras" 5 | authors = ["Your Name "] 6 | 7 | 8 | [tool.poetry.dependencies] 9 | python = "^3.8" 10 | cyclonedx-python-lib = { version = "5.1.1", extras = ["json-validation", "xml-Validation"], optional = true } 11 | tomli = [ 12 | # see https://github.com/CycloneDX/cyclonedx-python/issues/840 13 | { version = "^2", optional = true } 14 | ] 15 | 16 | 17 | [tool.poetry.extras] 18 | my-extra = ["cyclonedx-python-lib"] 19 | toml = ["tomli"] 20 | foo = ["extra-with-unknown-deps"] 21 | 22 | 23 | [build-system] 24 | requires = ["poetry-core"] 25 | build-backend = "poetry.core.masonry.api" 26 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-optionals-no-extra/lock10/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-optionals-no-extra/lock11/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-optionals-no-extra/lock20/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-optionals-no-extra/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-optionals-no-extra/pyproject-proto.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "with-optionals-no-extra" 3 | version = "0.1.0" 4 | description = "depenndencies with optionlas and no exgtras" 5 | authors = ["Your Name "] 6 | 7 | 8 | [tool.poetry.dependencies] 9 | python = "^3.8" 10 | cyclonedx-python-lib = {version = ">=8,<9", optional = true} 11 | py-serializable = [ 12 | # see https://github.com/CycloneDX/cyclonedx-python/issues/840 13 | {version = "*", optional = true} 14 | ] 15 | 16 | [tool.poetry.extras] 17 | # no extras! 18 | 19 | 20 | [build-system] 21 | requires = ["poetry-core"] 22 | build-backend = "poetry.core.masonry.api" 23 | -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-urls/lock10/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-urls/lock11/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-urls/lock20/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/poetry/with-urls/lock21/pyproject.toml: -------------------------------------------------------------------------------- 1 | ../pyproject-proto.toml -------------------------------------------------------------------------------- /tests/_data/infiles/requirements/frozen.txt: -------------------------------------------------------------------------------- 1 | # all dependencies are pinned to an exact version 2 | 3 | # just pinned 4 | colorama==0.4.6 5 | 6 | # with hashes -- https://pip.pypa.io/en/stable/topics/secure-installs/#hash-checking-mode 7 | FooProject == 1.2 \ 8 | --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 \ 9 | --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 10 | -------------------------------------------------------------------------------- /tests/_data/infiles/requirements/local.txt: -------------------------------------------------------------------------------- 1 | # local 2 | ./myproject/chardet 3 | 4 | # local with hash 5 | ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 6 | 7 | # editable install 8 | -e ./myproject/idna.whl 9 | 10 | # named 11 | foo @ file://../foo 12 | 13 | # unnamed build distribution 14 | ./downloads/numpy-1.9.2-cp34-none-win32.whl 15 | 16 | # unnamed source distribution 17 | ./downloads/numpy-1.26.1.tar.gz 18 | -------------------------------------------------------------------------------- /tests/_data/infiles/requirements/nested.txt: -------------------------------------------------------------------------------- 1 | # nest another requirement file in 2 | 3 | -r frozen.txt 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/infiles/requirements/private-packages.txt: -------------------------------------------------------------------------------- 1 | ## pip option to use an alternative package registry 2 | 3 | --index-url https://user:password@pypackages.acme.org/simple/ 4 | --extra-index-url https://user:password@legacy1.pypackages.acme.org/simple/ 5 | --extra-index-url https://user:password@legacy2.pypackages.acme.org/simple/ 6 | 7 | my-package==1.2.3 8 | 9 | my-other-package @ https://user:password@pypackages.acme.org/my-other-package-1.2.3.tar.gz 10 | -------------------------------------------------------------------------------- /tests/_data/infiles/requirements/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata 3 | name = "testing-requirements-txt" 4 | version = "0.1.0" 5 | description = "some `reuqirements.txt` a root-component with all metadata" 6 | license = {text="Apache-2.0 OR MIT"} 7 | readme = "README.md" 8 | requires-python = ">=3.7" 9 | 10 | # dynamic = [] # TODO 11 | 12 | authors = ["Your Name ", "My Name"] 13 | maintainers = [ 14 | "John Smith ", 15 | "Jane Smith ", 16 | ] 17 | 18 | keywords = ["packaging", "pipenv", "test"] 19 | classifiers = [ 20 | "License :: OSI Approved :: Apache Software License", 21 | "License :: OSI Approved :: MIT License", 22 | "Classifier: Development Status :: 4 - Beta", 23 | "Intended Audience :: Developers" 24 | ] 25 | 26 | # dependencies = [] # TODO 27 | # optional-dependencies = [] # TODO 28 | 29 | # entry-point = {} # TODO 30 | 31 | # gui-scripts = {} # TODO 32 | # scripts = {} # TODO 33 | 34 | [project.urls] 35 | homepage = "https://oss.acme.org/my-project/" 36 | repository = "https://oss.acme.org/my-project.git" 37 | documentation = "https://oss.acme.org/my-project/docs/" 38 | "Bug Tracker" = "https://oss.acme.org/my-project/bugs/" 39 | "Funding" = "https://oss.acme.org/my-project/funding/" 40 | "Change log" = "https://oss.acme.org/my-project/changelog/" 41 | -------------------------------------------------------------------------------- /tests/_data/infiles/requirements/regression-issue448.cp1252.txt.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CycloneDX/cyclonedx-python/80e2c2ba8833f10dcb771c2d8ee94a8e4caa401e/tests/_data/infiles/requirements/regression-issue448.cp1252.txt.bin -------------------------------------------------------------------------------- /tests/_data/infiles/requirements/with-comments.txt: -------------------------------------------------------------------------------- 1 | certifi==2023.11.17 # via requests 2 | chardet==4.0.0 # via requests 3 | idna==2.10 # via requests 4 | requests==2.31.0 # via -r requirements.in 5 | urllib3==2.2.0 # via requests 6 | -------------------------------------------------------------------------------- /tests/_data/infiles/requirements/with-extras.txt: -------------------------------------------------------------------------------- 1 | # package with extras 2 | 3 | # extra names are expected to be normalized 4 | cyclonedx-python-lib[JSON-validation,xml-Validation] == 5.1.1 5 | -------------------------------------------------------------------------------- /tests/_data/infiles/requirements/with-hashes.txt: -------------------------------------------------------------------------------- 1 | # hash mode -- https://pip.pypa.io/en/stable/topics/secure-installs/#hash-checking-mode 2 | 3 | ## oneliner 4 | certifi==2023.11.17 --hash=sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474 --hash=sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 5 | 6 | ## unorthodox line breaks 7 | urllib3==2.2.0 --hash=sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20 \ 8 | --hash=sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224 9 | 10 | ## typical line breaks 11 | FooProject == 1.2 \ 12 | --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 \ 13 | --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 14 | 15 | # from direct source 16 | colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz \ 17 | --hash=md5:9854316552d41419b678d39af443a75f \ 18 | --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a 19 | 20 | # unknown hash type -> ignore hash 21 | something == 1.33.7 --hash=foo:something-invalid 22 | -------------------------------------------------------------------------------- /tests/_data/infiles/requirements/with-urls.txt: -------------------------------------------------------------------------------- 1 | # dependencies from urls 2 | 3 | ## VCS -- https://pip.pypa.io/en/stable/topics/vcs-support/ 4 | ### commit hash 5 | git+https://github.com/path/to/package-one@41b95ec#egg=package-one 6 | ### master branch 7 | git+https://github.com/path/to/package-two@master#egg=package-two 8 | ### tag 9 | git+https://github.com/path/to/package-three@0.1#egg=package-three 10 | ### release tag 11 | git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four 12 | ### complete node id 13 | git+https://github.com/containerbuildsystem/osbs-client@2bd03f4e0e5edc474b6236c5c128620d988f79a3#egg=package-five 14 | 15 | 16 | ## http build dist 17 | http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl 18 | 19 | 20 | ## http source dist 21 | https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz 22 | 23 | 24 | ## named fetchable file 25 | urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/2.2.0.zip 26 | -------------------------------------------------------------------------------- /tests/_data/infiles/requirements/without-pinned-versions.txt: -------------------------------------------------------------------------------- 1 | certifi>=2023.11.17 2 | chardet >= 4.0.0 , < 5 3 | urllib3 4 | -------------------------------------------------------------------------------- /tests/_data/snapshots/.gitattributes: -------------------------------------------------------------------------------- 1 | # files are compared bype-wise, so they need to be treated as binary 2 | * linguist-generated 3 | *.bin binary 4 | *.xml*.bin diff=xml 5 | *.json*.bin diff=json 6 | -------------------------------------------------------------------------------- /tests/_data/snapshots/README.md: -------------------------------------------------------------------------------- 1 | # TEST FIXTURES 2 | 3 | ## RE-CREATION 4 | 5 | Some assets here can be (re-)created automatically, by setting the env var `CDX_TEST_RECREATE_SNAPSHOTS=1`. 6 | It might also help to set `PYTHONHASHSEED=0`! 7 | As a shortcut just run: 8 | 9 | ```shell 10 | CDX_TEST_RECREATE_SNAPSHOTS=1 poetry run tox -e py 11 | ``` 12 | 13 | The files will be written as is, which might not be human-readable. feel free to reformat the files manually. 14 | -------------------------------------------------------------------------------- /tests/_data/snapshots/cli/purls-normal.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "components": [ 3 | { 4 | "bom-ref": "my-lib-A", 5 | "components": [ 6 | { 7 | "bom-ref": "my-lib-A-sub", 8 | "name": "my-lib-A-sub", 9 | "purl": "pkg:generic/testing/my-lib-A-sub?foo=bar#bazz", 10 | "type": "application" 11 | } 12 | ], 13 | "name": "my-lib-A", 14 | "purl": "pkg:generic/testing/my-lib-A@2?lol=rofl", 15 | "type": "library" 16 | } 17 | ], 18 | "dependencies": [ 19 | { 20 | "ref": "my-app" 21 | }, 22 | { 23 | "ref": "my-lib-A" 24 | } 25 | ], 26 | "metadata": { 27 | "component": { 28 | "bom-ref": "my-app", 29 | "name": "my-app", 30 | "purl": "pkg:generic/testing/my-app@1", 31 | "type": "application" 32 | }, 33 | "properties": [ 34 | { 35 | "name": "cdx:reproducible", 36 | "value": "true" 37 | } 38 | ] 39 | }, 40 | "version": 1, 41 | "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", 42 | "bomFormat": "CycloneDX", 43 | "specVersion": "1.4" 44 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/cli/purls-short.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "components": [ 3 | { 4 | "bom-ref": "my-lib-A", 5 | "components": [ 6 | { 7 | "bom-ref": "my-lib-A-sub", 8 | "name": "my-lib-A-sub", 9 | "purl": "pkg:generic/testing/my-lib-A-sub", 10 | "type": "application" 11 | } 12 | ], 13 | "name": "my-lib-A", 14 | "purl": "pkg:generic/testing/my-lib-A@2", 15 | "type": "library" 16 | } 17 | ], 18 | "dependencies": [ 19 | { 20 | "ref": "my-app" 21 | }, 22 | { 23 | "ref": "my-lib-A" 24 | } 25 | ], 26 | "metadata": { 27 | "component": { 28 | "bom-ref": "my-app", 29 | "name": "my-app", 30 | "purl": "pkg:generic/testing/my-app@1", 31 | "type": "application" 32 | }, 33 | "properties": [ 34 | { 35 | "name": "cdx:reproducible", 36 | "value": "true" 37 | } 38 | ] 39 | }, 40 | "version": 1, 41 | "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", 42 | "bomFormat": "CycloneDX", 43 | "specVersion": "1.4" 44 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_editable-self_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | six 6 | 1.16.0 7 | Python 2 and 3 compatibility utilities 8 | pkg:pypi/six@1.16.0 9 | false 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_editable-self_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | six 6 | 1.16.0 7 | Python 2 and 3 compatibility utilities 8 | 9 | 10 | MIT 11 | 12 | 13 | pkg:pypi/six@1.16.0 14 | 15 | 16 | https://github.com/benjaminp/six 17 | from packaging metadata: Home-page 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_local_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | package-a 6 | 23.42 7 | some package A 8 | false 9 | 10 | 11 | package-b 12 | 23.42 13 | some package B 14 | false 15 | 16 | 17 | package-c 18 | 23.42 19 | some package C 20 | false 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_no-deps_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_no-deps_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_normalize-packagename_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ruamel.yaml 6 | 0.18.5 7 | ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order 8 | pkg:pypi/ruamel.yaml@0.18.5 9 | false 10 | 11 | 12 | ruamel.yaml.jinja2 13 | 0.2.7 14 | jinja2 pre and post-processor to update with YAML 15 | pkg:pypi/ruamel.yaml.jinja2@0.2.7 16 | false 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_private-packages_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | six 6 | 1.16.0 7 | Python 2 and 3 compatibility utilities 8 | pkg:pypi/six@1.16.0 9 | false 10 | 11 | 12 | toml 13 | 0.10.2 14 | Python Library for Tom's Obvious, Minimal Language 15 | pkg:pypi/toml@0.10.2 16 | false 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_via-pdm_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | pkg:pypi/toml@0.10.2 9 | false 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_via-pdm_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | 9 | 10 | MIT 11 | 12 | 13 | pkg:pypi/toml@0.10.2 14 | 15 | 16 | https://github.com/uiri/toml 17 | from packaging metadata: Home-page 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_via-pipenv_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | pkg:pypi/toml@0.10.2 9 | false 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_via-pipenv_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | 9 | 10 | MIT 11 | 12 | 13 | pkg:pypi/toml@0.10.2 14 | 15 | 16 | https://github.com/uiri/toml 17 | from packaging metadata: Home-page 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_via-poetry_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | pkg:pypi/toml@0.10.2 9 | false 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_via-poetry_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | 9 | 10 | MIT 11 | 12 | 13 | pkg:pypi/toml@0.10.2 14 | 15 | 16 | https://github.com/uiri/toml 17 | from packaging metadata: Home-page 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_via-uv_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | pkg:pypi/toml@0.10.2 9 | false 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_via-uv_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | 9 | 10 | MIT 11 | 12 | 13 | pkg:pypi/toml@0.10.2 14 | 15 | 16 | https://github.com/uiri/toml 17 | from packaging metadata: Home-page 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_with-license-file_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_with-license-file_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_with-license-file_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "root-component" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "root-component", 10 | "description": "with licenses from file, instead of SPDX ID/Expression", 11 | "licenses": [ 12 | { 13 | "license": { 14 | "name": "declared license of 'with-license-file'", 15 | "text": { 16 | "content": "VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo=", 17 | "contentType": "text/plain", 18 | "encoding": "base64" 19 | } 20 | } 21 | } 22 | ], 23 | "name": "with-license-file", 24 | "type": "application", 25 | "version": "0.1.0" 26 | }, 27 | "tools": [ 28 | { 29 | "name": "cyclonedx-py", 30 | "vendor": "CycloneDX", 31 | "version": "thisVersion-testing" 32 | }, 33 | { 34 | "name": "cyclonedx-python-lib", 35 | "vendor": "CycloneDX", 36 | "version": "libVersion-testing" 37 | } 38 | ] 39 | }, 40 | "version": 1, 41 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 42 | "bomFormat": "CycloneDX", 43 | "specVersion": "1.2" 44 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_with-license-file_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-license-file 18 | 0.1.0 19 | with licenses from file, instead of SPDX ID/Expression 20 | 21 | 22 | declared license of 'with-license-file' 23 | VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo= 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_with-license-file_1.3.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-license-file 18 | 0.1.0 19 | with licenses from file, instead of SPDX ID/Expression 20 | 21 | 22 | declared license of 'with-license-file' 23 | VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo= 24 | 25 | 26 | 27 | 28 | true 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /tests/_data/snapshots/environment/plain_with-license-text_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | package-a 6 | 23.42 7 | some package A 8 | false 9 | 10 | 11 | package-b 12 | 23.42 13 | some package B 14 | false 15 | 16 | 17 | package-c 18 | 23.42 19 | some package C 20 | false 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_category-deps_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | pkg:pypi/toml@0.10.2 8 | false 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_category-deps_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | pkg:pypi/toml@0.10.2 8 | 9 | 10 | https://pypi.org/simple/toml/ 11 | from explicit index: pypi 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_category-deps_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "components": [ 3 | { 4 | "bom-ref": "toml==0.10.2", 5 | "externalReferences": [ 6 | { 7 | "comment": "from explicit index: pypi", 8 | "type": "distribution", 9 | "url": "https://pypi.org/simple/toml/" 10 | } 11 | ], 12 | "name": "toml", 13 | "purl": "pkg:pypi/toml@0.10.2", 14 | "type": "library", 15 | "version": "0.10.2" 16 | } 17 | ], 18 | "dependencies": [ 19 | { 20 | "ref": "root-component" 21 | }, 22 | { 23 | "ref": "toml==0.10.2" 24 | } 25 | ], 26 | "metadata": { 27 | "component": { 28 | "bom-ref": "root-component", 29 | "description": "dependencies organized in groups", 30 | "name": "category-deps", 31 | "type": "application", 32 | "version": "0.1.0" 33 | }, 34 | "tools": [ 35 | { 36 | "name": "cyclonedx-py", 37 | "vendor": "CycloneDX", 38 | "version": "thisVersion-testing" 39 | }, 40 | { 41 | "name": "cyclonedx-python-lib", 42 | "vendor": "CycloneDX", 43 | "version": "libVersion-testing" 44 | } 45 | ] 46 | }, 47 | "version": 1, 48 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 49 | "bomFormat": "CycloneDX", 50 | "specVersion": "1.2" 51 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_category-deps_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | category-deps 18 | 0.1.0 19 | dependencies organized in groups 20 | 21 | 22 | 23 | 24 | toml 25 | 0.10.2 26 | pkg:pypi/toml@0.10.2 27 | 28 | 29 | https://pypi.org/simple/toml/ 30 | from explicit index: pypi 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_default-and-dev_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | colorama 6 | 0.4.6 7 | pkg:pypi/colorama@0.4.6 8 | false 9 | 10 | 11 | toml 12 | 0.10.2 13 | pkg:pypi/toml@0.10.2 14 | false 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_default-and-dev_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | colorama 6 | 0.4.6 7 | pkg:pypi/colorama@0.4.6 8 | 9 | 10 | https://pypi.org/simple/colorama/ 11 | from explicit index: pypi 12 | 13 | 14 | 15 | 16 | toml 17 | 0.10.2 18 | pkg:pypi/toml@0.10.2 19 | 20 | 21 | https://pypi.org/simple/toml/ 22 | from explicit index: pypi 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_editable-self_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_editable-self_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_editable-self_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "root-component" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "root-component", 10 | "description": "install the current project as an editable", 11 | "name": "editable-self", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "tools": [ 16 | { 17 | "name": "cyclonedx-py", 18 | "vendor": "CycloneDX", 19 | "version": "thisVersion-testing" 20 | }, 21 | { 22 | "name": "cyclonedx-python-lib", 23 | "vendor": "CycloneDX", 24 | "version": "libVersion-testing" 25 | } 26 | ] 27 | }, 28 | "version": 1, 29 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 30 | "bomFormat": "CycloneDX", 31 | "specVersion": "1.2" 32 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_editable-self_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | editable-self 18 | 0.1.0 19 | install the current project as an editable 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_editable-self_1.3.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "root-component" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "root-component", 10 | "description": "install the current project as an editable", 11 | "name": "editable-self", 12 | "properties": [ 13 | { 14 | "name": "cdx:pipenv:category", 15 | "value": "default" 16 | } 17 | ], 18 | "type": "application", 19 | "version": "0.1.0" 20 | }, 21 | "properties": [ 22 | { 23 | "name": "cdx:reproducible", 24 | "value": "true" 25 | } 26 | ], 27 | "tools": [ 28 | { 29 | "name": "cyclonedx-py", 30 | "vendor": "CycloneDX", 31 | "version": "thisVersion-testing" 32 | }, 33 | { 34 | "name": "cyclonedx-python-lib", 35 | "vendor": "CycloneDX", 36 | "version": "libVersion-testing" 37 | } 38 | ] 39 | }, 40 | "version": 1, 41 | "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", 42 | "bomFormat": "CycloneDX", 43 | "specVersion": "1.3" 44 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_editable-self_1.3.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | editable-self 18 | 0.1.0 19 | install the current project as an editable 20 | 21 | default 22 | 23 | 24 | 25 | true 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_local_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | package-a 6 | 7 | false 8 | 9 | 10 | package-b 11 | 12 | false 13 | 14 | 15 | package-c 16 | 17 | false 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_local_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | package-a 6 | 7 | 8 | 9 | ../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz 10 | from file 11 | 12 | 13 | 14 | 15 | package-b 16 | 17 | 18 | 19 | file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl 20 | from file 21 | 22 | 23 | 24 | 25 | package-c 26 | 27 | 28 | 29 | ../../_helpers/local_pckages/c 30 | from path 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_no-deps_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_no-deps_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_normalize-packagename_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ruamel-yaml 6 | 0.18.5 7 | pkg:pypi/ruamel-yaml@0.18.5 8 | false 9 | 10 | 11 | ruamel.yaml.clib 12 | 0.2.8 13 | pkg:pypi/ruamel.yaml.clib@0.2.8 14 | false 15 | 16 | 17 | ruamel.yaml.jinja2 18 | 0.2.7 19 | pkg:pypi/ruamel.yaml.jinja2@0.2.7 20 | false 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/plain_private-packages_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | numpy 6 | 1.26.2 7 | pkg:pypi/numpy@1.26.2 8 | false 9 | 10 | 11 | six 12 | 13 | pkg:pypi/six?download_url=https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl 14 | false 15 | 16 | 17 | toml 18 | 0.10.2 19 | pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple 20 | false 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | numpy 6 | 1.26.2 7 | pkg:pypi/numpy@1.26.2?repository_url=https://pypy-mirror.testing.acme.org/simple 8 | false 9 | 10 | 11 | six 12 | 13 | pkg:pypi/six?download_url=https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl 14 | false 15 | 16 | 17 | toml 18 | 0.10.2 19 | pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple 20 | false 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/no-dev_group-deps_lock11_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | pkg:pypi/toml@0.10.2 9 | false 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/no-dev_group-deps_lock11_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | pkg:pypi/toml@0.10.2 9 | 10 | 11 | https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl 12 | from legacy-api 13 | 14 | 15 | https://pypi.org/simple/toml/#toml-0.10.2.tar.gz 16 | from legacy-api 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/no-dev_group-deps_lock20_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | pkg:pypi/toml@0.10.2 9 | false 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/no-dev_group-deps_lock20_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | pkg:pypi/toml@0.10.2 9 | 10 | 11 | https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl 12 | from legacy-api 13 | 14 | 15 | https://pypi.org/simple/toml/#toml-0.10.2.tar.gz 16 | from legacy-api 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/no-dev_group-deps_lock21_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | pkg:pypi/toml@0.10.2 9 | false 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/no-dev_group-deps_lock21_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | toml 6 | 0.10.2 7 | Python Library for Tom's Obvious, Minimal Language 8 | pkg:pypi/toml@0.10.2 9 | 10 | 11 | https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl 12 | from legacy-api 13 | 14 | 15 | https://pypi.org/simple/toml/#toml-0.10.2.tar.gz 16 | from legacy-api 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_local_lock10_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | package-a 6 | 23.42 7 | some package A 8 | false 9 | 10 | 11 | package-b 12 | 23.42 13 | some package B 14 | false 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_local_lock10_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | package-a 6 | 23.42 7 | some package A 8 | 9 | 10 | ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz 11 | from file 12 | 13 | 14 | 15 | 16 | package-b 17 | 23.42 18 | some package B 19 | 20 | 21 | ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl 22 | from file 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_local_lock11_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | package-a 6 | 23.42 7 | some package A 8 | false 9 | 10 | 11 | package-b 12 | 23.42 13 | some package B 14 | false 15 | 16 | 17 | package-c 18 | 23.42 19 | some package C 20 | false 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_local_lock20_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | package-a 6 | 23.42 7 | some package A 8 | false 9 | 10 | 11 | package-b 12 | 23.42 13 | some package B 14 | false 15 | 16 | 17 | package-c 18 | 23.42 19 | some package C 20 | false 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_local_lock21_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | package-a 6 | 23.42 7 | some package A 8 | false 9 | 10 | 11 | package-b 12 | 23.42 13 | some package B 14 | false 15 | 16 | 17 | package-c 18 | 23.42 19 | some package C 20 | false 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_no-deps_lock20_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_no-deps_lock20_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_no-deps_lock21_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_no-deps_lock21_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_normalize-packagename_lock20_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ruamel-yaml 6 | 0.18.5 7 | ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order 8 | pkg:pypi/ruamel-yaml@0.18.5 9 | false 10 | 11 | 12 | ruamel-yaml-clib 13 | 0.2.8 14 | C version of reader, parser and emitter for ruamel.yaml derived from libyaml 15 | pkg:pypi/ruamel-yaml-clib@0.2.8 16 | false 17 | 18 | 19 | ruamel-yaml-jinja2 20 | 0.2.7 21 | jinja2 pre and post-processor to update with YAML 22 | pkg:pypi/ruamel-yaml-jinja2@0.2.7 23 | false 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_normalize-packagename_lock21_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ruamel-yaml 6 | 0.18.10 7 | ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order 8 | pkg:pypi/ruamel-yaml@0.18.10 9 | false 10 | 11 | 12 | ruamel-yaml-clib 13 | 0.2.8 14 | C version of reader, parser and emitter for ruamel.yaml derived from libyaml 15 | pkg:pypi/ruamel-yaml-clib@0.2.8 16 | false 17 | 18 | 19 | ruamel-yaml-jinja2 20 | 0.2.7 21 | jinja2 pre and post-processor to update with YAML 22 | pkg:pypi/ruamel-yaml-jinja2@0.2.7 23 | false 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_private-packges_lock10_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | colorama 6 | 0.4.6 7 | Cross-platform colored terminal text. 8 | pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple 9 | false 10 | 11 | 12 | six 13 | 1.16.0 14 | Python 2 and 3 compatibility utilities 15 | pkg:pypi/six@1.16.0?download_url=https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl 16 | false 17 | 18 | 19 | toml 20 | 0.10.2 21 | Python Library for Tom's Obvious, Minimal Language 22 | pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple 23 | false 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_private-packges_lock11_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | colorama 6 | 0.4.6 7 | Cross-platform colored terminal text. 8 | pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple 9 | false 10 | 11 | 12 | six 13 | 1.16.0 14 | Python 2 and 3 compatibility utilities 15 | pkg:pypi/six@1.16.0?download_url=https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl 16 | false 17 | 18 | 19 | toml 20 | 0.10.2 21 | Python Library for Tom's Obvious, Minimal Language 22 | pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple 23 | false 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_regression-issue611_lock20_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | pyhumps 6 | 3.7.1 7 | 🐫 Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node 8 | pkg:pypi/pyhumps@3.7.1 9 | false 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_regression-issue611_lock20_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | pyhumps 6 | 3.7.1 7 | 🐫 Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node 8 | pkg:pypi/pyhumps@3.7.1 9 | 10 | 11 | https://pypi.org/simple/pyhumps/#pyhumps-3.7.1-py3-none-any.whl 12 | from legacy-api 13 | 14 | 15 | https://pypi.org/simple/pyhumps/#pyhumps-3.7.1.tar.gz 16 | from legacy-api 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_regression-issue611_lock21_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | pyhumps 6 | 3.7.1 7 | 🐫 Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node 8 | pkg:pypi/pyhumps@3.7.1 9 | false 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_regression-issue611_lock21_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | pyhumps 6 | 3.7.1 7 | 🐫 Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node 8 | pkg:pypi/pyhumps@3.7.1 9 | 10 | 11 | https://pypi.org/simple/pyhumps/#pyhumps-3.7.1-py3-none-any.whl 12 | from legacy-api 13 | 14 | 15 | https://pypi.org/simple/pyhumps/#pyhumps-3.7.1.tar.gz 16 | from legacy-api 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock10_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock10_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock10_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-extras" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-extras", 10 | "description": "depenndencies with extras", 11 | "name": "with-extras", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "tools": [ 16 | { 17 | "name": "cyclonedx-py", 18 | "vendor": "CycloneDX", 19 | "version": "thisVersion-testing" 20 | }, 21 | { 22 | "name": "cyclonedx-python-lib", 23 | "vendor": "CycloneDX", 24 | "version": "libVersion-testing" 25 | } 26 | ] 27 | }, 28 | "version": 1, 29 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 30 | "bomFormat": "CycloneDX", 31 | "specVersion": "1.2" 32 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock10_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-extras 18 | 0.1.0 19 | depenndencies with extras 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock10_1.3.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-extras" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-extras", 10 | "description": "depenndencies with extras", 11 | "name": "with-extras", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "properties": [ 16 | { 17 | "name": "cdx:reproducible", 18 | "value": "true" 19 | } 20 | ], 21 | "tools": [ 22 | { 23 | "name": "cyclonedx-py", 24 | "vendor": "CycloneDX", 25 | "version": "thisVersion-testing" 26 | }, 27 | { 28 | "name": "cyclonedx-python-lib", 29 | "vendor": "CycloneDX", 30 | "version": "libVersion-testing" 31 | } 32 | ] 33 | }, 34 | "version": 1, 35 | "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", 36 | "bomFormat": "CycloneDX", 37 | "specVersion": "1.3" 38 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock10_1.3.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-extras 18 | 0.1.0 19 | depenndencies with extras 20 | 21 | 22 | true 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock11_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock11_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock11_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-extras" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-extras", 10 | "description": "depenndencies with extras", 11 | "name": "with-extras", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "tools": [ 16 | { 17 | "name": "cyclonedx-py", 18 | "vendor": "CycloneDX", 19 | "version": "thisVersion-testing" 20 | }, 21 | { 22 | "name": "cyclonedx-python-lib", 23 | "vendor": "CycloneDX", 24 | "version": "libVersion-testing" 25 | } 26 | ] 27 | }, 28 | "version": 1, 29 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 30 | "bomFormat": "CycloneDX", 31 | "specVersion": "1.2" 32 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock11_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-extras 18 | 0.1.0 19 | depenndencies with extras 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock11_1.3.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-extras" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-extras", 10 | "description": "depenndencies with extras", 11 | "name": "with-extras", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "properties": [ 16 | { 17 | "name": "cdx:reproducible", 18 | "value": "true" 19 | } 20 | ], 21 | "tools": [ 22 | { 23 | "name": "cyclonedx-py", 24 | "vendor": "CycloneDX", 25 | "version": "thisVersion-testing" 26 | }, 27 | { 28 | "name": "cyclonedx-python-lib", 29 | "vendor": "CycloneDX", 30 | "version": "libVersion-testing" 31 | } 32 | ] 33 | }, 34 | "version": 1, 35 | "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", 36 | "bomFormat": "CycloneDX", 37 | "specVersion": "1.3" 38 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock11_1.3.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-extras 18 | 0.1.0 19 | depenndencies with extras 20 | 21 | 22 | true 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock20_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock20_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock20_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-extras" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-extras", 10 | "description": "depenndencies with extras", 11 | "name": "with-extras", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "tools": [ 16 | { 17 | "name": "cyclonedx-py", 18 | "vendor": "CycloneDX", 19 | "version": "thisVersion-testing" 20 | }, 21 | { 22 | "name": "cyclonedx-python-lib", 23 | "vendor": "CycloneDX", 24 | "version": "libVersion-testing" 25 | } 26 | ] 27 | }, 28 | "version": 1, 29 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 30 | "bomFormat": "CycloneDX", 31 | "specVersion": "1.2" 32 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock20_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-extras 18 | 0.1.0 19 | depenndencies with extras 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock20_1.3.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-extras" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-extras", 10 | "description": "depenndencies with extras", 11 | "name": "with-extras", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "properties": [ 16 | { 17 | "name": "cdx:reproducible", 18 | "value": "true" 19 | } 20 | ], 21 | "tools": [ 22 | { 23 | "name": "cyclonedx-py", 24 | "vendor": "CycloneDX", 25 | "version": "thisVersion-testing" 26 | }, 27 | { 28 | "name": "cyclonedx-python-lib", 29 | "vendor": "CycloneDX", 30 | "version": "libVersion-testing" 31 | } 32 | ] 33 | }, 34 | "version": 1, 35 | "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", 36 | "bomFormat": "CycloneDX", 37 | "specVersion": "1.3" 38 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock20_1.3.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-extras 18 | 0.1.0 19 | depenndencies with extras 20 | 21 | 22 | true 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock21_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock21_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock21_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-extras" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-extras", 10 | "description": "depenndencies with extras", 11 | "name": "with-extras", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "tools": [ 16 | { 17 | "name": "cyclonedx-py", 18 | "vendor": "CycloneDX", 19 | "version": "thisVersion-testing" 20 | }, 21 | { 22 | "name": "cyclonedx-python-lib", 23 | "vendor": "CycloneDX", 24 | "version": "libVersion-testing" 25 | } 26 | ] 27 | }, 28 | "version": 1, 29 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 30 | "bomFormat": "CycloneDX", 31 | "specVersion": "1.2" 32 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock21_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-extras 18 | 0.1.0 19 | depenndencies with extras 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock21_1.3.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-extras" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-extras", 10 | "description": "depenndencies with extras", 11 | "name": "with-extras", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "properties": [ 16 | { 17 | "name": "cdx:reproducible", 18 | "value": "true" 19 | } 20 | ], 21 | "tools": [ 22 | { 23 | "name": "cyclonedx-py", 24 | "vendor": "CycloneDX", 25 | "version": "thisVersion-testing" 26 | }, 27 | { 28 | "name": "cyclonedx-python-lib", 29 | "vendor": "CycloneDX", 30 | "version": "libVersion-testing" 31 | } 32 | ] 33 | }, 34 | "version": 1, 35 | "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", 36 | "bomFormat": "CycloneDX", 37 | "specVersion": "1.3" 38 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-extras_lock21_1.3.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-extras 18 | 0.1.0 19 | depenndencies with extras 20 | 21 | 22 | true 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock10_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock10_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock10_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-optionals-no-extra" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-optionals-no-extra", 10 | "description": "depenndencies with optionlas and no exgtras", 11 | "name": "with-optionals-no-extra", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "tools": [ 16 | { 17 | "name": "cyclonedx-py", 18 | "vendor": "CycloneDX", 19 | "version": "thisVersion-testing" 20 | }, 21 | { 22 | "name": "cyclonedx-python-lib", 23 | "vendor": "CycloneDX", 24 | "version": "libVersion-testing" 25 | } 26 | ] 27 | }, 28 | "version": 1, 29 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 30 | "bomFormat": "CycloneDX", 31 | "specVersion": "1.2" 32 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock10_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-optionals-no-extra 18 | 0.1.0 19 | depenndencies with optionlas and no exgtras 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock10_1.3.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-optionals-no-extra" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-optionals-no-extra", 10 | "description": "depenndencies with optionlas and no exgtras", 11 | "name": "with-optionals-no-extra", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "properties": [ 16 | { 17 | "name": "cdx:reproducible", 18 | "value": "true" 19 | } 20 | ], 21 | "tools": [ 22 | { 23 | "name": "cyclonedx-py", 24 | "vendor": "CycloneDX", 25 | "version": "thisVersion-testing" 26 | }, 27 | { 28 | "name": "cyclonedx-python-lib", 29 | "vendor": "CycloneDX", 30 | "version": "libVersion-testing" 31 | } 32 | ] 33 | }, 34 | "version": 1, 35 | "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", 36 | "bomFormat": "CycloneDX", 37 | "specVersion": "1.3" 38 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock10_1.3.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-optionals-no-extra 18 | 0.1.0 19 | depenndencies with optionlas and no exgtras 20 | 21 | 22 | true 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock11_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock11_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock11_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-optionals-no-extra" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-optionals-no-extra", 10 | "description": "depenndencies with optionlas and no exgtras", 11 | "name": "with-optionals-no-extra", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "tools": [ 16 | { 17 | "name": "cyclonedx-py", 18 | "vendor": "CycloneDX", 19 | "version": "thisVersion-testing" 20 | }, 21 | { 22 | "name": "cyclonedx-python-lib", 23 | "vendor": "CycloneDX", 24 | "version": "libVersion-testing" 25 | } 26 | ] 27 | }, 28 | "version": 1, 29 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 30 | "bomFormat": "CycloneDX", 31 | "specVersion": "1.2" 32 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock11_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-optionals-no-extra 18 | 0.1.0 19 | depenndencies with optionlas and no exgtras 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock11_1.3.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-optionals-no-extra" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-optionals-no-extra", 10 | "description": "depenndencies with optionlas and no exgtras", 11 | "name": "with-optionals-no-extra", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "properties": [ 16 | { 17 | "name": "cdx:reproducible", 18 | "value": "true" 19 | } 20 | ], 21 | "tools": [ 22 | { 23 | "name": "cyclonedx-py", 24 | "vendor": "CycloneDX", 25 | "version": "thisVersion-testing" 26 | }, 27 | { 28 | "name": "cyclonedx-python-lib", 29 | "vendor": "CycloneDX", 30 | "version": "libVersion-testing" 31 | } 32 | ] 33 | }, 34 | "version": 1, 35 | "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", 36 | "bomFormat": "CycloneDX", 37 | "specVersion": "1.3" 38 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock11_1.3.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-optionals-no-extra 18 | 0.1.0 19 | depenndencies with optionlas and no exgtras 20 | 21 | 22 | true 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock20_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock20_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock20_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-optionals-no-extra" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-optionals-no-extra", 10 | "description": "depenndencies with optionlas and no exgtras", 11 | "name": "with-optionals-no-extra", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "tools": [ 16 | { 17 | "name": "cyclonedx-py", 18 | "vendor": "CycloneDX", 19 | "version": "thisVersion-testing" 20 | }, 21 | { 22 | "name": "cyclonedx-python-lib", 23 | "vendor": "CycloneDX", 24 | "version": "libVersion-testing" 25 | } 26 | ] 27 | }, 28 | "version": 1, 29 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 30 | "bomFormat": "CycloneDX", 31 | "specVersion": "1.2" 32 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock20_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-optionals-no-extra 18 | 0.1.0 19 | depenndencies with optionlas and no exgtras 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock20_1.3.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-optionals-no-extra" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-optionals-no-extra", 10 | "description": "depenndencies with optionlas and no exgtras", 11 | "name": "with-optionals-no-extra", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "properties": [ 16 | { 17 | "name": "cdx:reproducible", 18 | "value": "true" 19 | } 20 | ], 21 | "tools": [ 22 | { 23 | "name": "cyclonedx-py", 24 | "vendor": "CycloneDX", 25 | "version": "thisVersion-testing" 26 | }, 27 | { 28 | "name": "cyclonedx-python-lib", 29 | "vendor": "CycloneDX", 30 | "version": "libVersion-testing" 31 | } 32 | ] 33 | }, 34 | "version": 1, 35 | "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", 36 | "bomFormat": "CycloneDX", 37 | "specVersion": "1.3" 38 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock20_1.3.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-optionals-no-extra 18 | 0.1.0 19 | depenndencies with optionlas and no exgtras 20 | 21 | 22 | true 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock21_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock21_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock21_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-optionals-no-extra" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-optionals-no-extra", 10 | "description": "depenndencies with optionlas and no exgtras", 11 | "name": "with-optionals-no-extra", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "tools": [ 16 | { 17 | "name": "cyclonedx-py", 18 | "vendor": "CycloneDX", 19 | "version": "thisVersion-testing" 20 | }, 21 | { 22 | "name": "cyclonedx-python-lib", 23 | "vendor": "CycloneDX", 24 | "version": "libVersion-testing" 25 | } 26 | ] 27 | }, 28 | "version": 1, 29 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 30 | "bomFormat": "CycloneDX", 31 | "specVersion": "1.2" 32 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock21_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-optionals-no-extra 18 | 0.1.0 19 | depenndencies with optionlas and no exgtras 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock21_1.3.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "ref": "with-optionals-no-extra" 5 | } 6 | ], 7 | "metadata": { 8 | "component": { 9 | "bom-ref": "with-optionals-no-extra", 10 | "description": "depenndencies with optionlas and no exgtras", 11 | "name": "with-optionals-no-extra", 12 | "type": "application", 13 | "version": "0.1.0" 14 | }, 15 | "properties": [ 16 | { 17 | "name": "cdx:reproducible", 18 | "value": "true" 19 | } 20 | ], 21 | "tools": [ 22 | { 23 | "name": "cyclonedx-py", 24 | "vendor": "CycloneDX", 25 | "version": "thisVersion-testing" 26 | }, 27 | { 28 | "name": "cyclonedx-python-lib", 29 | "vendor": "CycloneDX", 30 | "version": "libVersion-testing" 31 | } 32 | ] 33 | }, 34 | "version": 1, 35 | "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", 36 | "bomFormat": "CycloneDX", 37 | "specVersion": "1.3" 38 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/poetry/plain_with-optionals-no-extra_lock21_1.3.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | with-optionals-no-extra 18 | 0.1.0 19 | depenndencies with optionlas and no exgtras 20 | 21 | 22 | true 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/file_frozen_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FooProject 6 | 1.2 7 | requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 8 | pkg:pypi/fooproject@1.2 9 | false 10 | 11 | 12 | colorama 13 | 0.4.6 14 | requirements line 4: colorama==0.4.6 15 | pkg:pypi/colorama@0.4.6 16 | false 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/file_frozen_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FooProject 6 | 1.2 7 | requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 8 | pkg:pypi/fooproject@1.2 9 | 10 | 11 | https://pypi.org/simple/FooProject/ 12 | implicit dist url 13 | 14 | 15 | 16 | 17 | colorama 18 | 0.4.6 19 | requirements line 4: colorama==0.4.6 20 | pkg:pypi/colorama@0.4.6 21 | 22 | 23 | https://pypi.org/simple/colorama/ 24 | implicit dist url 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/file_nested_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FooProject 6 | 1.2 7 | requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 8 | pkg:pypi/fooproject@1.2 9 | false 10 | 11 | 12 | colorama 13 | 0.4.6 14 | requirements line 4: colorama==0.4.6 15 | pkg:pypi/colorama@0.4.6 16 | false 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/file_nested_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FooProject 6 | 1.2 7 | requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 8 | pkg:pypi/fooproject@1.2 9 | 10 | 11 | https://pypi.org/simple/FooProject/ 12 | implicit dist url 13 | 14 | 15 | 16 | 17 | colorama 18 | 0.4.6 19 | requirements line 4: colorama==0.4.6 20 | pkg:pypi/colorama@0.4.6 21 | 22 | 23 | https://pypi.org/simple/colorama/ 24 | implicit dist url 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/file_private-packages_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | my-other-package 6 | 7 | requirements line 9: my-other-package @ https://pypackages.acme.org/my-other-package-1.2.3.tar.gz 8 | pkg:pypi/my-other-package?download_url=https://pypackages.acme.org/my-other-package-1.2.3.tar.gz 9 | false 10 | 11 | 12 | my-package 13 | 1.2.3 14 | requirements line 7: my-package==1.2.3 15 | pkg:pypi/my-package@1.2.3 16 | false 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | packageurl-python 6 | 7 | requirements line 6: packageurl-python>=0.9.4 8 | pkg:pypi/packageurl-python 9 | false 10 | 11 | 12 | requirements_parser 13 | 14 | requirements line 7: requirements_parser>=0.2.0 15 | pkg:pypi/requirements-parser 16 | false 17 | 18 | 19 | setuptools 20 | 21 | requirements line 8: setuptools>=50.3.2 22 | pkg:pypi/setuptools 23 | false 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/file_with-extras_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | cyclonedx-python-lib 6 | 5.1.1 7 | requirements line 4: cyclonedx-python-lib[JSON-validation,xml-Validation] == 5.1.1 8 | pkg:pypi/cyclonedx-python-lib@5.1.1 9 | false 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/file_with-extras_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | cyclonedx-python-lib 6 | 5.1.1 7 | requirements line 4: cyclonedx-python-lib[JSON-validation,xml-Validation] == 5.1.1 8 | pkg:pypi/cyclonedx-python-lib@5.1.1 9 | 10 | 11 | https://pypi.org/simple/cyclonedx-python-lib/ 12 | implicit dist url 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/file_without-pinned-versions_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | certifi 6 | 7 | requirements line 1: certifi>=2023.11.17 8 | pkg:pypi/certifi 9 | false 10 | 11 | 12 | chardet 13 | 14 | requirements line 2: chardet >= 4.0.0 , < 5 15 | pkg:pypi/chardet 16 | false 17 | 18 | 19 | urllib3 20 | 21 | requirements line 3: urllib3 22 | pkg:pypi/urllib3 23 | false 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/index_auth_frozen_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FooProject 6 | 1.2 7 | requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 8 | pkg:pypi/fooproject@1.2 9 | false 10 | 11 | 12 | colorama 13 | 0.4.6 14 | requirements line 4: colorama==0.4.6 15 | pkg:pypi/colorama@0.4.6 16 | false 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_frozen_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FooProject 6 | 1.2 7 | requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 8 | pkg:pypi/fooproject@1.2 9 | false 10 | 11 | 12 | colorama 13 | 0.4.6 14 | requirements line 4: colorama==0.4.6 15 | pkg:pypi/colorama@0.4.6 16 | false 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_frozen_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FooProject 6 | 1.2 7 | requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 8 | pkg:pypi/fooproject@1.2 9 | 10 | 11 | https://pypi.org/simple/FooProject/ 12 | implicit dist url 13 | 14 | 15 | 16 | 17 | colorama 18 | 0.4.6 19 | requirements line 4: colorama==0.4.6 20 | pkg:pypi/colorama@0.4.6 21 | 22 | 23 | https://pypi.org/simple/colorama/ 24 | implicit dist url 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_nested_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_nested_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_nested_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": { 3 | "tools": [ 4 | { 5 | "name": "cyclonedx-py", 6 | "vendor": "CycloneDX", 7 | "version": "thisVersion-testing" 8 | }, 9 | { 10 | "name": "cyclonedx-python-lib", 11 | "vendor": "CycloneDX", 12 | "version": "libVersion-testing" 13 | } 14 | ] 15 | }, 16 | "version": 1, 17 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 18 | "bomFormat": "CycloneDX", 19 | "specVersion": "1.2" 20 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_nested_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_nested_1.3.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": { 3 | "properties": [ 4 | { 5 | "name": "cdx:reproducible", 6 | "value": "true" 7 | } 8 | ], 9 | "tools": [ 10 | { 11 | "name": "cyclonedx-py", 12 | "vendor": "CycloneDX", 13 | "version": "thisVersion-testing" 14 | }, 15 | { 16 | "name": "cyclonedx-python-lib", 17 | "vendor": "CycloneDX", 18 | "version": "libVersion-testing" 19 | } 20 | ] 21 | }, 22 | "version": 1, 23 | "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", 24 | "bomFormat": "CycloneDX", 25 | "specVersion": "1.3" 26 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_nested_1.3.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | true 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_private-packages_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | my-other-package 6 | 7 | requirements line 9: my-other-package @ https://pypackages.acme.org/my-other-package-1.2.3.tar.gz 8 | pkg:pypi/my-other-package?download_url=https://pypackages.acme.org/my-other-package-1.2.3.tar.gz 9 | false 10 | 11 | 12 | my-package 13 | 1.2.3 14 | requirements line 7: my-package==1.2.3 15 | pkg:pypi/my-package@1.2.3 16 | false 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | packageurl-python 6 | 7 | requirements line 6: packageurl-python>=0.9.4 8 | pkg:pypi/packageurl-python 9 | false 10 | 11 | 12 | requirements_parser 13 | 14 | requirements line 7: requirements_parser>=0.2.0 15 | pkg:pypi/requirements-parser 16 | false 17 | 18 | 19 | setuptools 20 | 21 | requirements line 8: setuptools>=50.3.2 22 | pkg:pypi/setuptools 23 | false 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_with-extras_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | cyclonedx-python-lib 6 | 5.1.1 7 | requirements line 4: cyclonedx-python-lib[JSON-validation,xml-Validation] == 5.1.1 8 | pkg:pypi/cyclonedx-python-lib@5.1.1 9 | false 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_with-extras_1.1.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | cyclonedx-python-lib 6 | 5.1.1 7 | requirements line 4: cyclonedx-python-lib[JSON-validation,xml-Validation] == 5.1.1 8 | pkg:pypi/cyclonedx-python-lib@5.1.1 9 | 10 | 11 | https://pypi.org/simple/cyclonedx-python-lib/ 12 | implicit dist url 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_with-extras_1.2.json.bin: -------------------------------------------------------------------------------- 1 | { 2 | "components": [ 3 | { 4 | "bom-ref": "requirements-L4", 5 | "description": "requirements line 4: cyclonedx-python-lib[JSON-validation,xml-Validation] == 5.1.1", 6 | "externalReferences": [ 7 | { 8 | "comment": "implicit dist url", 9 | "type": "distribution", 10 | "url": "https://pypi.org/simple/cyclonedx-python-lib/" 11 | } 12 | ], 13 | "name": "cyclonedx-python-lib", 14 | "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", 15 | "type": "library", 16 | "version": "5.1.1" 17 | } 18 | ], 19 | "dependencies": [ 20 | { 21 | "ref": "requirements-L4" 22 | } 23 | ], 24 | "metadata": { 25 | "tools": [ 26 | { 27 | "name": "cyclonedx-py", 28 | "vendor": "CycloneDX", 29 | "version": "thisVersion-testing" 30 | }, 31 | { 32 | "name": "cyclonedx-python-lib", 33 | "vendor": "CycloneDX", 34 | "version": "libVersion-testing" 35 | } 36 | ] 37 | }, 38 | "version": 1, 39 | "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", 40 | "bomFormat": "CycloneDX", 41 | "specVersion": "1.2" 42 | } -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_with-extras_1.2.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CycloneDX 7 | cyclonedx-py 8 | thisVersion-testing 9 | 10 | 11 | CycloneDX 12 | cyclonedx-python-lib 13 | libVersion-testing 14 | 15 | 16 | 17 | 18 | 19 | cyclonedx-python-lib 20 | 5.1.1 21 | requirements line 4: cyclonedx-python-lib[JSON-validation,xml-Validation] == 5.1.1 22 | pkg:pypi/cyclonedx-python-lib@5.1.1 23 | 24 | 25 | https://pypi.org/simple/cyclonedx-python-lib/ 26 | implicit dist url 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /tests/_data/snapshots/requirements/stream_without-pinned-versions_1.0.xml.bin: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | certifi 6 | 7 | requirements line 1: certifi>=2023.11.17 8 | pkg:pypi/certifi 9 | false 10 | 11 | 12 | chardet 13 | 14 | requirements line 2: chardet >= 4.0.0 , < 5 15 | pkg:pypi/chardet 16 | false 17 | 18 | 19 | urllib3 20 | 21 | requirements line 3: urllib3 22 | pkg:pypi/urllib3 23 | false 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /tests/functional/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | -------------------------------------------------------------------------------- /tests/functional/test_license_trove_classifier.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | 18 | 19 | from unittest import TestCase 20 | 21 | from cyclonedx.spdx import is_supported_id 22 | from ddt import ddt, named_data 23 | 24 | from cyclonedx_py._internal.utils.license_trove_classifier import _MAP_TO_SPDX 25 | 26 | 27 | @ddt 28 | class TestLicenseTroveClassifier(TestCase): 29 | 30 | @named_data(*_MAP_TO_SPDX.items()) 31 | def test_map_is_known_id(self, mapped: str) -> None: 32 | self.assertTrue(is_supported_id(mapped)) 33 | -------------------------------------------------------------------------------- /tests/unit/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is part of CycloneDX Python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # SPDX-License-Identifier: Apache-2.0 16 | # Copyright (c) OWASP Foundation. All Rights Reserved. 17 | --------------------------------------------------------------------------------