diff --git a/.envrc b/.envrc new file mode 100644 index 00000000..72c4d136 --- /dev/null +++ b/.envrc @@ -0,0 +1,3 @@ +# https://pipenv.pypa.io/en/latest/configuration.html +export PIPENV_IGNORE_VIRTUALENVS=1 + diff --git a/.flake8 b/.flake8 index cdf555de..31a787d5 100644 --- a/.flake8 +++ b/.flake8 @@ -11,7 +11,7 @@ exclude = max-line-length = 120 -#max-complexity = 10 +max-complexity = 15 ignore = # ignore `self`, `cls` markers of flake8-annotations>=2.0 diff --git a/.github/ISSUE_TEMPLATE/ValidationError-report.md b/.github/ISSUE_TEMPLATE/ValidationError-report.md index 77285d4a..50e7a5cc 100644 --- a/.github/ISSUE_TEMPLATE/ValidationError-report.md +++ b/.github/ISSUE_TEMPLATE/ValidationError-report.md @@ -12,14 +12,14 @@ assignees: '' Steps to reproduce the behavior: 1. How was _cyclonedx-py_ called? - + 2. What kind of evidence was processed? 3. Error report: 4. Expected result: ## Environment diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 78b73ee6..45edf8df 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -32,33 +32,27 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 - - name: setup reports-dir run: mkdir "$REPORTS_DIR" - - name: Setup python ${{ env.PYTHON_VERSION }} # see https://github.com/actions/setup-python uses: actions/setup-python@v5 with: python-version: ${{ env.PYTHON_VERSION }} architecture: 'x64' - - name: Setup poetry ${{ env.POETRY_VERSION }} # see https://github.com/marketplace/actions/setup-poetry uses: Gr1N/setup-poetry@v8 with: poetry-version: ${{ env.POETRY_VERSION }} - - name: bump version id: bump-version run: | VERSION="${{ github.run_id }}.${{ github.run_number }}.${{ github.run_attempt }}+testing" poetry version "$VERSION" echo "version=$VERSION" >> $GITHUB_OUTPUT - - name: Poetry build run: poetry build - - name: Artifact python dist if: | !failure() && !cancelled() && @@ -69,7 +63,6 @@ jobs: name: ${{ env.RUN_ARTIFACT_PYTHON_DIST }} path: ${{ env.DIST_SOURCE_DIR }}/ if-no-files-found: warn - - name: Build Docker image env: VERSION: ${{ steps.bump-version.outputs.version }} @@ -78,25 +71,20 @@ jobs: --build-arg "VERSION=$VERSION" -t "$DOCKER_TAG" . - - name: Build own SBoM (XML) run: > docker run --rm "$DOCKER_TAG" - -X - --environment - --format=xml - --output=- + environment + -vvv + --output-format XML > "$REPORTS_DIR/docker-image.bom.xml" - - name: Build own SBoM (JSON) run: > docker run --rm "$DOCKER_TAG" - -X - --environment - --format=json - --output=- + environment + -vvv + --output-format JSON > "$REPORTS_DIR/docker-image.bom.json" - - name: Artifact reports if: ${{ ! cancelled() }} # see https://github.com/actions/upload-artifact @@ -105,7 +93,6 @@ jobs: name: ${{ env.REPORTS_ARTIFACT }} path: ${{ env.REPORTS_DIR }} if-no-files-found: error - - name: Destroy Docker image # run regardless of outcome if: ${{ always() }} diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index ad426221..4be2eb0c 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -36,6 +36,7 @@ env: POETRY_VERSION: "1.4.1" REPORTS_DIR: CI_reports TESTS_REPORTS_ARTIFACT: tests-reports + PIPENV_VENV_IN_PROJECT: 1 jobs: coding-standards: @@ -63,21 +64,19 @@ jobs: run: poetry run tox r -e flake8 -s false static-code-analysis: - name: Static Coding Analysis (py${{ matrix.python-version}} ${{ matrix.toxenv-factor }}) + name: StaticCodingAnalysis (py${{ matrix.python-version}} ${{ matrix.toxenv-factors }}) runs-on: ${{ matrix.os }} timeout-minutes: 10 strategy: fail-fast: false matrix: include: - - # test with the locked dependencies - python-version: '3.11' - toxenv-factor: 'locked' + - python-version: '3.12' os: ubuntu-latest - - # test with the lowest dependencies - python-version: '3.8' - toxenv-factor: 'lowest' + toxenv-factors: '-current' + - python-version: '3.8' os: ubuntu-latest + toxenv-factors: '-lowest' steps: - name: Checkout # see https://github.com/actions/checkout @@ -96,7 +95,7 @@ jobs: - name: Install dependencies run: poetry install --no-root - name: Run tox - run: poetry run tox r -e mypy-${{ matrix.toxenv-factor }} -s false + run: poetry run tox r -e mypy${{ matrix.toxenv-factors }} -s false security-issues: name: find Security Issues @@ -122,8 +121,37 @@ jobs: - name: Run tox run: poetry run tox run -e bandit -s false + install-and-run: + name: install & run "${{matrix.command}}" (${{matrix.os}}) + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + command: + - cyclonedx-py --help + - python -m cyclonedx_py --help + os: + - ubuntu-latest + - macos-latest + - windows-latest + steps: + - name: Checkout + # see https://github.com/actions/checkout + uses: actions/checkout@v4 + - name: Setup Python Environment + # see https://github.com/actions/setup-python + uses: actions/setup-python@v4 + with: + python-version: ${{ env.PYTHON_VERSION_DEFAULT }} + architecture: 'x64' + - name: Install self + run: pip install . + - name: run command + run: ${{matrix.command}} + build-and-test: - name: Test (${{ matrix.os }} py${{ matrix.python-version }} ${{ matrix.toxenv-factor }}) + name: Test (${{ matrix.os }} py${{ matrix.python-version }}) runs-on: ${{ matrix.os }} timeout-minutes: 10 strategy: @@ -134,22 +162,11 @@ jobs: - macos-latest - windows-latest python-version: - - "3.11" # highest supported + - "3.12" # highest supported + - "3.11" - "3.10" - "3.9" - "3.8" # lowest supported -- handled in include - toxenv-factor: ['locked'] - include: - # test with the lowest dependencies - - os: ubuntu-latest - python-version: '3.8' - toxenv-factor: 'lowest' - - os: macos-latest - python-version: '3.8' - toxenv-factor: 'lowest' - - os: windows-latest - python-version: '3.8' - toxenv-factor: 'lowest' steps: - name: Checkout # see https://github.com/actions/checkout @@ -172,14 +189,14 @@ jobs: - name: Ensure build successful run: poetry build - name: Run tox - run: poetry run tox r -e py-${{ matrix.toxenv-factor }} -s false + run: poetry run tox r -e py -s false - name: Generate coverage reports if: ${{ failure() || success() }} shell: bash run: | set -eux poetry run coverage report -m - poetry run coverage xml -o '${{ env.REPORTS_DIR }}/coverage/${{ matrix.os }}_${{ matrix.python-version }}_${{ matrix.toxenv-factor }}.cobertura.xml' + poetry run coverage xml -o '${{ env.REPORTS_DIR }}/coverage/${{ matrix.os }}_${{ matrix.python-version }}.cobertura.xml' - name: Artifact reports if: ${{ ! cancelled() }} # see https://github.com/actions/upload-artifact diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1022ae1b..01bab0c0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -150,16 +150,16 @@ jobs: - name: Build own SBoM (XML) run: > docker run --rm "$DOCKER_REPO:$VERSION" - --environment - --format=xml - --output=- + environment + -vvv + --output-format XML > "$REPORTS_DIR/$ARTIFACT_DOCKER_SBOM.bom.xml" - name: Build own SBoM (JSON) run: > docker run --rm "$DOCKER_REPO:$VERSION" - --environment - --format=json - --output=- + environment + -vvv + --output-format JSON > "$REPORTS_DIR/$ARTIFACT_DOCKER_SBOM.bom.json" - name: Artifact reports if: ${{ ! cancelled() }} diff --git a/.gitignore b/.gitignore index 1f87e87c..e8caa947 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1,171 @@ -# Exlude python build & distribution directories + +test-reports + +# Exlude IDE related files +.idea/ +.vscode/ + + + +### source: https://github.com/github/gitignore/blob/main/Python.gitignore + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python build/ +develop-eggs/ dist/ -*.egg-info* +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST -# Exlude *.pyc -*.pyc +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec -# Exclude test-related items -.tox/* +# Installer logs +pip-log.txt +pip-delete-this-directory.txt -# Exclude coverage +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ .coverage -test-reports +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ -# Exclude Python Virtual Environment +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +/Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +/poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +/pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +/.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ venv/ -.venv/ +ENV/ +env.bak/ +venv.bak/ -# Exlude IDE related files -.idea/* -.vscode/* +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ -# Exclude generated docs -docs/_build \ No newline at end of file +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 19a1219e..9b2a6156 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,6 +26,10 @@ poetry run isort . poetry run autopep8 -ir cyclonedx_py/ tests/ ``` +This project prefers `f'strings'` over `'string'.format()`. +This project prefers `'single quotes'` over `"double quotes"`. +This project prefers `lower_snake_case` variable names. + ## Documentation This project uses [Sphinx] to generate documentation which is automatically published to [RTFD][link_rtfd]. diff --git a/Dockerfile b/Dockerfile index 0c19e940..7ce4d8f2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,22 @@ -FROM python:3.10-slim-buster +FROM python:3.11-slim ARG VERSION -COPY ./dist /tmp/dist -RUN pip install cyclonedx-bom==${VERSION} --find-links file:///tmp/dist +ARG CDX_PATH=/url/local/cyclonedx-py +ARG CDX_VENV=${CDX_PATH}/venv + +RUN mkdir -p "${CDX_PATH}" +RUN python -m venv --without-pip "${CDX_VENV}" +ENV VIRTUAL_ENV=${CDX_VENV} +ENV PATH=${VIRTUAL_ENV}/bin:${PATH} + +COPY ./dist ${CDX_PATH}/dist +RUN pip --python "${CDX_VENV}" \ + install --no-cache-dir --no-input --progress-bar=off \ + --verbose --debug \ + --prefix "${CDX_VENV}" --require-virtualenv \ + --compile \ + "cyclonedx-bom==${VERSION}" --find-links "file://${CDX_PATH}/dist" +RUN rm -rf ${CDX_PATH}/dist + ENTRYPOINT ["cyclonedx-py"] diff --git a/README.md b/README.md index 160e1676..dd2d62c4 100644 --- a/README.md +++ b/README.md @@ -13,32 +13,34 @@ ---- -This project provides a runnable Python-based application for generating CycloneDX bill-of-material documents from either: +This project provides a runnable Python-based application +for generating Software Bill of material (BOM) documents in [CycloneDX](https://cyclonedx.org/) format +from: -* Your current Python Environment -* Your project's manifest (e.g. `Pipfile.lock`, `poetry.lock` or `requirements.txt`) -* Conda as a Package Manager +* Python (virtual) environment +* `Poetry` manifest +* `Pipenv` manifest +* Pip's `requirements.txt` format +* `Conda` as a Package Manager is no longer supported since version 4. + However, `conda`'s Python environments are fully supported via the methods listed above. -The BOM will contain an aggregate of all your current project's dependencies, or those defined by the manifest you supply. +The SBOM will contain an aggregate of all your current project's dependencies, or those defined by the manifest you supply. -[CycloneDX](https://cyclonedx.org/) is a lightweight BOM specification that is easily created, human-readable, and simple to parse. +CycloneDX is a full-stack BOM specification that is easily created, human-readable, and simple to parse. Read the full [documentation][link_rtfd] for more details. ## Installation -Install this from [PyPi.org][link_pypi] using your preferred Python package manager. +Install this from [Python Package Index (PyPI)][link_pypi] using your preferred Python package manager. -Example using `pip`: +install via one of commands: ```shell -pip install cyclonedx-bom -``` - -Example using `poetry`: - -```shell -poetry add cyclonedx-bom +python -m pip install cyclonedx-bom # install via pip +pipx install cyclonedx-bom # install via pipx +poetry add cyclonedx-bom # install via poetry +# ... you get the hang ``` ## Usage @@ -46,72 +48,28 @@ poetry add cyclonedx-bom Call via one of commands: ```shell -cyclonedx-py -python3 -m cyclonedx_py +cyclonedx-py # call script +python3 -m cyclonedx_py # call python module CLI ``` ## Basic usage ```shellSession $ cyclonedx-py --help -usage: cyclonedx-py [-h] [--version] - (-c | -cj | -e | -p | -pip | -r) [-i FILE_PATH] - [--format {json,xml}] [--schema-version {1.4,1.3,1.2,1.1,1.0}] - [-o FILE_PATH] - [-F] [-X] - -CycloneDX SBOM Generator - -optional arguments: - -h, --help show this help message and exit - --version show program's version number and exit - -c, --conda Build a SBOM based on the output from `conda list - --explicit` or `conda list --explicit --md5` - -cj, --conda-json Build a SBOM based on the output from `conda list - --json` - -e, --e, --environment - Build a SBOM based on the packages installed in your - current Python environment (default) - -p, --p, --poetry Build a SBOM based on a Poetry poetry.lock's contents. - Use with -i to specify absolute path to a `poetry.lock` - you wish to use, else we'll look for one in the - current working directory. - -pip, --pip Build a SBOM based on a PipEnv Pipfile.lock's - contents. Use with -i to specify absolute path to a - `Pipfile.lock` you wish to use, else we'll look for - one in the current working directory. - -r, --r, --requirements - Build a SBOM based on a requirements.txt's contents. - Use with -i to specify absolute path to a - `requirements.txt` you wish to use, else we'll look - for one in the current working directory. - -omit OMIT, --omit OMIT - Omit specified items when using Poetry or PipEnv - (currently supported is dev) - -X Enable debug output - -Input Method: - Flags to determine how this tool obtains its input - - -i FILE_PATH, --in-file FILE_PATH - File to read input from. Use "-" to read from STDIN. - -SBOM Output Configuration: - Choose the output format and schema version - - --format {json,xml} The output format for your SBOM (default: xml) - --schema-version {1.4,1.3,1.2,1.1,1.0} - The CycloneDX schema version for your SBOM (default: - 1.4) - -o FILE_PATH, --o FILE_PATH, --output FILE_PATH - Output file path for your SBOM (set to '-' to output - to STDOUT) - -F, --force If outputting to a file and the stated file already - exists, it will be overwritten. - -pb, --purl-bom-ref Use a component's PURL for the bom-ref value, instead - of a random UUID - --validate, --no-validate - Whether validate the result before outputting +usage: cyclonedx-py [-h] [--version] command ... + +Creates CycloneDX Software Bill of Materials (SBOM) from Python projects and environments. + +positional arguments: + command + environment Build an SBOM from Python (virtual) environment + requirements Build an SBOM from Pip requirements + pipenv Build an SBOM from Pipenv manifest + poetry Build an SBOM from Poetry project + +options: + -h, --help show this help message and exit + --version show program's version number and exit ``` ### Advanced usage and details @@ -122,13 +80,19 @@ See the full [documentation][link_rtfd] for advanced usage and details on input We endeavour to support all functionality for all [current actively supported Python versions](https://www.python.org/downloads/). However, some features may not be possible/present in older Python versions due to their lack of support. +However, there are older versions of this tool, that support `python>=2.7`. ## Internals -This tool utilizes the [CycloneDX library][cyclonedx-library] to generate the actual data structures, and serialize and validate them. -Validation requires [transitive optional dependencies](https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/docs/install.rst#extras). +This tool utilizes the [CycloneDX Python library][cyclonedx-library] to generate the actual data structures, and serialize and validate them. This tool does **not** expose any additional _public_ API or classes - all code is intended to be internal and might change without any notice during version upgrades. +However, the CLI is stable - you may call it programmatically like: +```python +from sys import executable +from subprocess import run +run((executable, '-m', 'cyclonedx_py', '--help')) +``` ## Contributing diff --git a/cyclonedx_py/__init__.py b/cyclonedx_py/__init__.py index b582dae1..52e6824c 100644 --- a/cyclonedx_py/__init__.py +++ b/cyclonedx_py/__init__.py @@ -1,5 +1,3 @@ -# encoding: utf-8 - # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -17,4 +15,11 @@ # !! version is managed by semantic_release # do not use typing here, or else `semantic_release` might have issues finding the variable +# flake8: noqa __version__ = "4.0.0-alpha.0" + +# There is no stable/public API. +# You may use this instead: +# from sys import executable +# from subprocess import run +# run((executable, '-m', 'cyclonedx_py', '--help')) diff --git a/cyclonedx_py/__main__.py b/cyclonedx_py/__main__.py index bd87dd10..b5198af0 100644 --- a/cyclonedx_py/__main__.py +++ b/cyclonedx_py/__main__.py @@ -1,5 +1,3 @@ -# encoding: utf-8 - # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -15,6 +13,16 @@ # SPDX-License-Identifier: Apache-2.0 # Copyright (c) OWASP Foundation. All Rights Reserved. -from ._internal.cli import main +__all__ = [ # type:ignore[var-annotated] + # There is no stable/public API. + # You may use this instead: + # from sys import executable + # from subprocess import run + # run((executable, '-m', 'cyclonedx_py', '--help')) +] + +from sys import exit + +from ._internal.cli import run as _run -main(prog_name=__package__) +exit(_run(prog=f'python -m {__package__}' if __package__ else None)) diff --git a/cyclonedx_py/_internal/__init__.py b/cyclonedx_py/_internal/__init__.py index d1d904bf..b76ae1da 100644 --- a/cyclonedx_py/_internal/__init__.py +++ b/cyclonedx_py/_internal/__init__.py @@ -1,5 +1,3 @@ -# encoding: utf-8 - # This file is part of CycloneDX Python Lib # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,7 +15,62 @@ # SPDX-License-Identifier: Apache-2.0 # Copyright (c) OWASP Foundation. All Rights Reserved. -""" -This package is internal - it is not public API. -All in here may have breaking change without notice. -""" + +from abc import ABC, abstractmethod +from enum import Enum +from typing import TYPE_CHECKING, Any + +if TYPE_CHECKING: # pragma: no cover + from argparse import ArgumentParser + from logging import Logger + + from cyclonedx.model.bom import Bom + + +class BomBuilder(ABC): + + @staticmethod + @abstractmethod + def make_argument_parser(**kwargs: Any) -> 'ArgumentParser': # pragma: no cover + ... + + @abstractmethod + def __init__(self, *, + logger: 'Logger', + **kwargs: Any) -> None: # pragma: no cover + ... + + @abstractmethod + def __call__(self, **kwargs: Any) -> 'Bom': # pragma: no cover + ... + + +class PropertyName(Enum): + # region general + # see https://github.com/CycloneDX/cyclonedx-property-taxonomy/blob/main/cdx.md + BooleanTrue = 'true' + BooleanFalse = 'false' + + Reproducible = 'cdx:reproducible' + # region general + + # region python + # see https://github.com/CycloneDX/cyclonedx-property-taxonomy/blob/main/cdx/python.md + PackageExtra = 'cdx:python:package:required-extra' + PackageSourceSubdirectory = 'cdx:python:package:source:subdirectory' + PackageSourceVcsRequestedRevision = 'cdx:poetry:package:source:vcs:requested_revision' + PackageSourceVcsCommitId = 'cdx:poetry:package:source:vcs:commit_id' + PackageSourceLocalEditable = 'cdx:python:package:source:local:editable' + # endregion python + + # region poetry + # see https://github.com/CycloneDX/cyclonedx-property-taxonomy/blob/main/cdx/poetry.md + PoetryGroup = 'cdx:poetry:group' + PoetryPackageSourceReference = 'cdx:poetry:source:package:reference' + PoetryPackageSourceResolvedReference = 'cdx:poetry:package:source:resolved_reference' + # endregion poetry + + # region pipenv + # see https://github.com/CycloneDX/cyclonedx-property-taxonomy/blob/main/cdx/pipenv.md + PipenvCategory = 'cdx:pipenv:category' + # endregion pipenv diff --git a/cyclonedx_py/_internal/cli.py b/cyclonedx_py/_internal/cli.py index 12ee48b1..550d4eec 100644 --- a/cyclonedx_py/_internal/cli.py +++ b/cyclonedx_py/_internal/cli.py @@ -1,7 +1,4 @@ -#!/usr/bin/env python -# encoding: utf-8 - -# This file is part of CycloneDX Python +# This file is part of CycloneDX Python Lib # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,390 +15,275 @@ # SPDX-License-Identifier: Apache-2.0 # Copyright (c) OWASP Foundation. All Rights Reserved. -import argparse -import enum -import os +import logging import sys -from datetime import datetime -from typing import Any, Optional, Type +from argparse import ArgumentParser, FileType, RawDescriptionHelpFormatter +from itertools import chain +from typing import TYPE_CHECKING, Any, Dict, List, Optional, TextIO, Type -from chardet import detect as chardetect -from cyclonedx.model import Tool -from cyclonedx.model.bom import Bom -from cyclonedx.model.component import Component -from cyclonedx.output import BaseOutput, get_instance as get_output_instance -from cyclonedx.parser import BaseParser +from cyclonedx.model import Property +from cyclonedx.output import make_outputter from cyclonedx.schema import OutputFormat, SchemaVersion from cyclonedx.validation import make_schemabased_validator -from .. import __version__ as _this_tool_version -from .parser._cdx_properties import Pipenv as PipenvProps, Poetry as PoetryProp -from .parser.conda import CondaListExplicitParser, CondaListJsonParser -from .parser.environment import EnvironmentParser -from .parser.pipenv import PipenvPackageCategoryGroupWellknown, PipEnvParser -from .parser.poetry import PoetryGroupWellknown, PoetryParser -from .parser.requirements import RequirementsParser - - -class CycloneDxCmdException(Exception): - pass - - -class CycloneDxCmdNoInputFileSupplied(CycloneDxCmdException): - pass - - -@enum.unique -class _CLI_OUTPUT_FORMAT(enum.Enum): - XML = 'xml' - JSON = 'json' - - -@enum.unique -class _CLI_OMITTABLE(enum.Enum): - DevDependencies = 'dev' - - -_output_formats = { - _CLI_OUTPUT_FORMAT.XML: OutputFormat.XML, - _CLI_OUTPUT_FORMAT.JSON: OutputFormat.JSON, -} -_output_default_filenames = { - _CLI_OUTPUT_FORMAT.XML: 'cyclonedx.xml', - _CLI_OUTPUT_FORMAT.JSON: 'cyclonedx.json', -} - - -class CycloneDxCmd: - # Whether debug output is enabled - _DEBUG_ENABLED: bool = False - - # Parsed Arguments - _arguments: argparse.Namespace - - def __init__(self, args: argparse.Namespace) -> None: - self._arguments = args - - if self._arguments.debug_enabled: - self._DEBUG_ENABLED = True - self._debug_message('!!! DEBUG MODE ENABLED !!!') - self._debug_message('Parsed Arguments: {}', self._arguments) - - def _get_output_format(self) -> _CLI_OUTPUT_FORMAT: - return _CLI_OUTPUT_FORMAT(str(self._arguments.output_format).lower()) - - def get_output(self) -> BaseOutput: - try: - parser = self._get_input_parser() - except CycloneDxCmdNoInputFileSupplied as error: - print(f'ERROR: {str(error)}', file=sys.stderr) - exit(1) - except CycloneDxCmdException as error: - print(f'ERROR: {str(error)}', file=sys.stderr) - exit(1) - - if parser and parser.has_warnings(): - print('', - '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!', - '!! Some of your dependencies do not have pinned version !!', - '!! numbers in your requirements.txt !!', - '!! !!', - *('!! -> {} !!'.format(warning.get_item().ljust(49)) for warning in parser.get_warnings()), - '!! !!', - '!! The above will NOT be included in the generated !!', - '!! CycloneDX as version is a mandatory field. !!', - '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!', - '', - sep='\n', file=sys.stderr) - - bom = Bom(components=filter(self._component_filter, parser.get_components())) - - bom.metadata.tools.add(Tool( - vendor='CycloneDX', - name='cyclonedx-bom', - version=_this_tool_version - )) - - return get_output_instance( - bom=bom, - output_format=self.cdx_output_formats, - schema_version=self.cdx_schema_version - ) - - @property - def cdx_output_formats(self) -> OutputFormat: - return _output_formats[self._get_output_format()] - - @property - def cdx_schema_version(self) -> SchemaVersion: - return SchemaVersion['V{}'.format( - str(self._arguments.output_schema_version).replace('.', '_') - )] - - def execute(self) -> None: - output_format = self._get_output_format() - self._debug_message('output_format: {}', output_format) - - # Quick check for JSON && SchemaVersion <= 1.1 - if output_format is _CLI_OUTPUT_FORMAT.JSON and str(self._arguments.output_schema_version) in ['1.0', '1.1']: - self._error_and_exit( - 'CycloneDX schema does not support JSON output in Schema Versions < 1.2', - exit_code=2 - ) - - output = self.get_output().output_as_string() - - if self._arguments.output_validate: - self._debug_message('Validating SBOM result ...') - validation_errors = make_schemabased_validator( - self.cdx_output_formats, - self.cdx_schema_version - ).validate_str(output) - if validation_errors is None: - self._debug_message('Valid SBOM result.') - else: - self._debug_message('Validation Error: {!r}', validation_errors.data) - self._error_and_exit( - 'Failed to generate valid BOM.\n\n' - 'Please report the issue and provide all input data to:\n' - 'https://github.com/CycloneDX/cyclonedx-python/issues/new?' - 'template=ValidationError-report.md&labels=ValidationError&title=%5BValidationError%5D', - exit_code=3) +from .. import __version__ +from . import PropertyName +from .environment import EnvironmentBB +from .pipenv import PipenvBB +from .poetry import PoetryBB +from .requirements import RequirementsBB +from .utils.args import argparse_type4enum, choices4enum + +if TYPE_CHECKING: # pragma: no cover + from argparse import Action + + from cyclonedx.model.bom import Bom + from cyclonedx.model.component import Component + + from . import BomBuilder + + BooleanOptionalAction: Optional[Type[Action]] + +if sys.version_info >= (3, 9): + from argparse import BooleanOptionalAction +else: + BooleanOptionalAction = None + + +class Command: + @classmethod + def make_argument_parser(cls, sco: ArgumentParser, **kwargs: Any) -> ArgumentParser: + p = ArgumentParser( + description='Creates CycloneDX Software Bill of Materials (SBOM) from Python projects and environments.', + formatter_class=RawDescriptionHelpFormatter, + allow_abbrev=False, + **kwargs) + p.add_argument('--version', action='version', version=__version__) + sp = p.add_subparsers(metavar='command', dest='command', + # not required. if omitted: show help and exit + required=False) + + op = ArgumentParser(add_help=False) + op.add_argument('--short-PURLs', + help='Omit all qualifiers from PackageURLs.\n' + 'This causes information loss in trade-off shorter PURLs, ' + 'which might improve ingesting these strings.', + action='store_true', + dest='short_purls', + default=False) + op.add_argument('-o', '--outfile', + metavar='', + help='Output file path for your SBOM (set to "-" to output to ) (default: %(default)s)', + type=FileType('wt', encoding='utf8'), + dest='outfile', + default='-') + op.add_argument('--sv', '--schema-version', + metavar='', + help='The CycloneDX schema version for your SBOM' + f' {{choices: {", ".join(sorted((v.to_version() for v in SchemaVersion), reverse=True))}}}' + ' (default: %(default)s)', + dest='schema_version', + choices=SchemaVersion, + type=SchemaVersion.from_version, + default=SchemaVersion.V1_5.to_version()) + op.add_argument('--of', '--output-format', + metavar='', + help=f'The output format for your SBOM {choices4enum(OutputFormat)} (default: %(default)s)', + dest='output_format', + choices=OutputFormat, + type=argparse_type4enum(OutputFormat), + default=OutputFormat.JSON.name) + op.add_argument('--output-reproducible', + help='Whether to go the extra mile and make the output reproducible.\n' + 'This might result in loss of time- and random-based-values.', + action='store_true', + dest='output_reproducible', + default=False) + if BooleanOptionalAction: + op.add_argument('--validate', + help='Whether validate the result before outputting (default: %(default)s)', + action=BooleanOptionalAction, + dest='should_validate', + default=True) else: - self._debug_message('Validating SBOM result skipped.') - - if self._arguments.output_file == '-' or not self._arguments.output_file: - self._debug_message('Returning SBOM to STDOUT') - print(output, file=sys.stdout) - else: - output_file = self._arguments.output_file - output_filename = os.path.realpath( - output_file if isinstance(output_file, str) else _output_default_filenames[output_format]) - self._debug_message('Will be outputting SBOM to file: {}', output_filename) - with open(output_filename, - mode='w' if self._arguments.output_file_overwrite else 'x' - ) as f_out: - wrote = f_out.write(output) - self._debug_message('Wrote {} bytes to file: {}', wrote, output_filename) - - @staticmethod - def get_arg_parser(*, prog: Optional[str] = None) -> argparse.ArgumentParser: - arg_parser = argparse.ArgumentParser(prog=prog, description='CycloneDX SBOM Generator') - arg_parser.add_argument('--version', action='version', version=_this_tool_version) - - input_group = arg_parser.add_mutually_exclusive_group(required=True) - input_group.add_argument( - '-c', '--conda', action='store_true', - help='Build a SBOM based on the output from `conda list --explicit` or `conda list --explicit --md5`', - dest='input_from_conda_explicit' - ) - input_group.add_argument( - '-cj', '--conda-json', action='store_true', - help='Build a SBOM based on the output from `conda list --json`', - dest='input_from_conda_json' - ) - input_group.add_argument( - '-e', '--e', '--environment', action='store_true', - help='Build a SBOM based on the packages installed in your current Python environment (default)', - dest='input_from_environment' - ) - input_group.add_argument( - '-p', '--p', '--poetry', action='store_true', - help='Build a SBOM based on a Poetry poetry.lock\'s contents. Use with -i to specify absolute path ' - 'to a `poetry.lock` you wish to use, else we\'ll look for one in the current working directory.', - dest='input_from_poetry' - ) - input_group.add_argument( - '-pip', '--pip', action='store_true', - help='Build a SBOM based on a PipEnv Pipfile.lock\'s contents. Use with -i to specify absolute path ' - 'to a `Pipfile.lock` you wish to use, else we\'ll look for one in the current working directory.', - dest='input_from_pip' - ) - input_group.add_argument( - '-r', '--r', '--requirements', action='store_true', - help='Build a SBOM based on a requirements.txt\'s contents. Use with -i to specify absolute path ' - 'to a `requirements.txt` you wish to use, else we\'ll look for one in the current working directory.', - dest='input_from_requirements' - ) - - input_method_group = arg_parser.add_argument_group( - title='Input Method', - description='Flags to determine how this tool obtains its input' - ) - input_method_group.add_argument( - '-i', '--in-file', action='store', metavar='FILE_PATH', - # custom input shall be treated as binary, the actual encoding is detected later - type=argparse.FileType('rb'), # FileType does handle '-' - default=None, - help='File to read input from. Use "-" to read from STDIN.', dest='input_source', required=False - ) - - output_group = arg_parser.add_argument_group( - title='SBOM Output Configuration', - description='Choose the output format and schema version' - ) - output_group.add_argument( - '--format', action='store', - choices=[f.value for f in _CLI_OUTPUT_FORMAT], default=_CLI_OUTPUT_FORMAT.XML.value, - help='The output format for your SBOM (default: %(default)s)', - dest='output_format' - ) - output_group.add_argument( - '--schema-version', action='store', choices=['1.4', '1.3', '1.2', '1.1', '1.0'], default='1.4', - help='The CycloneDX schema version for your SBOM (default: %(default)s)', - dest='output_schema_version' - ) - output_group.add_argument( - # string, None or True. True=autodetect(based-on-format) - '-o', '--o', '--output', action='store', metavar='FILE_PATH', default=True, required=False, - help='Output file path for your SBOM (set to \'-\' to output to STDOUT)', dest='output_file' - ) - output_group.add_argument( - '-F', '--force', action='store_true', dest='output_file_overwrite', - help='If outputting to a file and the stated file already exists, it will be overwritten.' - ) - output_group.add_argument( - '-pb', '--purl-bom-ref', action='store_true', dest='use_purl_bom_ref', - help="Use a component's PURL for the bom-ref value, instead of a random UUID" - ) - _BooleanOptionalAction: Optional[Type[argparse.Action]] = getattr(argparse, 'BooleanOptionalAction', None) - # BooleanOptionalAction is not available before py39 - if _BooleanOptionalAction: - output_group.add_argument( - '--validate', dest='output_validate', - help="Whether validate the result before outputting", - # BooleanOptionalAction is not available before py39 - action=_BooleanOptionalAction, - default=True - ) - else: - output_group.add_argument( - '--validate', dest='output_validate', - help="Validate the result before outputting", - action='store_true', - default=True - ) - output_group.add_argument( - '--no-validate', dest='output_validate', - help="Do not validate the result before outputting", - action='store_false' - ) - - arg_parser.add_argument( - "--omit", dest="omit", action="append", - default=[], - help=f'Omit specified items when using Poetry or PipEnv (choice: {_CLI_OMITTABLE.DevDependencies.value})', - ) - - arg_parser.add_argument('-X', action='store_true', help='Enable debug output', dest='debug_enabled') - - return arg_parser - - def _debug_message(self, message: str, *args: Any, **kwargs: Any) -> None: - if self._DEBUG_ENABLED: - print(f'[DEBUG] - {{__t}} - {message}'.format(*args, **kwargs, __t=datetime.now()), - file=sys.stderr) - - @staticmethod - def _error_and_exit(message: str, *args: Any, exit_code: int = 1, **kwargs: Any) -> None: - print(f'[ERROR] - {{__t}} - {message}'.format(*args, **kwargs, __t=datetime.now()), - file=sys.stderr) - exit(exit_code) - - def _get_input_parser(self) -> BaseParser: - if self._arguments.input_from_environment: - return EnvironmentParser( - use_purl_bom_ref=self._arguments.use_purl_bom_ref, - debug_message=lambda m, *a, **k: self._debug_message(f'EnvironmentParser {m}', *a, **k) - ) - - # All other Parsers will require some input - grab it now! - if not self._arguments.input_source: - # Nothing passed via STDIN, and no FILENAME supplied, let's assume a default by input type for ease - current_directory = os.getcwd() - try: - if self._arguments.input_from_conda_explicit: - raise CycloneDxCmdNoInputFileSupplied( - 'When using input from Conda Explicit, you need to pipe input via STDIN') - elif self._arguments.input_from_conda_json: - raise CycloneDxCmdNoInputFileSupplied( - 'When using input from Conda JSON, you need to pipe input via STDIN') - elif self._arguments.input_from_pip: - self._arguments.input_source = open(os.path.join(current_directory, 'Pipfile.lock'), - 'rt', encoding="UTF-8", errors='replace') - elif self._arguments.input_from_poetry: - self._arguments.input_source = open(os.path.join(current_directory, 'poetry.lock'), - 'rt', encoding="UTF-8", errors='replace') - elif self._arguments.input_from_requirements: - self._arguments.input_source = open(os.path.join(current_directory, 'requirements.txt'), 'rb') - else: - raise CycloneDxCmdException('Parser type could not be determined.') - except FileNotFoundError as error: - raise CycloneDxCmdNoInputFileSupplied( - f'No input file was supplied and no input was provided on STDIN:\n{str(error)}' - ) from error - - input_data_fh = self._arguments.input_source - with input_data_fh: - input_data = input_data_fh.read() - if isinstance(input_data, bytes): - try: - input_encoding = (chardetect(input_data)['encoding'] or sys.getdefaultencoding()).replace( - # replace Windows-encoding with code-page - 'Windows-', 'cp') - input_data = input_data.decode(input_encoding) - except ValueError: - # last resort: try utf8 and hope for the best - input_data = input_data.decode('utf-8', 'replace') - input_data_fh.close() - - if self._arguments.input_from_conda_explicit: - return CondaListExplicitParser( - conda_data=input_data, - use_purl_bom_ref=self._arguments.use_purl_bom_ref, - debug_message=lambda m, *a, **k: self._debug_message(f'CondaListExplicitParser {m}', *a, **k) - ) - elif self._arguments.input_from_conda_json: - return CondaListJsonParser( - conda_data=input_data, - use_purl_bom_ref=self._arguments.use_purl_bom_ref, - debug_message=lambda m, *a, **k: self._debug_message(f'CondaListJsonParser {m}', *a, **k) + vg = op.add_mutually_exclusive_group() + vg.add_argument('--validate', + help='Validate the result before outputting (default: %(default)s)', + action='store_true', + dest='should_validate', + default=True) + vg.add_argument('--no-validate', + help='Do not validate the result before outputting', + dest='should_validate', + action='store_false') + + scbbc: Type['BomBuilder'] + for sct, scbbc in ( # type:ignore[assignment] + ('environment', EnvironmentBB), + ('requirements', RequirementsBB), + ('pipenv', PipenvBB), + ('poetry', PoetryBB), + ): + spp = scbbc.make_argument_parser(add_help=False) + sp.add_parser(sct, + help=(spp.description or '').split('\n')[0].strip('. '), + description=spp.description, + epilog=spp.epilog, + parents=[spp, op, sco], + formatter_class=p.formatter_class, + allow_abbrev=p.allow_abbrev, + ).set_defaults(_bbc=scbbc) + + return p + + __OWN_ARGS = { + # the ars keywords from __init__ + 'logger', 'short_purls', 'output_format', 'schema_version', 'output_reproducible', 'should_validate', + # the ars keywords from __call__ + 'outfile' + } + + @classmethod + def _clean_kwargs(cls, kwargs: Dict[str, Any]) -> Dict[str, Any]: + return {k: kwargs[k] for k in kwargs if k not in cls.__OWN_ARGS} + + def __init__(self, *, + logger: logging.Logger, + short_purls: bool, + output_format: OutputFormat, + schema_version: SchemaVersion, + output_reproducible: bool, + should_validate: bool, + _bbc: Type['BomBuilder'], + **kwargs: Any) -> None: + self._logger = logger + self._short_purls = short_purls + self._output_format = output_format + self._schema_version = schema_version + self._output_reproducible = output_reproducible + self._should_validate = should_validate + self._bbc = _bbc(**self._clean_kwargs(kwargs), + logger=self._logger.getChild(_bbc.__name__)) + + def _shorten_purls(self, bom: 'Bom') -> bool: + if not self._short_purls: + return False + + self._logger.info('Shorting purls...') + component: 'Component' + for component in chain( + bom.metadata.component.get_all_nested_components(True) if bom.metadata.component else (), + chain.from_iterable( + component.get_all_nested_components(True) for component in bom.components ) - elif self._arguments.input_from_pip: - return PipEnvParser( - pipenv_contents=input_data, - use_purl_bom_ref=self._arguments.use_purl_bom_ref, - debug_message=lambda m, *a, **k: self._debug_message(f'PipEnvParser {m}', *a, **k) - ) - elif self._arguments.input_from_poetry: - return PoetryParser( - poetry_lock_contents=input_data, - use_purl_bom_ref=self._arguments.use_purl_bom_ref, - debug_message=lambda m, *a, **k: self._debug_message(f'PoetryParser {m}', *a, **k) - ) - elif self._arguments.input_from_requirements: - return RequirementsParser( - requirements_content=input_data, - use_purl_bom_ref=self._arguments.use_purl_bom_ref, - debug_message=lambda m, *a, **k: self._debug_message(f'RequirementsParser {m}', *a, **k) - ) - else: - raise CycloneDxCmdException('Parser type could not be determined.') - - def _component_filter(self, component: Component) -> bool: - if _CLI_OMITTABLE.DevDependencies.value in self._arguments.omit: - for prop in component.properties: - if prop.name == PipenvProps.PackageCategory.value: - if prop.value == PipenvPackageCategoryGroupWellknown.Develop.value: - return False - elif prop.name == PoetryProp.PackageGroup.value: - if prop.value == PoetryGroupWellknown.Dev.value: - return False - + ): + if component.purl is not None: + component.purl = type(component.purl)( + type=component.purl.type, # type:ignore[arg-type] + namespace=component.purl.namespace, # type:ignore[arg-type] + name=component.purl.name, # type:ignore[arg-type] + version=component.purl.version # type:ignore[arg-type] + # omit qualifiers + # omit subdirectory + ) return True + def _validate(self, output: str) -> bool: + if not self._should_validate: + self._logger.warning('Validation skipped.') + return False + + self._logger.info('Validating result to schema: %s/%s', + self._schema_version.to_version(), self._output_format.name) + + validation_error = make_schemabased_validator( + self._output_format, + self._schema_version + ).validate_str(output) + if validation_error: + self._logger.debug('Validation Errors: %r', validation_error.data) + self._logger.error('The result is invalid to schema ' + f'{self._schema_version.to_version()}/{self._output_format.name}') + self._logger.warning('Please report the issue and provide all input data to: ' + 'https://github.com/CycloneDX/cyclonedx-python/issues/new?' + 'template=ValidationError-report.md&' + 'labels=ValidationError&title=%5BValidationError%5D') + raise ValueError('result is schema-invalid') + self._logger.debug('result is schema-valid') + return True -def main(*, prog_name: Optional[str] = None) -> None: - parser = CycloneDxCmd.get_arg_parser(prog=prog_name) - args = parser.parse_args() - CycloneDxCmd(args).execute() + def _write(self, output: str, outfile: TextIO) -> int: + self._logger.info('Writing to: %s', outfile.name) + written = outfile.write(output) + self._logger.debug('Wrote %i bytes to %s', written, outfile.name) + return written + + def _make_output(self, bom: 'Bom') -> str: + self._logger.info('Serializing SBOM: %s/%s', self._schema_version.to_version(), self._output_format.name) + + if self._output_reproducible: + bom.metadata.properties.add(Property(name=PropertyName.Reproducible.value, + value=PropertyName.BooleanTrue.value)) + # dirty hacks to remove these mandatory properties + bom.serial_number = None # type:ignore[assignment] + bom.metadata.timestamp = None # type:ignore[assignment] + + return make_outputter( + bom, + self._output_format, + self._schema_version + ).output_as_string(indent=2) + + def _make_bom(self, **kwargs: Any) -> 'Bom': + self._logger.info('Generating SBOM ...') + return self._bbc(**self._clean_kwargs(kwargs)) + + def __call__(self, + outfile: TextIO, + **kwargs: Any) -> None: + bom = self._make_bom(**kwargs) + self._shorten_purls(bom) + output = self._make_output(bom) + del bom + self._validate(output) + self._write(output, outfile) + + +def run(*, argv: Optional[List[str]] = None, **kwargs: Any) -> int: + arg_co = ArgumentParser(add_help=False) + arg_co.add_argument('-v', '--verbose', + help='Increase the verbosity of messages (multiple for more effect) (default: silent)', + dest='verbosity', + action='count', + default=0) + arg_parser = Command.make_argument_parser(**kwargs, sco=arg_co) + del arg_co, kwargs + args = vars(arg_parser.parse_args(argv)) + if args['command'] is None: + # print the help page on error, instead of usage + arg_parser.print_help() + return 1 + del arg_parser, argv + + ll = (logging.WARNING, logging.INFO, logging.DEBUG)[min(2, args.pop('verbosity'))] + lh = logging.StreamHandler(sys.stderr) + lh.setLevel(ll) + lh.setFormatter(logging.Formatter('%(levelname)-8s | %(name)s > %(message)s')) + logger = logging.getLogger('CDX') + logger.propagate = False + logger.setLevel(lh.level) + logger.addHandler(lh) + + logger.debug('args: %s', args) + try: + Command(**args, logger=logger)(**args) + except Exception as error: + logger.debug('Error: %s', error, exc_info=error) + logger.critical(f'{error}') + return 1 + else: + return 0 + finally: + # if called programmatically (in tests), the handlers would stack up, + # since the logger is registered globally static + logger.removeHandler(lh) diff --git a/cyclonedx_py/_internal/cli_common.py b/cyclonedx_py/_internal/cli_common.py new file mode 100644 index 00000000..ef52d0df --- /dev/null +++ b/cyclonedx_py/_internal/cli_common.py @@ -0,0 +1,51 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +from typing import TYPE_CHECKING + +from cyclonedx.model.component import ComponentType + +from .utils.args import argparse_type4enum + +if TYPE_CHECKING: # pragma: no cover + from argparse import Action, ArgumentParser + + +def add_argument_pyproject(p: 'ArgumentParser') -> 'Action': + return p.add_argument('--pyproject', + metavar='', + help="Path to the root component's `pyproject.toml` file. " + 'This should point to a file compliant with PEP 621 ' + '(storing project metadata).', + dest='pyproject_file', + default=None) + + +def add_argument_mc_type(p: 'ArgumentParser') -> 'Action': + choices = [ComponentType.APPLICATION, + ComponentType.FIRMWARE, + ComponentType.LIBRARY] + return p.add_argument('--mc-type', + metavar='', + help='Type of the main component' + f' {{choices: {", ".join(t.value for t in choices)}}}' + ' (default: %(default)s)', + dest='mc_type', + choices=choices, + type=argparse_type4enum(ComponentType), + default=ComponentType.APPLICATION) diff --git a/cyclonedx_py/_internal/environment.py b/cyclonedx_py/_internal/environment.py new file mode 100644 index 00000000..039762cd --- /dev/null +++ b/cyclonedx_py/_internal/environment.py @@ -0,0 +1,256 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +from argparse import OPTIONAL, ArgumentParser +from importlib.metadata import distributions +from json import loads +from os import getcwd, name as os_name +from os.path import exists, isdir, join +from subprocess import run # nosec +from sys import path as sys_path +from textwrap import dedent +from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Tuple + +from cyclonedx.model import Property +from cyclonedx.model.component import Component, ComponentType +from packageurl import PackageURL +from packaging.requirements import Requirement + +from . import BomBuilder, PropertyName +from .cli_common import add_argument_mc_type, add_argument_pyproject +from .utils.cdx import licenses_fixup, make_bom +from .utils.packaging import metadata2extrefs, metadata2licenses +from .utils.pep610 import PackageSourceArchive, PackageSourceVcs, packagesource2extref, packagesource4dist +from .utils.pyproject import pyproject2component, pyproject2dependencies, pyproject_load + +if TYPE_CHECKING: # pragma: no cover + from logging import Logger + + from cyclonedx.model.bom import Bom + + from .utils.pep610 import PackageSource + + T_AllComponents = Dict[str, Tuple['Component', Iterable[Requirement]]] + + +class EnvironmentBB(BomBuilder): + + @staticmethod + def make_argument_parser(**kwargs: Any) -> 'ArgumentParser': + p = ArgumentParser(description='Build an SBOM from Python (virtual) environment', + **kwargs) + if os_name == 'nt': + p.epilog = dedent("""\ + Example Usage: + • Build an SBOM from current python environment: + > %(prog)s + • Build an SBOM from a Python (virtual) environment: + > %(prog)s "...some\\path\\bin\\python.exe" + > %(prog)s "...some\\path\\.venv\\" + • Build an SBOM from specific Python environment: + > where.exe python3.9.exe + > %(prog)s "%%path to specific python%%" + • Build an SBOM from conda Python environment: + > conda.exe run where.exe python + > %(prog)s "%%path to conda python%%" + • Build an SBOM from Pipenv environment: + > pipenv.exe --py + > pipenv.exe --venv + > %(prog)s "%%path to pipenv python%%" + • Build an SBOM from Poetry environment: + > poetry.exe env info --executable + > %(prog)s "%%path to poetry python%%" + """) + else: # if os_name == 'posix': + p.epilog = dedent("""\ + Example Usage: + • Build an SBOM from current python environment: + $ %(prog)s + • Build an SBOM from a Python (virtual) environment: + $ %(prog)s '...some/path/bin/python' + $ %(prog)s '.../.venv/' + • Build an SBOM from specific Python environment: + $ %(prog)s "$(which python3.9)" + • Build an SBOM from conda Python environment: + $ %(prog)s "$(conda run which python)" + • Build an SBOM from Pipenv environment: + $ %(prog)s "$(pipenv --py)" + $ %(prog)s "$(pipenv --venv)" + • Build an SBOM from Poetry environment: + $ %(prog)s "$(poetry env info --executable)" + """) + add_argument_pyproject(p) + add_argument_mc_type(p) + # TODO possible additional switch: + # `--exclude ` Exclude specified package from the output (multi use) + # `--local` If in a virtualenv that has global access, do not list globally-installed packages. + # `--user` Only output packages installed in user-site. + # `--path ` Restrict to the specified installation path for listing packages + p.add_argument('python', + metavar='python', + help='Python interpreter', + nargs=OPTIONAL, + default=None) + return p + + def __init__(self, *, + logger: 'Logger', + **__: Any) -> None: + self._logger = logger + + def __call__(self, *, # type:ignore[override] + python: Optional[str], + pyproject_file: Optional[str], + mc_type: 'ComponentType', + **__: Any) -> 'Bom': + if pyproject_file is None: + rc = None + else: + pyproject = pyproject_load(pyproject_file) + root_c = pyproject2component(pyproject, type=mc_type) + root_c.bom_ref.value = 'root-component' + root_d = pyproject2dependencies(pyproject) + rc = (root_c, root_d) + + path: List[str] + if python: + path = self.__path4python(python) + else: + path = sys_path.copy() + if path[0] in ('', getcwd()): + path.pop(0) + + bom = make_bom() + self.__add_components(bom, rc, path=path) + return bom + + def __add_components(self, bom: 'Bom', + rc: Optional[Tuple['Component', Iterable['Requirement']]], + **kwargs: Any) -> None: + all_components: 'T_AllComponents' = {} + self._logger.debug('distribution context args: %r', kwargs) + self._logger.info('discovering distributions...') + for dist in distributions(**kwargs): + dist_meta = dist.metadata # see https://packaging.python.org/en/latest/specifications/core-metadata/ + dist_name = dist_meta['Name'] + dist_version = dist_meta['Version'] + component = Component( + type=ComponentType.LIBRARY, + bom_ref=f'{dist_name}=={dist_version}', + name=dist_name, + version=dist_version, + description=dist_meta['Summary'] if 'Summary' in dist_meta else None, + licenses=licenses_fixup(metadata2licenses(dist_meta)), + external_references=metadata2extrefs(dist_meta), + # path of dist-package on disc? naaa... a package may have multiple files/folders on disc + ) + del dist_meta, dist_name, dist_version + self.__component_add_extred_and_purl(component, packagesource4dist(dist)) + all_components[component.name.lower()] = component, map(Requirement, dist.requires or ()) + + self._logger.info('add component for package %r', component.name) + self._logger.debug('add component: %r', component) + bom.components.add(component) + + if rc is not None: + root_c = rc[0] + root_c_lcname = root_c.name.lower() + root_c_existed = all_components.get(root_c_lcname) + if root_c_existed is not None: + bom.components.remove(root_c_existed[0]) + del root_c_existed + all_components[root_c_lcname] = rc + bom.metadata.component = root_c + self._logger.debug('root-component: %r', root_c) + + self.__finalize_dependencies(bom, all_components) + + def __finalize_dependencies(self, bom: 'Bom', all_components: 'T_AllComponents') -> None: + for component, requires in all_components.values(): + component_deps: List[Component] = [] + for req in requires: + req_component: Optional[Component] = all_components.get(req.name.lower(), (None,))[0] + if req_component is None: + continue + if req_component is component: + # circulars are a typical thing when extras require other extras + continue + component_deps.append(req_component) + req_component.properties.update( + Property( + name=PropertyName.PackageExtra.value, + value=extra + ) for extra in req.extras + ) + bom.register_dependency(component, component_deps) + + def __component_add_extred_and_purl(self, component: 'Component', + packagesource: Optional['PackageSource']) -> None: + purl_qs = {} # https://github.com/package-url/purl-spec/blob/master/PURL-SPECIFICATION.rst + purl_subpath = None + if packagesource is not None: + if packagesource.subdirectory: + component.properties.add(Property(name=PropertyName.PackageSourceSubdirectory.value, + value=packagesource.subdirectory)) + purl_subpath = packagesource.subdirectory + if isinstance(packagesource, PackageSourceVcs): + purl_qs['vcs_url'] = f'{packagesource.vcs}+{packagesource.url}@{packagesource.commit_id}' + component.properties.add(Property(name=PropertyName.PackageSourceVcsCommitId.value, + value=packagesource.commit_id)) + if packagesource.requested_revision: + component.properties.add(Property(name=PropertyName.PackageSourceVcsRequestedRevision.value, + value=packagesource.requested_revision)) + elif isinstance(packagesource, PackageSourceArchive): + if '://files.pythonhosted.org/' not in packagesource.url: + # skip PURL bloat, do not add implicit information + purl_qs['download_url'] = packagesource.url + packagesource_extref = packagesource2extref(packagesource) + if packagesource_extref is not None: + component.external_references.add(packagesource_extref) + del packagesource_extref + if packagesource is None or not packagesource.url.startswith('file://'): + # no purl for locals and unpublished packages + component.purl = PackageURL('pypi', name=component.name, version=component.version, + qualifiers=purl_qs, subpath=purl_subpath) + + @staticmethod + def __py_interpreter(value: str) -> str: + if not exists(value): + raise ValueError(f'No such file or directory: {value}') + if isdir(value): + for venv_loc in ( + ('bin', 'python'), # unix + ('Scripts', 'python.exe'), # win + ): + maybe = join(value, *venv_loc) + if exists(maybe): + return maybe + raise ValueError(f'Failed to find python in directory: {value}') + return value + + def __path4python(self, python: str) -> List[str]: + cmd = self.__py_interpreter(python), '-c', 'import json,sys;json.dump(sys.path,sys.stdout)' + self._logger.debug('fetch `path` from python interpreter cmd: %r', cmd) + res = run(cmd, capture_output=True, encoding='utf8', shell=False) # nosec + if res.returncode != 0: + raise RuntimeError('Fail fetching `path` from Python interpreter.\n' + f'returncode: {res.returncode}\n' + f'stdout: {res.stdout}\n' + f'stderr: {res.stderr}\n') + self._logger.debug('got `path` from Python interpreter: %r', res.stdout) + return loads(res.stdout) # type:ignore[no-any-return] diff --git a/cyclonedx_py/_internal/parser/_debug.py b/cyclonedx_py/_internal/parser/_debug.py deleted file mode 100644 index 5e2e89de..00000000 --- a/cyclonedx_py/_internal/parser/_debug.py +++ /dev/null @@ -1,41 +0,0 @@ -# encoding: utf-8 - -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -"""The following structures are internal helpers.""" - -from typing import TYPE_CHECKING, Any, Callable - -if TYPE_CHECKING: - from mypy_extensions import Arg, KwArg, VarArg - - DebugMessageCallback = Callable[[Arg(str, 'message'), VarArg(Any), KwArg(Any)], None] # noqa: F821 - """Callback for debug messaging. - - :parameter message: the format string. - :Other Parameters: the *args: to :func:`str.forma()`. - :Keyword Arguments: the **kwargs to :func:`str.format()`. - """ -else: - DebugMessageCallback = Callable[..., None] - - -def quiet(message: str, *_: Any, **__: Any) -> None: - """Do not print anything. - - Must be compatible to :py:data:`DebugMessageCallback`. - """ - pass diff --git a/cyclonedx_py/_internal/parser/conda.py b/cyclonedx_py/_internal/parser/conda.py deleted file mode 100644 index 5edcd829..00000000 --- a/cyclonedx_py/_internal/parser/conda.py +++ /dev/null @@ -1,126 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -import json -from abc import ABCMeta, abstractmethod -from typing import List - -from cyclonedx.model import ExternalReference, ExternalReferenceType, HashAlgorithm, HashType, XsUri -from cyclonedx.model.component import Component -from cyclonedx.parser import BaseParser - -from ..utils.conda import ( - CondaPackage, - conda_package_to_purl, - parse_conda_json_to_conda_package, - parse_conda_list_str_to_conda_package, -) -from ._debug import DebugMessageCallback, quiet - - -class _BaseCondaParser(BaseParser, metaclass=ABCMeta): - """Internal abstract parser - not for programmatic use. - """ - - def __init__( - self, conda_data: str, use_purl_bom_ref: bool = False, - *, - debug_message: DebugMessageCallback = quiet - ) -> None: - super().__init__() - debug_message('init {}', self.__class__.__name__) - self._debug_message = debug_message - self._conda_packages: List[CondaPackage] = [] - self._parse_to_conda_packages(data_str=conda_data) - self._conda_packages_to_components(use_purl_bom_ref=use_purl_bom_ref) - - @abstractmethod - def _parse_to_conda_packages(self, data_str: str) -> None: - """ - Abstract method for implementation by concrete Conda Parsers. - - Implementation should add a `list` of `CondaPackage` instances to `self._conda_packages` - - Params: - data_str: - `str` data passed into the Parser - """ - pass - - def _conda_packages_to_components(self, use_purl_bom_ref: bool) -> None: - """ - Converts the parsed `CondaPackage` instances into `Component` instances. - - """ - self._debug_message('processing conda_packages') - for conda_package in self._conda_packages: - self._debug_message('processing conda_package: {!r}', conda_package) - purl = conda_package_to_purl(conda_package) - bom_ref = purl.to_string() if use_purl_bom_ref else None - c = Component( - name=conda_package['name'], bom_ref=bom_ref, version=conda_package['version'], - purl=purl - ) - c.external_references.add(ExternalReference( - type=ExternalReferenceType.DISTRIBUTION, - url=XsUri(conda_package['base_url']), - comment=f"Distribution name {conda_package['dist_name']}" - )) - if conda_package['md5_hash'] is not None: - c.hashes.add(HashType( - alg=HashAlgorithm.MD5, - content=str(conda_package['md5_hash']) - )) - - self._components.append(c) - - -class CondaListJsonParser(_BaseCondaParser): - """ - This parser is intended to receive the output from the command `conda list --json`. - """ - - def _parse_to_conda_packages(self, data_str: str) -> None: - conda_list_content = json.loads(data_str) - self._debug_message('processing conda_list_content') - for package in conda_list_content: - self._debug_message('processing package: {!r}', package) - conda_package = parse_conda_json_to_conda_package(conda_json_str=json.dumps(package)) - if conda_package: - self._conda_packages.append(conda_package) - else: - self._debug_message('no conda_package -> skip') - - -class CondaListExplicitParser(_BaseCondaParser): - """ - This parser is intended to receive the output from the command `conda list --explicit` or - `conda list --explicit --md5`. - """ - - def _parse_to_conda_packages(self, data_str: str) -> None: - self._debug_message('processing data_str') - for line in data_str.replace('\r\n', '\n').split('\n'): - line = line.strip() - self._debug_message('processing line: {}', line) - conda_package = parse_conda_list_str_to_conda_package(conda_list_str=line) - if conda_package: - self._conda_packages.append(conda_package) - else: - self._debug_message('no conda_package -> skip') diff --git a/cyclonedx_py/_internal/parser/environment.py b/cyclonedx_py/_internal/parser/environment.py deleted file mode 100644 index 2668a4b1..00000000 --- a/cyclonedx_py/_internal/parser/environment.py +++ /dev/null @@ -1,118 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -""" -Parser classes for reading installed packages in your current Python environment. - -These parsers look at installed packages only - not what you have defined in any dependency tool - see the other Parsers -if you want to derive CycloneDX from declared dependencies. - - -The Environment Parsers support population of the following data about Components: - -""" - -import sys -from importlib.metadata import metadata - -from cyclonedx.model.license import LicenseExpression - -if sys.version_info >= (3, 10): - from importlib.metadata import PackageMetadata as _MetadataReturn -else: - from email.message import Message as _MetadataReturn - -from cyclonedx.exception.model import CycloneDxModelException -from cyclonedx.factory.license import LicenseFactory -from cyclonedx.model.component import Component -from cyclonedx.parser import BaseParser - -# See https://github.com/package-url/packageurl-python/issues/65 -from packageurl import PackageURL -from pkg_resources import Distribution - -from ..license_trove_classifier import PREFIX_LICENSE as _LTC_PREFIX, tidy as _ltc_tidy, to_spdx as _ltc_to_spdx -from ._debug import DebugMessageCallback, quiet - - -class EnvironmentParser(BaseParser): - """ - This will look at the current Python environment and list out all installed packages. - - Best used when you have virtual Python environments per project. - """ - - def __init__( - self, use_purl_bom_ref: bool = False, - *, - debug_message: DebugMessageCallback = quiet - ) -> None: - super().__init__() - debug_message('init {}', self.__class__.__name__) - - debug_message('late import pkg_resources') - import pkg_resources - - lcfac = LicenseFactory() - - debug_message('processing pkg_resources.working_set') - i: Distribution - for i in iter(pkg_resources.working_set): - debug_message('processing working_set item: {!r}', i) - purl = PackageURL(type='pypi', name=i.project_name, version=i.version) - bom_ref = purl.to_string() if use_purl_bom_ref else None - c = Component(name=i.project_name, bom_ref=bom_ref, version=i.version, purl=purl) - licenses = set() - - i_metadata = self._get_metadata_for_package(i.project_name) - debug_message('processing i_metadata') - if 'Author' in i_metadata: - debug_message('processing i_metadata Author: {!r}', i_metadata['Author']) - c.author = i_metadata['Author'] - if 'License' in i_metadata and i_metadata['License'] and i_metadata['License'] != 'UNKNOWN': - debug_message('processing i_metadata License: {!r}', i_metadata['License']) - try: - licenses.add(lcfac.make_from_string(i_metadata['License'])) - except CycloneDxModelException as error: - # @todo traceback and details to the output? - debug_message('Warning: suppressed {!r}', error) - del error - - debug_message('processing classifiers') - for classifier in i_metadata.get_all("Classifier", []): - debug_message('processing classifier: {!r}', classifier) - classifier = str(classifier).strip() - if classifier.startswith(_LTC_PREFIX): - license_string = _ltc_to_spdx(classifier) or _ltc_tidy(classifier) - try: - licenses.add(lcfac.make_from_string(license_string)) - except CycloneDxModelException as error: - # @todo traceback and details to the output? - debug_message('Warning: suppressed {!r}', error) - del error - - # assert per schema: either one expression or multiple non-expressions - lexp = next((li for li in licenses if isinstance(li, LicenseExpression)), None) - c.licenses.update([lexp] if lexp else licenses) - - self._components.append(c) - - @staticmethod - def _get_metadata_for_package(package_name: str) -> _MetadataReturn: - return metadata(package_name) diff --git a/cyclonedx_py/_internal/parser/pipenv.py b/cyclonedx_py/_internal/parser/pipenv.py deleted file mode 100644 index bc344515..00000000 --- a/cyclonedx_py/_internal/parser/pipenv.py +++ /dev/null @@ -1,106 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -import json -from enum import Enum, unique -from typing import Any, Dict - -from cyclonedx.model import ExternalReference, ExternalReferenceType, HashType, Property, XsUri -from cyclonedx.model.component import Component -from cyclonedx.parser import BaseParser - -# See https://github.com/package-url/packageurl-python/issues/65 -from packageurl import PackageURL - -from ._cdx_properties import Pipenv as PipenvProps -from ._debug import DebugMessageCallback, quiet - - -@unique -class PipenvPackageCategoryGroupWellknown(Enum): - """Wellknown package category groups. - See https://pipenv.pypa.io/en/latest/pipfile/#package-category-groups - """ - Default = "default" - Develop = "develop" - - -_PipenvCategoryItems = Dict[str, Dict[str, Any]] - - -class PipEnvParser(BaseParser): - - def __init__( - self, pipenv_contents: str, - use_purl_bom_ref: bool = False, - *, - debug_message: DebugMessageCallback = quiet - ) -> None: - super().__init__() - debug_message('init {}', self.__class__.__name__) - - debug_message('loading pipenv_contents') - pipfile_lock_contents = json.loads(pipenv_contents) - - for group in PipenvPackageCategoryGroupWellknown: - pipfile_group: _PipenvCategoryItems = pipfile_lock_contents.get(group.value, {}) - self._process_items(pipfile_group, group.value, use_purl_bom_ref, debug_message) - - def _process_items(self, items: _PipenvCategoryItems, group: str, - use_purl_bom_ref: bool, - debug_message: DebugMessageCallback) -> None: - debug_message('processing pipfile_default {!r}', group) - for (package_name, package_data) in items.items(): - debug_message('processing package: {!r} {!r}', package_name, package_data) - version = str(package_data.get('version') or 'unknown').lstrip('=') - purl = PackageURL(type='pypi', name=package_name, version=version) - bom_ref = purl.to_string() if use_purl_bom_ref else None - c = Component(name=package_name, bom_ref=bom_ref, version=version, purl=purl) - c.properties.add(Property( - name=PipenvProps.PackageCategory.value, - value=group)) - if isinstance(package_data.get('hashes'), list): - # Add download location with hashes stored in Pipfile.lock - for pip_hash in package_data['hashes']: - debug_message('processing pip_hash: {!r}', pip_hash) - ext_ref = ExternalReference( - type=ExternalReferenceType.DISTRIBUTION, - url=XsUri(c.get_pypi_url()), - comment='Distribution available from pypi.org' - ) - ext_ref.hashes.add(HashType.from_composite_str(pip_hash)) - c.external_references.add(ext_ref) - self._components.append(c) - - -class PipEnvFileParser(PipEnvParser): - - def __init__( - self, pipenv_lock_filename: str, - use_purl_bom_ref: bool = False, - *, - debug_message: DebugMessageCallback = quiet - ) -> None: - debug_message('open file: {}', pipenv_lock_filename) - with open(pipenv_lock_filename, encoding="UTF-8", errors='replace') as plf: - super(PipEnvFileParser, self).__init__( - pipenv_contents=plf.read(), - use_purl_bom_ref=use_purl_bom_ref, - debug_message=debug_message - ) diff --git a/cyclonedx_py/_internal/parser/poetry.py b/cyclonedx_py/_internal/parser/poetry.py deleted file mode 100644 index 88f903e7..00000000 --- a/cyclonedx_py/_internal/parser/poetry.py +++ /dev/null @@ -1,115 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -from enum import Enum, unique - -from cyclonedx.exception.model import CycloneDxModelException -from cyclonedx.model import ExternalReference, ExternalReferenceType, HashType, Property, XsUri -from cyclonedx.model.component import Component -from cyclonedx.parser import BaseParser - -# See https://github.com/package-url/packageurl-python/issues/65 -from packageurl import PackageURL -from toml import loads as load_toml - -from ._cdx_properties import Poetry as PoetryProps -from ._debug import DebugMessageCallback, quiet - - -@unique -class PoetryGroupWellknown(Enum): - """Wellknown Poetry groups. - See https://python-poetry.org/docs/managing-dependencies/#dependency-groups - """ - Main = "main" - Dev = "dev" - - -class PoetryParser(BaseParser): - - def __init__( - self, poetry_lock_contents: str, - use_purl_bom_ref: bool = False, - *, - debug_message: DebugMessageCallback = quiet - ) -> None: - super().__init__() - debug_message('init {}', self.__class__.__name__) - - debug_message('loading poetry_lock_contents') - poetry_lock = load_toml(poetry_lock_contents) - - poetry_lock_metadata = poetry_lock['metadata'] - try: - poetry_lock_version = tuple(int(p) for p in str(poetry_lock_metadata['lock-version']).split('.')) - except Exception: - poetry_lock_version = (0,) - debug_message('detected poetry_lock_version: {!r}', poetry_lock_version) - - debug_message('processing poetry_lock') - for package in poetry_lock['package']: - debug_message('processing package: {!r}', package) - - purl = PackageURL(type='pypi', name=package['name'], version=package['version']) - bom_ref = purl.to_string() if use_purl_bom_ref else None - component = Component( - name=package['name'], bom_ref=bom_ref, version=package['version'], - purl=purl - ) - package_category = package.get('category') - if package_category: - component.properties.add(Property( - name=PoetryProps.PackageGroup.value, - value=package_category)) - debug_message('detecting package_files') - package_files = package['files'] \ - if poetry_lock_version >= (2,) \ - else poetry_lock_metadata['files'][package['name']] - debug_message('processing package_files: {!r}', package_files) - for file_metadata in package_files: - debug_message('processing file_metadata: {!r}', file_metadata) - try: - component.external_references.add(ExternalReference( - type=ExternalReferenceType.DISTRIBUTION, - url=XsUri(component.get_pypi_url()), - comment=f'Distribution file: {file_metadata["file"]}', - hashes=[HashType.from_composite_str(file_metadata['hash'])] - )) - except CycloneDxModelException as error: - # @todo traceback and details to the output? - debug_message('Warning: suppressed {!r}', error) - del error - self._components.append(component) - - -class PoetryFileParser(PoetryParser): - - def __init__( - self, poetry_lock_filename: str, - use_purl_bom_ref: bool = False, - *, - debug_message: DebugMessageCallback = quiet - ) -> None: - debug_message('open file: {}', poetry_lock_filename) - with open(poetry_lock_filename, encoding="UTF-8", errors='replace') as plf: - super(PoetryFileParser, self).__init__( - poetry_lock_contents=plf.read(), - use_purl_bom_ref=use_purl_bom_ref, - debug_message=debug_message - ) diff --git a/cyclonedx_py/_internal/parser/requirements.py b/cyclonedx_py/_internal/parser/requirements.py deleted file mode 100644 index c663dbe7..00000000 --- a/cyclonedx_py/_internal/parser/requirements.py +++ /dev/null @@ -1,97 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -import os -import os.path -from tempfile import NamedTemporaryFile # Weak error - -from cyclonedx.model import HashType -from cyclonedx.model.component import Component -from cyclonedx.parser import BaseParser, ParserWarning - -# See https://github.com/package-url/packageurl-python/issues/65 -from packageurl import PackageURL -from pip_requirements_parser import RequirementsFile # type: ignore - -from ._debug import DebugMessageCallback, quiet - - -class RequirementsParser(BaseParser): - - def __init__( - self, requirements_content: str, use_purl_bom_ref: bool = False, - *, - debug_message: DebugMessageCallback = quiet - ) -> None: - super().__init__() - debug_message('init {}', self.__class__.__name__) - - if os.path.exists(requirements_content): - debug_message('create RequirementsFile from file: {}', requirements_content) - parsed_rf = RequirementsFile.from_file(requirements_content, include_nested=True) - else: - with NamedTemporaryFile(mode='w+', delete=False) as requirements_file: - debug_message('write requirements_content to TempFile: {}', requirements_file.name) - requirements_file.write(requirements_content) - try: - debug_message('create RequirementsFile from TempFile: {}', requirements_file.name) - parsed_rf = RequirementsFile.from_file(requirements_file.name, include_nested=False) - finally: - debug_message('unlink TempFile: {}', requirements_file.name) - os.unlink(requirements_file.name) - del requirements_file - - debug_message('processing requirements') - for requirement in parsed_rf.requirements: - debug_message('processing requirement: {!r}', requirement) - name = requirement.link.url if requirement.is_local_path else requirement.name - version = requirement.get_pinned_version or requirement.dumps_specifier() - debug_message('detected: {!r} {!r}', name, version) - hashes = map(HashType.from_composite_str, requirement.hash_options) - if not version and not requirement.is_local_path: - self._warnings.append( - ParserWarning( - item=name, - warning=(f"Requirement \'{name}\' does not have a pinned " - "version and cannot be included in your CycloneDX SBOM.") - ) - ) - else: - purl = PackageURL(type='pypi', name=name, version=version) - bom_ref = purl.to_string() if use_purl_bom_ref else None - self._components.append(Component( - name=name, - bom_ref=bom_ref, - version=version, - hashes=hashes, - purl=purl - )) - - -class RequirementsFileParser(RequirementsParser): - - def __init__( - self, requirements_file: str, use_purl_bom_ref: bool = False, - *, - debug_message: DebugMessageCallback = quiet - ) -> None: - super().__init__( - requirements_content=requirements_file, use_purl_bom_ref=use_purl_bom_ref, - debug_message=debug_message - ) diff --git a/cyclonedx_py/_internal/pipenv.py b/cyclonedx_py/_internal/pipenv.py new file mode 100644 index 00000000..b99e4299 --- /dev/null +++ b/cyclonedx_py/_internal/pipenv.py @@ -0,0 +1,279 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +from argparse import OPTIONAL, ArgumentParser +from json import loads as json_loads +from os import getenv +from os.path import join +from textwrap import dedent +from typing import TYPE_CHECKING, Any, Dict, Generator, List, Optional, Set, Tuple + +from cyclonedx.exception.model import InvalidUriException, UnknownHashTypeException +from cyclonedx.model import ExternalReference, ExternalReferenceType, HashType, Property, XsUri +from cyclonedx.model.component import Component, ComponentType +from packageurl import PackageURL + +from . import BomBuilder, PropertyName +from .cli_common import add_argument_mc_type, add_argument_pyproject +from .utils.args import arpaese_split +from .utils.cdx import make_bom +from .utils.pyproject import pyproject_file2component + +if TYPE_CHECKING: # pragma: no cover + from logging import Logger + + from cyclonedx.model.bom import Bom + + NameDict = Dict[str, Any] + + +class PipenvBB(BomBuilder): + __LOCKFILE_META = '_meta' + + @staticmethod + def make_argument_parser(**kwargs: Any) -> 'ArgumentParser': + p = ArgumentParser(description=dedent("""\ + Build an SBOM from Pipenv manifest. + + The options and switches mimic the respective ones from Pipenv CLI. + """), + **kwargs) + # the options and switches SHALL mimic the ones from Pipenv + # see also: https://pipenv.pypa.io/en/latest/configuration.html + p.add_argument('--categories', + metavar='', + dest='categories', + type=arpaese_split((' ', ',')), + default=[]) + p.add_argument('-d', '--dev', + help='Analyse both develop and default packages [env var: PIPENV_DEV]', + action='store_true', + dest='dev', + default=getenv('PIPENV_DEV', '').lower() in ('1', 'true', 'yes', 'on')) + p.add_argument('--pypi-mirror', + metavar='', + help='Specify a PyPI mirror [env var: PIPENV_PYPI_MIRROR]', + dest='pypi_url', + default=getenv('PIPENV_PYPI_MIRROR')) + add_argument_pyproject(p) + add_argument_mc_type(p) + p.add_argument('project_directory', + metavar='project-directory', + help='The project directory for Pipenv (default: current working directory)\n' + 'Unlike Pipenv tool, there is no auto-detection in this very tool. ' # yet + 'Please provide the actual directory that contains `Pipfile` and `Pipfile.lock`', + nargs=OPTIONAL, + default='.') + return p + + def __init__(self, *, + logger: 'Logger', + pypi_url: Optional[str], + **__: Any) -> None: + self._logger = logger + self._pypi_url = pypi_url or None # ignore empty strings + + def __call__(self, *, # type:ignore[override] + project_directory: str, + categories: List[str], + dev: bool, + pyproject_file: Optional[str], + mc_type: 'ComponentType', + **__: Any) -> 'Bom': + + # the group-args shall mimic the ones from Pipenv, which uses (comma and/or space)-separated lists + # values be like: 'foo bar,bazz' -> ['foo', 'bar', 'bazz'] + lock_groups: Set[str] = set() + if len(categories) == 0: + lock_groups.add('default') + if dev: + lock_groups.add('develop') + else: + lock_groups.update(categories) + lock_groups.discard(self.__LOCKFILE_META) + if 'packages' in lock_groups: + # replace UI-category with Lock-group + lock_groups.remove('packages') + lock_groups.add('default') + if 'dev-packages' in lock_groups: + # replace UI-category with Lock-group + lock_groups.remove('dev-packages') + lock_groups.add('develop') + + lock_file = join(project_directory, 'Pipfile.lock') + try: + lock = open(lock_file, 'rt', encoding='utf8', errors='replace') + except OSError as err: + raise ValueError(f'Could not open lock file: {lock_file}') from err + with lock: + if pyproject_file is None: + rc = None + else: + rc = pyproject_file2component(pyproject_file, type=mc_type) + rc.bom_ref.value = 'root-component' + + return self._make_bom(rc, + json_loads(lock.read()), + lock_groups) + + def _make_bom(self, root_c: Optional['Component'], + locker: 'NameDict', use_groups: Set[str]) -> 'Bom': + self._logger.debug('use_groups: %r', use_groups) + + bom = make_bom() + bom.metadata.component = root_c + self._logger.debug('root-component: %r', root_c) + + meta: NameDict = locker[self.__LOCKFILE_META] + source_urls: Dict[str, str] = {source['name']: source['url'].rstrip('/') for source in meta.get('sources', ())} + if self._pypi_url is not None: + source_urls['pypi'] = self._pypi_url.rstrip('/') + + all_components: Dict[str, Component] = {} + if root_c: + # root for self-installs + all_components[root_c.name] = root_c + for group_name in use_groups: + self._logger.debug('processing group %r ...', group_name) + for package_name, package_data in locker.get(group_name, {}).items(): + if package_name in all_components: + component = all_components[package_name] + self._logger.info('existing component for package %r', package_name) + else: + component = all_components[package_name] = Component( + bom_ref=f'{package_name}{package_data.get("version", "")}', + type=ComponentType.LIBRARY, + name=package_name, + version=package_data['version'][2:] if 'version' in package_data else None, + external_references=self.__make_extrefs(package_name, package_data, source_urls), + ) + component.purl = PackageURL(type='pypi', + name=component.name, + version=component.version, + qualifiers=self.__purl_qualifiers4lock(package_data, source_urls) + ) if not self.__is_local(package_data) else None + self._logger.info('add component for package %r', package_name) + self._logger.debug('add component: %r', component) + bom.components.add(component) + component.properties.add(Property( + name=PropertyName.PipenvCategory.value, + value=group_name + )) + component.properties.update(Property( + name=PropertyName.PackageExtra.value, + value=package_extra + ) for package_extra in package_data.get('extras', ())) + + return bom + + def __is_local(self, data: 'NameDict') -> bool: + if 'file' in data: + location: str = data['file'] + elif 'path' in data: + location = data['path'] + else: + return False + # schema length is expected to be at least 2 chars, to prevent confusion with Windows drive letters `C:\` + might_have_schema = location.find(':', 2) + if might_have_schema <= 0: + return True + maybe_schema = location[:might_have_schema] + # example data + # - file:../MyProject + # - file:///home/user/projects/MyProject + # - git+file:///home/user/projects/MyProject + # - http://acme.org/MyProject/files/foo-bar.tar.gz + return maybe_schema == 'file' or maybe_schema.endswith('+file') + + __VCS_TYPES = ('git', 'hg', 'svn', 'bzr') + """ VCS types supported by pip. + see https://pip.pypa.io/en/latest/topics/vcs-support/#vcs-support + """ + + def __package_vcs(self, data: 'NameDict') -> Optional[Tuple[str, str]]: + for vct in self.__VCS_TYPES: + if vct in data: + url: str = data[vct] + hash_pos = url.find('#') + # remove install-annotations, which are behind a `#` + return vct, url[:hash_pos] if hash_pos >= 0 else url + return None + + def __make_extrefs(self, name: str, data: 'NameDict', source_urls: Dict[str, str] + ) -> Generator['ExternalReference', None, None]: + hashes = (HashType.from_composite_str(package_hash) + for package_hash + in data.get('hashes', ())) + vcs_source = self.__package_vcs(data) + try: + if vcs_source is not None: + vcs_source_url = vcs_source[1] + yield ExternalReference( + comment=f'from {vcs_source[0]}', + type=ExternalReferenceType.VCS, + url=XsUri(f'{vcs_source_url}#{data.get("ref", "")}')) + elif 'file' in data: + yield ExternalReference( + comment='from file', + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri(data['file']), + hashes=hashes) + elif 'path' in data: + yield ExternalReference( + comment='from path', + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri(data['path']), + hashes=hashes) + elif 'index' in data: + yield ExternalReference( + comment=f'from explicit index: {data["index"]}', + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri(f'{source_urls[data["index"]]}/{name}/'), + hashes=hashes) + else: + yield ExternalReference( + comment='from implicit index: pypi', + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri(f'{source_urls["pypi"]}/{name}/'), + hashes=hashes) + except (InvalidUriException, UnknownHashTypeException, KeyError) as error: # pragma: nocover + self._logger.debug('skipped dist-extRef for: %r', name, exc_info=error) + + def __purl_qualifiers4lock(self, data: 'NameDict', sourcees: Dict[str, str]) -> 'NameDict': + # see https://github.com/package-url/purl-spec/blob/master/PURL-SPECIFICATION.rst + qs = {} + vcs_source = self.__package_vcs(data) + if vcs_source is not None: + # see section 3.7.4 in https://github.com/spdx/spdx-spec/blob/cfa1b9d08903/chapters/3-package-information.md + # > For version-controlled files, the VCS location syntax is similar to a URL and has the: + # > `+://[/][@][#]` + qs['vcs_url'] = f'{vcs_source[1]}@{data["ref"]}' + elif 'file' in data: + if '://files.pythonhosted.org/' not in data['file']: + # skip PURL bloat, do not add implicit information + qs['download_url'] = data['file'] + elif 'index' in data: + source_url = sourcees.get(data['index'], 'https://pypi.org/simple') + if '://pypi.org/' not in source_url: + # skip PURL bloat, do not add implicit information + qs['repository_url'] = source_url + return qs + + def __make_dependency_graph(self) -> None: + # possible solution:: gather info from `pipenv graph --json-tree` and work with it + pass diff --git a/cyclonedx_py/_internal/poetry.py b/cyclonedx_py/_internal/poetry.py new file mode 100644 index 00000000..eabecd40 --- /dev/null +++ b/cyclonedx_py/_internal/poetry.py @@ -0,0 +1,472 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +from argparse import OPTIONAL, ArgumentParser +from dataclasses import dataclass +from itertools import chain +from os.path import join +from re import compile as re_compile +from textwrap import dedent +from typing import TYPE_CHECKING, Any, Dict, Generator, Iterable, List, Optional, Set, Tuple + +from cyclonedx.exception.model import InvalidUriException, UnknownHashTypeException +from cyclonedx.model import ExternalReference, ExternalReferenceType, HashType, Property, XsUri +from cyclonedx.model.component import Component, ComponentScope +from packageurl import PackageURL + +from . import BomBuilder, PropertyName +from .cli_common import add_argument_mc_type +from .utils.cdx import make_bom +from .utils.poetry import poetry2component +from .utils.toml import toml_loads + +if TYPE_CHECKING: # pragma: no cover + from logging import Logger + + from cyclonedx.model.bom import Bom + from cyclonedx.model.component import ComponentType + + NameDict = Dict[str, Any] + + +@dataclass +class _LockEntry: + name: str + component: 'Component' + dependencies: Set[str] + extra_deps: Dict[str, Set[str]] + added2bom: bool + added2bom_extras: Set[str] + + +class GroupsNotFoundError(ValueError): + def __init__(self, groups: Iterable[str]) -> None: + self.__groups = frozenset(groups) + + def __str__(self) -> str: + return 'Group(s) not found: ' + ', '.join(sorted(self.__groups)) + + +class ExtrasNotFoundError(ValueError): + def __init__(self, extras: Iterable[str]) -> None: + self.__extras = frozenset(extras) + + def __str__(self) -> str: + return f'Extra(s) [{",".join(sorted(self.__extras))}] not specified.' + + +class PoetryBB(BomBuilder): + + @staticmethod + def make_argument_parser(**kwargs: Any) -> 'ArgumentParser': + p = ArgumentParser(description=dedent("""\ + Build an SBOM from Poetry project. + + The options and switches mimic the respective ones from Poetry CLI. + """), + **kwargs) + # the options and switches SHALL mimic the ones from Poetry, which uses comma-separated lists and multi-use + p.add_argument('--without', + metavar='>', + help='The dependency groups to ignore (multiple values allowed)', + action='append', + dest='groups_without', + default=[]) + p.add_argument('--with', + metavar='>', + help='The optional dependency groups to include (multiple values allowed)', + action='append', + dest='groups_with', + default=[]) + p.add_argument('--only', + metavar='>', + help='The only dependency groups to include (multiple values allowed)', + action='append', + dest='groups_only', + default=[]) + p.add_argument('--no-dev', + help='Explicitly force: --only main', + dest='no_dev', + action='store_true') + eg = p.add_mutually_exclusive_group() + eg.add_argument('-E', '--extras', + metavar='>', + help='Extra sets of dependencies to include (multiple values allowed)', + action='append', + dest='extras', + default=[]) + eg.add_argument('--all-extras', + help='Include all extra dependencies (default: %(default)s)', + action='store_true', + dest='all_extras', + default=False) + del eg + add_argument_mc_type(p) + p.add_argument('project_directory', + metavar='project-directory', + help='The project directory for Poetry (default: current working directory)', + nargs=OPTIONAL, + default='.') + return p + + def __init__(self, *, + logger: 'Logger', + **__: Any) -> None: + self._logger = logger + + def __call__(self, *, # type:ignore[override] + project_directory: str, + groups_without: List[str], groups_with: List[str], groups_only: List[str], + no_dev: bool, + extras: List[str], all_extras: bool, + mc_type: 'ComponentType', + **__: Any) -> 'Bom': + pyproject_file = join(project_directory, 'pyproject.toml') + lock_file = join(project_directory, 'poetry.lock') + try: + pyproject = open(pyproject_file, 'rt', encoding='utf8', errors='replace') + except OSError as err: + raise ValueError(f'Could not open pyproject file: {pyproject_file}') from err + try: + lock = open(lock_file, 'rt', encoding='utf8', errors='replace') + except OSError as err: + pyproject.close() + raise ValueError(f'Could not open lock file: {lock_file}') from err + + with pyproject, lock: + project = toml_loads(pyproject.read()) + po_cfg = project['tool']['poetry'] + po_cfg.setdefault('group', {}) + po_cfg['group'].setdefault('main', {'dependencies': po_cfg.get('dependencies', {})}) + po_cfg['group'].setdefault('dev', {'dependencies': po_cfg.get('dev-dependencies', {})}) + po_cfg.setdefault('extras', {}) + + # the group-args shall mimic the ones from poetry, which uses comma-separated lists and multi-use + # values be like: ['foo', 'bar,bazz'] -> ['foo', 'bar', 'bazz'] + groups_only_s = set(filter(None, ','.join(groups_only).split(','))) + groups_with_s = set(filter(None, ','.join(groups_with).split(','))) + groups_without_s = set(filter(None, ','.join(groups_without).split(','))) + del groups_only, groups_with, groups_without + groups_not_found = set( + (gn, srcn) for gns, srcn in [ + (groups_only_s, 'only'), + (groups_with_s, 'with'), + (groups_without_s, 'without'), + ] for gn in gns + if gn not in po_cfg['group'].keys()) + if len(groups_not_found) > 0: + groups_error = GroupsNotFoundError(f'{gn!r} (via {srcn})' for gn, srcn in groups_not_found) + self._logger.error(groups_error) + raise ValueError('some Poetry groups are unknown') from groups_error + del groups_not_found + + extras_s = set(filter(None, ','.join(extras).split(','))) + del extras + extras_defined = set(po_cfg['extras'].keys()) + extras_not_found = extras_s - extras_defined + if len(extras_not_found) > 0: + extras_error = ExtrasNotFoundError(extras_not_found) + self._logger.error(extras_error) + raise ValueError('some package extras are unknown') from extras_error + del extras_not_found + + # the group-args shall mimic the ones from poetry + if no_dev: + groups = {'main', } + elif len(groups_only_s) > 0: + groups = groups_only_s + else: + # When used together, `--without` takes precedence over `--with`. + # see https://python-poetry.org/docs/managing-dependencies/#installing-group-dependencies + groups = set( + gn for gn, gc in po_cfg['group'].items() + # all non-optionals and the `with`-whitelisted optionals + if not gc.get('optional') or gn in groups_with_s + ) - groups_without_s + del groups_only_s, groups_with_s, groups_without_s + + return self._make_bom( + project, toml_loads(lock.read()), + groups, + extras_defined if all_extras else extras_s, + mc_type, + ) + + def _make_bom(self, project: 'NameDict', locker: 'NameDict', + use_groups: Set[str], use_extras: Set[str], + mc_type: 'ComponentType') -> 'Bom': + self._logger.debug('use_groups: %r', use_groups) + self._logger.debug('use_extras: %r', use_extras) + + bom = make_bom() + + po_cfg = project['tool']['poetry'] + + bom.metadata.component = root_c = poetry2component(po_cfg, type=mc_type) + root_c.bom_ref.value = root_c.name # 'root-component' + root_c.properties.update(Property( + name=PropertyName.PackageExtra.value, + value=extra + ) for extra in use_extras) + self._logger.debug('root-component: %r', root_c) + + lock_data: Dict[str, _LockEntry] = {le.name.lower(): le for le in self._parse_lock(locker)} + + lock_data[root_c.name] = _LockEntry( # needed for circle dependencies + name=root_c.name, + component=root_c, + dependencies=set(), + extra_deps={}, + added2bom=True, + added2bom_extras=use_extras + ) + extra_deps = set(map(str.lower, chain.from_iterable(po_cfg['extras'][extra] for extra in use_extras))) + + _dep_pattern = re_compile(r'^(?P[^\[]+)(?:\[(?P.*)\])?$') + + lock_version = self._get_lockfile_version(locker) + should_tidy_lock_names = lock_version >= (2,) + + def _add_ld(name: str, extras: Set[str]) -> Optional['Component']: + name = name.lower() + if name == 'python': + return None + if should_tidy_lock_names: + name = name.replace('.', '-') + le = lock_data.get(name) + if le is None: + self._logger.warning('skip unlocked component: %s', name) + return None + _existed = le.added2bom + if _existed: + self._logger.debug('existing component: %r', le.component) + else: + self._logger.info('add component for package %r', name) + self._logger.debug('add component: %r', le.component) + le.added2bom = True + bom.components.add(le.component) + new_extras = extras - le.added2bom_extras + self._logger.debug('new extras for %r: %r', le.component, new_extras) + le.added2bom_extras.update(new_extras) + le.component.properties.update(Property( + name=PropertyName.PackageExtra.value, + value=extra + ) for extra in new_extras) + depends_on: List[Optional['Component']] = [] + for dep in set(chain( + () if _existed else le.dependencies, + chain.from_iterable(le.extra_deps.get(extra, ()) for extra in new_extras) + )): + self._logger.debug('component %r depends on %r', le.component, dep) + depm = _dep_pattern.match(dep) + if depm is None: # pragma: nocover + self._logger.warning('skipping malformed dependency: %r', dep) + continue + depends_on.append(_add_ld( + depm.group('name'), + set(filter(None, map(str.strip, (depm.group('extras') or '').split(',')))) + )) + bom.register_dependency(le.component, filter(None, depends_on)) + return le.component + + depends_on: List[Optional['Component']] = [] + for group_name in use_groups: + self._logger.debug('processing group %r ...', group_name) + for dep_name, dep_spec in po_cfg['group'][group_name].get('dependencies', {}).items(): + dep_name = dep_name.lower() + if should_tidy_lock_names: + dep_name = dep_name.replace('.', '-') + self._logger.debug('root-component depends on %s', dep_name) + if dep_name == 'python': + continue + if dep_name not in lock_data: + self._logger.warning('skip unlocked dependency: %s', dep_name) + continue + lock_data[dep_name].component.properties.add(Property( + name=PropertyName.PoetryGroup.value, + value=group_name + )) + dep_spec = dep_spec if isinstance(dep_spec, dict) else {'version': dep_spec} + if dep_spec.get('optional', False) and dep_name not in extra_deps: + self._logger.debug('skip optional dependency: %s', dep_name) + continue + depends_on.append(_add_ld(dep_name, set(dep_spec.get('extras', ())))) + bom.register_dependency(root_c, filter(None, depends_on)) + + return bom + + @staticmethod + def _get_lockfile_version(locker: 'NameDict') -> Tuple[int, ...]: + return tuple(int(v) for v in locker['metadata'].get('lock-version', '1.0').split('.')) + + def _parse_lock(self, locker: 'NameDict') -> Generator[_LockEntry, None, None]: + locker.setdefault('metavar', {}) + locker.setdefault('package', []) + + lock_version = self._get_lockfile_version(locker) + self._logger.debug('lock_version: %r', lock_version) + + metavar_files = locker['metadata'].get('files', {}) if lock_version < (2,) else {} + + package: 'NameDict' + for package in locker['package']: + package.setdefault('files', metavar_files.get(package['name'], [])) + package.setdefault('source', {}) + yield _LockEntry( + name=package['name'], + component=self.__make_component4lock(package), + dependencies=set(dn for dn, ds in package.get('dependencies', {}).items() + if not isinstance(ds, dict) or not ds.get('optional', False)), + extra_deps={en: set(di.split(' ')[0] for di in ds) for en, ds in package.get('extras', {}).items()}, + added2bom=False, + added2bom_extras=set() + ) + + __PACKAGE_SRC_VCS = ['git'] # not supported yet: hg, svn + __PACKAGE_SRC_LOCAL = ['file', 'directory'] + + def __make_component4lock(self, package: 'NameDict') -> 'Component': + source = package['source'] + is_vcs = source.get('type') in self.__PACKAGE_SRC_VCS + is_local = source.get('type') in self.__PACKAGE_SRC_LOCAL + + return Component( + bom_ref=f'{package["name"]}@{package["version"]}', + name=package['name'], + version=package.get('version'), + description=package.get('description'), + scope=ComponentScope.OPTIONAL if package.get('optional') else None, + external_references=self.__extrefs4lock(package), + properties=filter(lambda p: p and p.value, [ # type: ignore[arg-type] + Property( # for backwards compatibility: category -> group + name=PropertyName.PoetryGroup.value, + value=package['category'] + ) if 'category' in package else None, + Property( + name=PropertyName.PoetryPackageSourceReference.value, + value=source['reference'] + ) if is_vcs and 'reference' in source else None, + Property( + name=PropertyName.PoetryPackageSourceResolvedReference.value, + value=source['resolved_reference'] + ) if is_vcs and 'resolved_reference' in source else None, + ]), + purl=PackageURL(type='pypi', + name=package['name'], + version=package['version'], + qualifiers=self.__purl_qualifiers4lock(package) + ) if not is_local else None + ) + + def __purl_qualifiers4lock(self, package: 'NameDict') -> 'NameDict': + # see https://github.com/package-url/purl-spec/blob/master/PURL-SPECIFICATION.rst + qs = {} + + source = package['source'] + source_type = package['source'].get('type') + + if source_type in self.__PACKAGE_SRC_VCS: + # see section 3.7.4 in https://github.com/spdx/spdx-spec/blob/cfa1b9d08903/chapters/3-package-information.md + # > For version-controlled files, the VCS location syntax is similar to a URL and has the: + # > `+://[/][@][#]` + qs['vcs_url'] = f'{source["type"]}+{source["url"]}@' + \ + source.get('resolved_reference', source.get('reference', '')) + elif source_type == 'url': + if '://files.pythonhosted.org/' not in source['url']: + # skip PURL bloat, do not add implicit information + qs['download_url'] = source['url'] + elif source_type == 'legacy': + source_url = package['source'].get('url', 'https://pypi.org/simple') + if '://pypi.org/' not in source_url: + # skip PURL bloat, do not add implicit information + qs['repository_url'] = source_url + + return qs + + def __extrefs4lock(self, package: 'NameDict') -> Generator['ExternalReference', None, None]: + source_type = package['source'].get('type', 'legacy') + if 'legacy' == source_type: + yield from self.__extrefs4lock_legacy(package) + elif 'url' == source_type: + yield from self.__extrefs4lock_url(package) + elif 'file' == source_type: + yield from self.__extrefs4lock_file(package) + elif 'directory' == source_type: + yield from self.__extrefs4lock_directory(package) + elif source_type in self.__PACKAGE_SRC_VCS: + yield from self.__extrefs4lock_vcs(package) + + def __extrefs4lock_legacy(self, package: 'NameDict') -> Generator['ExternalReference', None, None]: + source_url = package['source'].get('url', 'https://pypi.org/simple') + for file in package['files']: + try: + yield ExternalReference( + comment='from legacy-api', + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri(f'{source_url}/{package["name"]}/#{file["file"]}'), + hashes=[HashType.from_composite_str(file['hash'])] + ) + except (InvalidUriException, UnknownHashTypeException) as error: # pragma: nocover + self._logger.debug('skipped dist-extRef for: %r | %r', package['name'], file, exc_info=error) + del error + + def __extrefs4lock_url(self, package: 'NameDict') -> Generator['ExternalReference', None, None]: + try: + yield ExternalReference( + comment='from url', + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri(package['source']['url']), + hashes=[HashType.from_composite_str(package['files'][0]['hash'])] if len(package['files']) else None + ) + except (InvalidUriException, UnknownHashTypeException) as error: # pragma: nocover + self._logger.debug('skipped dist-extRef for: %r', package['name'], exc_info=error) + + def __extrefs4lock_file(self, package: 'NameDict') -> Generator['ExternalReference', None, None]: + try: + yield ExternalReference( + comment='from file', + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri(package['source']['url']), + hashes=[HashType.from_composite_str(package['files'][0]['hash'])] if len(package['files']) else None + ) + except (InvalidUriException, UnknownHashTypeException) as error: # pragma: nocover + self._logger.debug('skipped dist-extRef for: %r', package['name'], exc_info=error) + + def __extrefs4lock_directory(self, package: 'NameDict') -> Generator['ExternalReference', None, None]: + try: + yield ExternalReference( + comment='from directory', + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri(package['source']['url']) + # no hash for a source-directory + ) + except InvalidUriException as error: # pragma: nocover + self._logger.debug('skipped dist-extRef for: %r', package['name'], exc_info=error) + + def __extrefs4lock_vcs(self, package: 'NameDict') -> Generator['ExternalReference', None, None]: + source = package['source'] + vcs_ref = source.get('resolved_reference', source.get('reference', '')) + try: + yield ExternalReference( + comment='from VCS', + type=ExternalReferenceType.VCS, + url=XsUri(f'{source["type"]}+{source["url"]}#{vcs_ref}') + # no hashes, has source.resolved_reference instead, which is a property + ) + except InvalidUriException as error: # pragma: nocover + self._logger.debug('skipped dist-extRef for: %r', package['name'], exc_info=error) diff --git a/cyclonedx_py/_internal/requirements.py b/cyclonedx_py/_internal/requirements.py new file mode 100644 index 00000000..c5330702 --- /dev/null +++ b/cyclonedx_py/_internal/requirements.py @@ -0,0 +1,218 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +from argparse import OPTIONAL, ArgumentParser +from functools import reduce +from os import unlink +from textwrap import dedent +from typing import TYPE_CHECKING, Any, Generator, List, Optional, Set + +from cyclonedx.exception.model import InvalidUriException, UnknownHashTypeException +from cyclonedx.model import ExternalReference, ExternalReferenceType, HashType, Property, XsUri +from cyclonedx.model.component import Component, ComponentType +from packageurl import PackageURL +from pip_requirements_parser import RequirementsFile # type:ignore[import-untyped] + +from . import BomBuilder, PropertyName +from .cli_common import add_argument_mc_type, add_argument_pyproject +from .utils.cdx import make_bom +from .utils.io import io2file +from .utils.pyproject import pyproject_file2component + +if TYPE_CHECKING: # pragma: no cover + from logging import Logger + + from cyclonedx.model.bom import Bom + from pip_requirements_parser import InstallRequirement + + +class RequirementsBB(BomBuilder): + + @staticmethod + def make_argument_parser(**kwargs: Any) -> 'ArgumentParser': + p = ArgumentParser(description=dedent("""\ + Build an SBOM from Pip requirements. + + The options and switches mimic the respective ones from Pip CLI. + """), + epilog=dedent("""\ + Example Usage: + • Build an SBOM from a requirements file: + $ %(prog)s requirements-prod.txt + • Merge multiple files and build an SBOM from it: + $ cat requirements/*.txt | %(prog)s - + • Build an inventory for all installed packages: + $ python -m pip freeze --all | %(prog)s - + • Build an inventory for all installed packages in a conda environment: + $ conda run python -m pip freeze --all | %(prog)s - + • Build an inventory for installed packages in a Python (virtual) environment: + $ .../.venv/bin/python -m pip freeze --all --local --require-virtualenv |\\ + %(prog)s - + • Build an inventory from an unfrozen manifest: + $ python -m pip install -r dependencies.txt &&\\ + python -m pip freeze | %(prog)s - + """), + **kwargs) + # the options and switches SHALL mimic the ones from Pip + p.add_argument('-i', '--index-url', + metavar='', + help='Base URL of the Python Package Index. ' + 'This should point to a repository compliant with PEP 503 (the simple repository API) ' + 'or a local directory laid out in the same format. ' + '(default: %(default)s)', + dest='index_url', + default='https://pypi.org/simple') + p.add_argument('--extra-index-url', + metavar='', + help='Extra URLs of package indexes to use in addition to --index-url.' + ' Should follow the same rules as --index-url', + action='append', + dest='extra_index_urls', + default=[]) + add_argument_pyproject(p) + add_argument_mc_type(p) + p.add_argument('requirements_file', + metavar='', + help='Path to requirements file. May be set to "-" to read from . ' + '(default: %(default)r in current working directory)', + nargs=OPTIONAL, + default='requirements.txt') + return p + + def __init__(self, *, + logger: 'Logger', + index_url: str, + extra_index_urls: List[str], + **__: Any) -> None: + self._logger = logger + self._index_url = index_url + self._extra_index_urls = set(extra_index_urls) + + def __call__(self, *, # type:ignore[override] + requirements_file: str, + pyproject_file: Optional[str], + mc_type: 'ComponentType', + **__: Any) -> 'Bom': + if pyproject_file is None: + rc = None + else: + rc = pyproject_file2component(pyproject_file, type=mc_type) + rc.bom_ref.value = 'root-component' + + if requirements_file == '-': + from sys import stdin # late bind, to allow patching + rt = io2file(stdin.buffer) + try: + rf = RequirementsFile.from_file(rt, include_nested=False) + finally: + unlink(rt) + del rt, stdin + else: + rf = RequirementsFile.from_file(requirements_file, include_nested=True) + + return self._make_bom(rc, rf) + + def _make_bom(self, root_c: Optional['Component'], rf: 'RequirementsFile') -> 'Bom': + bom = make_bom() + bom.metadata.component = root_c + self._logger.debug('root-component: %r', root_c) + self._add_components(bom, rf) + + return bom + + def _add_components(self, bom: 'Bom', rf: 'RequirementsFile') -> None: + index_url = reduce(lambda c, i: i.options.get('index_url') or c, rf.options, self._index_url) + extra_index_urls = self._extra_index_urls.union(*( + i.options['extra_index_urls'] for i in rf.options if 'extra_index_urls' in i.options)) + self._logger.debug('index_url = %r', index_url) + self._logger.debug('extra_index_urls = %r', extra_index_urls) + + for requirement in rf.requirements: + component = self._make_component(requirement, index_url, extra_index_urls) + self._logger.info('add component for line %r', requirement.line) + self._logger.debug('add component: %r', component) + if not component.version and not requirement.is_url: + self._logger.warning('component has no pinned version: %r', component) + bom.components.add(component) + + def __hashes4req(self, req: 'InstallRequirement') -> Generator['HashType', None, None]: + for hash in req.hash_options: + try: + yield HashType.from_composite_str(hash) + except UnknownHashTypeException as error: + self._logger.debug('skipping hash %s', hash, exc_info=error) + del error + + def _make_component(self, req: 'InstallRequirement', + index_url: str, extra_index_urls: Set[str]) -> 'Component': + name = req.name + version = req.get_pinned_version or None + hashes = list(self.__hashes4req(req)) + external_references = [] + purl_qualifiers = {} # see https://github.com/package-url/purl-spec/blob/master/PURL-SPECIFICATION.rst + + # workaround for https://github.com/nexB/pip-requirements-parser/issues/24 + is_local = req.is_local_path and (not req.link or req.link.scheme in ['', 'file']) + try: + if is_local: + external_references.append(ExternalReference( + comment='explicit local path', + type=ExternalReferenceType.OTHER, + url=XsUri(req.link.url), + hashes=hashes)) + elif req.is_url: + if '://files.pythonhosted.org/' not in req.link.url: + # skip PURL bloat, do not add implicit information + purl_qualifiers['vcs_url' if req.is_vcs_url else 'download_url'] = req.link.url + external_references.append(ExternalReference( + comment='explicit dist url', + type=ExternalReferenceType.VCS if req.is_vcs_url else ExternalReferenceType.DISTRIBUTION, + url=XsUri(req.link.url), + hashes=hashes)) + else: + # url based on https://warehouse.pypa.io/api-reference/legacy.html + external_references.append(ExternalReference( + comment='implicit dist url', + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri(f'{index_url or self._index_url}/{name}/'), + hashes=hashes)) + for eiurl in extra_index_urls: + external_references.append(ExternalReference( + comment='implicit dist extra-url', + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri(f'{eiurl}/{name}/'), + hashes=hashes)) + except InvalidUriException as error: + self._logger.debug('failed ExternalReference/url URL for: %s', req.line, exc_info=error) + del error + + return Component( + bom_ref=f'requirements-L{req.line_number}', + description=f'requirements line {req.line_number}: {req.line}', + type=ComponentType.LIBRARY, + name=name or 'unknown', + version=version, + purl=PackageURL(type='pypi', name=req.name, version=version, + qualifiers=purl_qualifiers + ) if not is_local and name else None, + external_references=external_references, + properties=(Property( + name=PropertyName.PackageExtra.value, + value=extra + ) for extra in req.extras) + ) diff --git a/cyclonedx_py/_internal/utils/args.py b/cyclonedx_py/_internal/utils/args.py new file mode 100644 index 00000000..820d9b9a --- /dev/null +++ b/cyclonedx_py/_internal/utils/args.py @@ -0,0 +1,56 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +from argparse import ArgumentTypeError +from enum import Enum +from typing import Callable, Iterable, List, Type, TypeVar, Union + +_E = TypeVar('_E', bound=Enum) + + +def argparse_type4enum(enum: Type[_E]) -> Callable[[str], _E]: + def str2case(value: str) -> _E: + try: + return enum[value.upper()] + except KeyError: + raise ArgumentTypeError(f'unsupported value {value!r}') + + return str2case + + +def choices4enum(enum: Type[Enum]) -> str: + return f'{{choices: {", ".join(sorted(c.name for c in enum))}}}' + + +def arpaese_split(sep: Union[str, Iterable[str]]) -> Callable[[str], List[str]]: + if isinstance(sep, str): + def repl(value: str) -> str: + return value + else: + _seps = set(sep) + sep = _seps.pop() + + def repl(value: str) -> str: + for s in _seps: + value = value.replace(s, sep) + return value + + def str_split(value: str) -> List[str]: + return list(filter(None, map(str.strip, repl(value).split(sep)))) + + return str_split diff --git a/cyclonedx_py/_internal/utils/cdx.py b/cyclonedx_py/_internal/utils/cdx.py new file mode 100644 index 00000000..e92692d7 --- /dev/null +++ b/cyclonedx_py/_internal/utils/cdx.py @@ -0,0 +1,111 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +""" +CycloneDX related helpers and utils. +""" + +from re import compile as re_compile +from typing import Any, Dict, Iterable + +from cyclonedx.model import ExternalReference, ExternalReferenceType, Tool, XsUri +from cyclonedx.model.bom import Bom +from cyclonedx.model.license import License, LicenseExpression + +from cyclonedx_py import __version__ + + +def make_bom(**kwargs: Any) -> Bom: + bom = Bom(**kwargs) + bom.metadata.tools.add(Tool( + vendor='CycloneDX', + name='cyclonedx-bom', + version=__version__ or 'UNKNOWN', + external_references=[ + ExternalReference( + type=ExternalReferenceType.BUILD_SYSTEM, + url=XsUri('https://github.com/CycloneDX/cyclonedx-python/actions') + ), + ExternalReference( + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri('https://pypi.org/project/cyclonedx-bom/') + ), + ExternalReference( + type=ExternalReferenceType.DOCUMENTATION, + url=XsUri('https://cyclonedx-bom-tool.readthedocs.io/') + ), + ExternalReference( + type=ExternalReferenceType.ISSUE_TRACKER, + url=XsUri('https://github.com/CycloneDX/cyclonedx-python/issues') + ), + ExternalReference( + type=ExternalReferenceType.LICENSE, + url=XsUri('https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE') + ), + ExternalReference( + type=ExternalReferenceType.RELEASE_NOTES, + url=XsUri('https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md') + ), + ExternalReference( + type=ExternalReferenceType.VCS, + url=XsUri('https://github.com/CycloneDX/cyclonedx-python') + ), + ExternalReference( + type=ExternalReferenceType.WEBSITE, + url=XsUri('https://github.com/CycloneDX/cyclonedx-python/#readme') + ) + ])) + return bom + + +def licenses_fixup(licenses: Iterable['License']) -> Iterable['License']: + licenses = set(licenses) + for license in licenses: + if isinstance(license, LicenseExpression): + return (license,) + return licenses + + +__known_ulr_labels: Dict[str, ExternalReferenceType] = { + # see https://peps.python.org/pep-0345/#project-url-multiple-use + # see https://github.com/pypi/warehouse/issues/5947#issuecomment-699660629 + 'bugtracker': ExternalReferenceType.ISSUE_TRACKER, + 'issuetracker': ExternalReferenceType.ISSUE_TRACKER, + 'issues': ExternalReferenceType.ISSUE_TRACKER, + 'bugreports': ExternalReferenceType.ISSUE_TRACKER, + 'tracker': ExternalReferenceType.ISSUE_TRACKER, + 'home': ExternalReferenceType.WEBSITE, + 'homepage': ExternalReferenceType.WEBSITE, + 'download': ExternalReferenceType.DISTRIBUTION, + 'documentation': ExternalReferenceType.DOCUMENTATION, + 'docs': ExternalReferenceType.DOCUMENTATION, + 'changelog': ExternalReferenceType.RELEASE_NOTES, + 'changes': ExternalReferenceType.RELEASE_NOTES, + # 'source': ExternalReferenceType.SOURCE-DISTRIBUTION, + 'repository': ExternalReferenceType.VCS, + 'github': ExternalReferenceType.VCS, + 'chat': ExternalReferenceType.CHAT, +} + +__re_nochar = re_compile('[^a-z]') + + +def url_label_to_ert(value: str) -> ExternalReferenceType: + return __known_ulr_labels.get( + __re_nochar.sub('', str(value).lower()), + ExternalReferenceType.OTHER) diff --git a/cyclonedx_py/_internal/utils/conda.py b/cyclonedx_py/_internal/utils/conda.py deleted file mode 100644 index 36ff656f..00000000 --- a/cyclonedx_py/_internal/utils/conda.py +++ /dev/null @@ -1,177 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -import json -from json import JSONDecodeError -from typing import Optional, Tuple, TypedDict -from urllib.parse import urlparse - -# See https://github.com/package-url/packageurl-python/issues/65 -from packageurl import PackageURL - - -class CondaPackage(TypedDict): - """ - Internal package for unifying Conda package definitions to. - """ - base_url: str - build_number: Optional[int] - build_string: str - channel: str - dist_name: str - name: str - platform: str - version: str - package_format: Optional[str] - md5_hash: Optional[str] - - -def conda_package_to_purl(pkg: CondaPackage) -> PackageURL: - """ - Return the purl for the specified package. - See https://github.com/package-url/purl-spec/blob/master/PURL-TYPES.rst#conda - """ - if pkg['channel'] == 'pypi' and pkg['platform'] == 'pypi': - return _conda_package_to_pypi_purl(pkg) - - qualifiers = { - 'build': pkg['build_string'], - 'channel': pkg['channel'], - 'subdir': pkg['platform'], - } - if pkg['package_format'] is not None: - qualifiers['type'] = str(pkg['package_format']) - - purl = PackageURL( - type='conda', name=pkg['name'], version=pkg['version'], qualifiers=qualifiers - ) - return purl - - -def _conda_package_to_pypi_purl(pkg: CondaPackage) -> PackageURL: - """ - Return the purl for a pip-installed package in a conda environment. - These packages are listed as if from the pseudo-channel "pypi". - See https://github.com/package-url/purl-spec/blob/master/PURL-TYPES.rst#pypi - """ - name = pkg['name'].lower().replace('_', '-') - purl = PackageURL( - type='pypi', name=name, version=pkg['version'] - ) - return purl - - -def parse_conda_json_to_conda_package(conda_json_str: str) -> Optional[CondaPackage]: - try: - package_data = json.loads(conda_json_str) - except JSONDecodeError as e: - raise ValueError(f'Invalid JSON supplied - cannot be parsed: {conda_json_str}') from e - - if not isinstance(package_data, dict): - return None - - package_data.setdefault('package_format', None) - package_data.setdefault('md5_hash', None) - return CondaPackage(package_data) # type: ignore # @FIXME write proper type safe dict at this point - - -def parse_conda_list_str_to_conda_package(conda_list_str: str) -> Optional[CondaPackage]: - """ - Helper method for parsing a line of output from `conda list --explicit` into our internal `CondaPackage` object. - - Params: - conda_list_str: - Line of output from `conda list --explicit` - - Returns: - Instance of `CondaPackage` else `None`. - """ - - line = conda_list_str.strip() - - if '' == line or line[0] in ['#', '@']: - # Skip comments, @EXPLICT or empty lines - return None - - # Remove any hash - package_hash = None - if '#' in line: - *_line_parts, package_hash = line.split('#') - line = ''.join(*_line_parts) - - package_parts = line.split('/') - if len(package_parts) < 2: - raise ValueError(f'Unexpected format in {package_parts}') - *_package_url_parts, package_arch, package_name_version_build_string = package_parts - package_url = urlparse('/'.join(_package_url_parts)) - - package_name, build_version, build_string, package_format = split_package_string(package_name_version_build_string) - build_string, build_number = split_package_build_string(build_string) - - return CondaPackage( - base_url=package_url.geturl(), build_number=build_number, build_string=build_string, - channel=package_url.path[1:], dist_name=f'{package_name}-{build_version}-{build_string}', - name=package_name, platform=package_arch, version=build_version, package_format=package_format, - md5_hash=package_hash - ) - - -def split_package_string(package_name_version_build_string: str) -> Tuple[str, str, str, str]: - """Helper method for parsing package_name_version_build_string. - - Returns: - Tuple (package_name, build_version, build_string) - """ - package_nvbs_parts = package_name_version_build_string.split('-') - if len(package_nvbs_parts) < 3: - raise ValueError(f'Unexpected format in {package_nvbs_parts}') - - *_package_name_parts, build_version, build_string = package_nvbs_parts - package_name = '-'.join(_package_name_parts) - - # Split package_format (.conda or .tar.gz) at the end - _pos = build_string.find('.') - package_format = build_string[_pos + 1:] - build_string = build_string[0:_pos] - - return package_name, build_version, build_string, package_format - - -def split_package_build_string(build_string: str) -> Tuple[str, Optional[int]]: - """Helper method for parsing build_string. - - Returns: - Tuple (build_string, build_number) - """ - - if '' == build_string: - return '', None - - if build_string.isdigit(): - return '', int(build_string) - - _pos = build_string.rindex('_') if '_' in build_string else -1 - if _pos >= 1: - # Build number will be the last part - check if it is an integer - # Updated logic given https://github.com/CycloneDX/cyclonedx-python-lib/issues/65 - build_number = build_string[_pos + 1:] - if build_number.isdigit(): - return build_string, int(build_number) - - return build_string, None diff --git a/cyclonedx_py/_internal/utils/io.py b/cyclonedx_py/_internal/utils/io.py new file mode 100644 index 00000000..c80d5f0c --- /dev/null +++ b/cyclonedx_py/_internal/utils/io.py @@ -0,0 +1,43 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + +from sys import getdefaultencoding +from tempfile import NamedTemporaryFile +from typing import BinaryIO + +from chardet import detect as chardetect + + +def io2str(io: BinaryIO, *, errors: str = 'strict') -> str: + data = io.read() + # see https://docs.python.org/3/library/codecs.html#standard-encodings + encoding = (chardetect(data)['encoding'] or getdefaultencoding()).replace( + # replace Windows-encoding with code-page + 'Windows-', 'cp') + return data.decode(encoding, errors) + + +def io2file(io: BinaryIO, *, errors: str = 'strict') -> str: + # prevent issues on windows: https://github.com/python/cpython/issues/58451 + tf = NamedTemporaryFile('wt', delete=False, + # we prefer utf8 encoded strings, but ... + # - must not change newlines + # - must not change encoding, fallback to system encoding for compatibility + newline='', encoding=None) + tf.write(io2str(io, errors=errors)) + tf.close() + return tf.name diff --git a/cyclonedx_py/_internal/license_trove_classifier.py b/cyclonedx_py/_internal/utils/license_trove_classifier.py similarity index 93% rename from cyclonedx_py/_internal/license_trove_classifier.py rename to cyclonedx_py/_internal/utils/license_trove_classifier.py index bad2a7c6..7df04230 100644 --- a/cyclonedx_py/_internal/license_trove_classifier.py +++ b/cyclonedx_py/_internal/utils/license_trove_classifier.py @@ -1,5 +1,3 @@ -# encoding: utf-8 - # This file is part of CycloneDX Python Lib # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,23 +15,15 @@ # SPDX-License-Identifier: Apache-2.0 # Copyright (c) OWASP Foundation. All Rights Reserved. + """ This module is internal - it is not public API. All in here may have breaking change without notice. """ -__all__ = [ - 'PREFIX_LICENSE', 'PREFIX_OSI_APPROVED', - 'tidy', 'to_spdx', -] - from typing import Optional -PREFIX_LICENSE = 'License :: ' -PREFIX_OSI_APPROVED = 'OSI Approved :: ' - - """ Map of trove classifiers to SPDX license ID or SPDX license expression. @@ -49,10 +39,12 @@ See also: https://peps.python.org/pep-0639/#mapping-license-classifiers-to-spdx-identifiers """ __TO_SPDX_MAP = { + # region not OSI Approved + 'License :: Aladdin Free Public License (AFPL)': 'Aladdin', 'License :: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication': 'CC0-1.0', - 'License :: CeCILL-B Free Software License Agreement (CECILL-B)': ' CECILL-B', + 'License :: CeCILL-B Free Software License Agreement (CECILL-B)': 'CECILL-B', 'License :: CeCILL-C Free Software License Agreement (CECILL-C)': 'CECILL-C', # 'License :: Eiffel Forum License (EFL)': which one? # - EFL-1.0 @@ -63,7 +55,7 @@ # 'License :: Free for non-commercial use': unknown to SPDX # 'License :: Freely Distributable': unknown to SPDX # 'License :: Freeware': unknown to SPDX - 'License :: GUST Font License 1.0': '', + # 'License :: GUST Font License 1.0': unknown to SPDX, # 'License :: GUST Font License 2006-09-30': unknown to SPDX # 'License :: Netscape Public License (NPL)': which version? # - NPL-1.0 @@ -72,8 +64,11 @@ # 'License :: Other/Proprietary License': unknown to SPDX # 'License :: Public Domain': unknown to SPDX # 'License :: Repoze Public License': unknown to SPDX + # endregion not OSI Approved + # region OSI Approved + # !! reminder: the following are OSI approved, sp map only to the SPDX that ar marked as so # !! see the ideas and cases of https://peps.python.org/pep-0639/#mapping-license-classifiers-to-spdx-identifiers # 'License :: OSI Approved :: Academic Free License (AFL)': which one? @@ -88,10 +83,10 @@ # 'License :: OSI Approved :: Artistic License': which version? 'License :: OSI Approved :: Attribution Assurance License': 'AAL', # 'License :: OSI Approved :: BSD License': which exactly? - 'License :: OSI Approved :: Boost Software License 1.0 (BSL-1.0)': ' BSL-1.0', - 'License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, version 2.1 (CeCILL-2.1)': ' CECILL-2.1', + 'License :: OSI Approved :: Boost Software License 1.0 (BSL-1.0)': 'BSL-1.0', + 'License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, version 2.1 (CeCILL-2.1)': 'CECILL-2.1', 'License :: OSI Approved :: Common Development and Distribution License 1.0 (CDDL-1.0)': 'CDDL-1.0', - 'License :: OSI Approved :: Common Public License': ' CPL-1.0', + 'License :: OSI Approved :: Common Public License': 'CPL-1.0', 'License :: OSI Approved :: Eclipse Public License 1.0 (EPL-1.0)': 'EPL-1.0', 'License :: OSI Approved :: Eclipse Public License 2.0 (EPL-2.0)': 'EPL-1.0', # 'License :: OSI Approved :: Eiffel Forum License': which version? @@ -156,15 +151,11 @@ # - ZPL-2.0 # - ZPL-2.1 'License :: OSI Approved :: zlib/libpng License': 'Zlib', + # endregion OSI Approved } -def to_spdx(classifier: str) -> Optional[str]: +def license_trove2spdx(classifier: str) -> Optional[str]: """return the SPDX id or expression for a given license trove classifier""" return __TO_SPDX_MAP.get(classifier) - - -def tidy(classifier: str) -> str: - """strip license trove classifier prefixes""" - return classifier.replace(PREFIX_LICENSE, '').replace(PREFIX_OSI_APPROVED, '') diff --git a/cyclonedx_py/_internal/utils/packaging.py b/cyclonedx_py/_internal/utils/packaging.py new file mode 100644 index 00000000..c2560c1e --- /dev/null +++ b/cyclonedx_py/_internal/utils/packaging.py @@ -0,0 +1,73 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + +from typing import TYPE_CHECKING, Generator, List + +from cyclonedx.exception.model import InvalidUriException +from cyclonedx.factory.license import LicenseFactory +from cyclonedx.model import ExternalReference, ExternalReferenceType, XsUri + +from .cdx import url_label_to_ert +from .pep621 import classifiers2licenses + +if TYPE_CHECKING: # pragma: no cover + import sys + + from cyclonedx.model.license import License + + if sys.version_info >= (3, 10): + from importlib.metadata import PackageMetadata + else: + from email.message import Message as PackageMetadata + + +def metadata2licenses(metadata: 'PackageMetadata') -> Generator['License', None, None]: + lfac = LicenseFactory() + if 'Classifier' in metadata: + # see https://packaging.python.org/en/latest/specifications/core-metadata/#classifier-multiple-use + classifiers: List[str] = metadata.get_all('Classifier') # type:ignore[assignment] + yield from classifiers2licenses(classifiers, lfac) + if 'License' in metadata: + # see https://packaging.python.org/en/latest/specifications/core-metadata/#license + yield lfac.make_from_string(metadata['License']) + + +def metadata2extrefs(metadata: 'PackageMetadata') -> Generator['ExternalReference', None, None]: + for meta_key, extref_typet in ( + # see https://packaging.python.org/en/latest/specifications/core-metadata/#home-page + ('Home-page', ExternalReferenceType.WEBSITE), + # see https://packaging.python.org/en/latest/specifications/core-metadata/#download-url + ('Download-URL', ExternalReferenceType.DISTRIBUTION), + ): + if meta_key in metadata: + try: + yield ExternalReference( + comment=f'from packaging metadata: {meta_key}', + type=extref_typet, + url=XsUri(metadata[meta_key])) + except InvalidUriException: # pragma: nocover + pass + for label_url in metadata.get_all('Project-URL', ()): + # see https://packaging.python.org/en/latest/specifications/core-metadata/#project-url-multiple-use + label, url = label_url.split(',', maxsplit=1) + try: + yield ExternalReference( + comment=f'from packaging metadata Project-URL: {label}', + type=url_label_to_ert(label), + url=XsUri(url.strip())) + except InvalidUriException: # pragma: nocover + pass diff --git a/cyclonedx_py/_internal/utils/pep610.py b/cyclonedx_py/_internal/utils/pep610.py new file mode 100644 index 00000000..3824c186 --- /dev/null +++ b/cyclonedx_py/_internal/utils/pep610.py @@ -0,0 +1,143 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +""" +Functionality related to PEP 610. + +See https://packaging.python.org/en/latest/specifications/direct-url/ +See https://peps.python.org/pep-0610/ +""" + +from abc import ABC, abstractmethod +from json import JSONDecodeError, loads as json_loads +from typing import TYPE_CHECKING, Any, Dict, Optional + +from cyclonedx.exception.model import InvalidUriException, UnknownHashTypeException +from cyclonedx.model import ExternalReference, ExternalReferenceType, HashType, XsUri + +if TYPE_CHECKING: + from importlib.metadata import Distribution + + +class PackageSource(ABC): + @abstractmethod + def __init__(self, url: str, subdirectory: Optional[str]) -> None: + self.url = url + self.subdirectory = subdirectory + + +class PackageSourceVcs(PackageSource): + # see https://packaging.python.org/en/latest/specifications/direct-url-data-structure/#vcs-urls + + def __init__(self, url: str, subdirectory: Optional[str], + vcs: str, requested_revision: Optional[str], commit_id: str) -> None: + super().__init__(url, subdirectory) + self.vcs = vcs + self.requested_revision = requested_revision + self.commit_id = commit_id + + @classmethod + def from_data(cls, url: str, subdirectory: Optional[str], + info: Dict[str, Any]) -> 'PackageSourceVcs': + return cls(url, subdirectory, + info['vcs'], info.get('requested_revision'), info['commit_id']) + + +class PackageSourceArchive(PackageSource): + # see https://packaging.python.org/en/latest/specifications/direct-url-data-structure/#archive-urls + + def __init__(self, url: str, subdirectory: Optional[str], + hashes: Optional[Dict[str, str]]) -> None: + super().__init__(url, subdirectory) + self.hashes = hashes or {} + + @classmethod + def from_data(cls, url: str, subdirectory: Optional[str], + info: Dict[str, Any]) -> 'PackageSourceArchive': + if 'hashes' in info: + hashes = info['hashes'] + elif 'hash' in info: + hash_parts = str(info['hash']).split('=', maxsplit=1) + hashes = {hash_parts[0]: hash_parts[1]} + else: + hashes = None + return cls(url, subdirectory, hashes) + + +class PackageSourceLocal(PackageSource): + # see https://packaging.python.org/en/latest/specifications/direct-url-data-structure/#local-directories + + def __init__(self, url: str, subdirectory: Optional[str], + editable: bool) -> None: + super().__init__(url, subdirectory) + self.editable = editable + + @classmethod + def from_data(cls, url: str, subdirectory: Optional[str], + info: Dict[str, Any]) -> 'PackageSourceLocal': + return cls(url, subdirectory, info.get('editable', False)) + + +def packagesource4dist(dist: 'Distribution') -> Optional[PackageSource]: + raw = dist.read_text('direct_url.json') + if raw is None: + return raw + try: + data = json_loads(raw) + except JSONDecodeError: # pragma: no cover + return None + url = data['url'] + subdirectory = data.get('subdirectory') + if url == '': + return None + if 'vcs_info' in data: + return PackageSourceVcs.from_data(url, subdirectory, data['vcs_info']) + if 'archive_info' in data: + return PackageSourceArchive.from_data(url, subdirectory, data['archive_info']) + if 'dir_info' in data: + return PackageSourceLocal.from_data(url, subdirectory, data['dir_info']) + return None + + +def packagesource2extref(src: PackageSource) -> Optional['ExternalReference']: + sdir = f' (subdirectory {src.subdirectory!r})' if src.subdirectory else '' + try: + if isinstance(src, PackageSourceVcs): + return ExternalReference( + type=ExternalReferenceType.VCS, + url=XsUri(f'{src.url}#{src.commit_id}'), + comment=f'PackageSource: VCS {src.vcs!r}{sdir}') + if isinstance(src, PackageSourceArchive): + hashes = [] + for hashlib_alg, content in src.hashes.items(): + try: + hashes.append(HashType.from_hashlib_alg(hashlib_alg, content)) + except UnknownHashTypeException: + pass + return ExternalReference( + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri(src.url), hashes=hashes, + comment=f'PackageSource: Archive{sdir}') + if isinstance(src, PackageSourceLocal): + return ExternalReference( + type=ExternalReferenceType.DISTRIBUTION, + url=XsUri(src.url), + comment=f'PackageSource: Local{sdir}') + except InvalidUriException: # pragma: nocover + pass + return None diff --git a/cyclonedx_py/_internal/utils/pep621.py b/cyclonedx_py/_internal/utils/pep621.py new file mode 100644 index 00000000..a449c2e4 --- /dev/null +++ b/cyclonedx_py/_internal/utils/pep621.py @@ -0,0 +1,100 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +""" +Functionality related to PEP 621. + +See https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ +See https://peps.python.org/pep-0621/ +""" + +from itertools import chain +from typing import TYPE_CHECKING, Any, Dict, Generator, Iterable, Iterator + +from cyclonedx.exception.model import InvalidUriException +from cyclonedx.factory.license import LicenseFactory +from cyclonedx.model import ExternalReference, XsUri +from cyclonedx.model.component import Component +from packaging.requirements import Requirement + +from .cdx import licenses_fixup, url_label_to_ert +from .license_trove_classifier import license_trove2spdx + +if TYPE_CHECKING: + from cyclonedx.model.component import ComponentType + from cyclonedx.model.license import License + + +def classifiers2licenses(classifiers: Iterable[str], lfac: 'LicenseFactory') -> Generator['License', None, None]: + yield from map(lfac.make_from_string, + # `lfac.make_with_id` could be a shortcut, + # but some SPDX ID might not (yet) be known to CDX. + # So better go with `lfac.make_from_string` and be safe. + filter(None, + map(license_trove2spdx, + classifiers))) + + +def project2licenses(project: Dict[str, Any], lfac: 'LicenseFactory') -> Generator['License', None, None]: + if 'classifiers' in project: + # https://packaging.python.org/en/latest/specifications/pyproject-toml/#classifiers + # https://peps.python.org/pep-0621/#classifiers + # https://packaging.python.org/en/latest/specifications/core-metadata/#classifier-multiple-use + yield from classifiers2licenses(project['classifiers'], lfac) + license = project.get('license') + # https://packaging.python.org/en/latest/specifications/pyproject-toml/#license + # https://peps.python.org/pep-0621/#license + # https://packaging.python.org/en/latest/specifications/core-metadata/#license + if isinstance(license, dict) and 'text' in license: + yield lfac.make_from_string(license['text']) + + +def project2extrefs(project: Dict[str, Any]) -> Generator['ExternalReference', None, None]: + # see https://packaging.python.org/en/latest/specifications/pyproject-toml/#urls + for label, url in project.get('urls', {}).items(): + try: + yield ExternalReference( + comment=f'from pyproject urls: {label}', + type=url_label_to_ert(label), + url=XsUri(str(url))) + except InvalidUriException: # pragma: nocover + pass + + +def project2component(project: Dict[str, Any], *, + type: 'ComponentType') -> 'Component': + dynamic = project.get('dynamic', ()) + return Component( + type=type, + name=project['name'], + version=project.get('version', None) if 'version' not in dynamic else None, + description=project.get('description', None) if 'description' not in dynamic else None, + licenses=licenses_fixup(project2licenses(project, LicenseFactory())), + external_references=project2extrefs(project), + # TODO add more properties according to spec + ) + + +def project2dependencies(project: Dict[str, Any]) -> Iterator['Requirement']: + return ( + Requirement(dep) + for dep in chain( + project.get('dependencies', ()), + chain.from_iterable(project.get('optional-dependencies', {}).values()) + ) + ) diff --git a/cyclonedx_py/_internal/utils/poetry.py b/cyclonedx_py/_internal/utils/poetry.py new file mode 100644 index 00000000..bb955f25 --- /dev/null +++ b/cyclonedx_py/_internal/utils/poetry.py @@ -0,0 +1,97 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + +""" +Functionality related to poetry manifest. + +See https://python-poetry.org/docs/pyproject/ +""" + +from itertools import chain +from typing import TYPE_CHECKING, Any, Dict, Generator, List + +from cyclonedx.exception.model import InvalidUriException +from cyclonedx.factory.license import LicenseFactory +from cyclonedx.model import ExternalReference, ExternalReferenceType, XsUri +from cyclonedx.model.component import Component +from packaging.requirements import Requirement + +from .cdx import licenses_fixup, url_label_to_ert +from .pep621 import classifiers2licenses + +if TYPE_CHECKING: + from cyclonedx.model.component import ComponentType + from cyclonedx.model.license import License + + +def poetry2extrefs(poetry: Dict[str, Any]) -> Generator['ExternalReference', None, None]: + for ers, ert in ( + ('homepage', ExternalReferenceType.WEBSITE), + ('repository', ExternalReferenceType.VCS), + ('documentation', ExternalReferenceType.DOCUMENTATION), + ): + try: + yield ExternalReference( + comment=f'from poetry: {ers}', + type=ert, + url=XsUri(str(poetry[ers]))) + except (KeyError, InvalidUriException): # pragma: nocover + pass + for label, url in poetry.get('urls', {}).items(): + try: + yield ExternalReference( + comment=f'from poetry url: {label}', + type=url_label_to_ert(label), + url=XsUri(str(url))) + except InvalidUriException: # pragma: nocover + pass + + +def poetry2component(poetry: Dict[str, Any], *, type: 'ComponentType') -> 'Component': + licenses: List['License'] = [] + lfac = LicenseFactory() + if 'classifiers' in poetry: + licenses.extend(classifiers2licenses(poetry['classifiers'], lfac)) + if 'license' in poetry: + licenses.append(lfac.make_from_string(poetry['license'])) + del lfac + + return Component( + type=type, + name=poetry['name'], + version=poetry.get('version'), + description=poetry.get('description'), + licenses=licenses_fixup(licenses), + external_references=poetry2extrefs(poetry), + # TODO add more properties according to spec + ) + + +def poetry2dependencies(poetry: Dict[str, Any]) -> Generator['Requirement', None, None]: + + for name, spec in chain( + poetry.get('dependencies', {}).items(), + poetry.get('dev-dependencies', {}).items(), + chain.from_iterable( + group.get('dependencies', {}).items() + for group in poetry.get('group', {}).values() + ) + ): + req = Requirement(name) + if isinstance(spec, dict) and 'extras' in spec: + req.extras = set(spec['extras']) + yield req diff --git a/cyclonedx_py/_internal/utils/pyproject.py b/cyclonedx_py/_internal/utils/pyproject.py new file mode 100644 index 00000000..f8028aac --- /dev/null +++ b/cyclonedx_py/_internal/utils/pyproject.py @@ -0,0 +1,49 @@ +# use pyproject from pep621 +# use pyproject from poetry implementation + + +from typing import TYPE_CHECKING, Any, Dict, Iterator + +from .pep621 import project2component, project2dependencies +from .poetry import poetry2component, poetry2dependencies +from .toml import toml_loads + +if TYPE_CHECKING: # pragma: no cover + from cyclonedx.model.component import Component, ComponentType + from packaging.requirements import Requirement + + +def pyproject2component(data: Dict[str, Any], *, + type: 'ComponentType') -> 'Component': + tool = data.get('tool', {}) + if 'poetry' in tool: + return poetry2component(tool['poetry'], type=type) + if 'project' in data: + return project2component(data['project'], type=type) + raise ValueError('Unable to build component from pyproject') + + +def pyproject_load(pyproject_file: str) -> Dict[str, Any]: + try: + pyproject_fh = open(pyproject_file, 'rt', encoding='utf8', errors='replace') + except OSError as err: + raise ValueError(f'Could not open pyproject file: {pyproject_file}') from err + with pyproject_fh: + return toml_loads(pyproject_fh.read()) + + +def pyproject_file2component(pyproject_file: str, *, + type: 'ComponentType') -> 'Component': + return pyproject2component( + pyproject_load(pyproject_file), + type=type + ) + + +def pyproject2dependencies(data: Dict[str, Any]) -> Iterator['Requirement']: + tool = data.get('tool', {}) + if 'poetry' in tool: + return poetry2dependencies(tool['poetry']) + if 'project' in data: + return project2dependencies(data['project']) + return iter(()) diff --git a/cyclonedx_py/_internal/utils/toml.py b/cyclonedx_py/_internal/utils/toml.py new file mode 100644 index 00000000..a53c5cc9 --- /dev/null +++ b/cyclonedx_py/_internal/utils/toml.py @@ -0,0 +1,30 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +__all__ = ['toml_loads'] + +import sys + +# TOML polyfill: https://github.com/hukkin/tomli#intro +# A version of `tomli`, the `tomllib` module, was added to the standard library in Python 3.11 via PEP 680. +# `Tomli` continues to provide a backport on PyPI for Python versions +# where the standard library module is not available and that have not yet reached their end-of-life. +if sys.version_info >= (3, 11): + from tomllib import loads as toml_loads +else: + from tomli import loads as toml_loads diff --git a/deps.lowest.r b/deps.lowest.r deleted file mode 100644 index 831825b7..00000000 --- a/deps.lowest.r +++ /dev/null @@ -1,13 +0,0 @@ -# exactly pinned dependencies to the lowest version regardless of python_version -# see pyproject file for ranges - -cyclonedx-python-lib[validation] == 5.0.0 -packageurl-python == 0.11.1 -pip-requirements-parser == 32.0.0 -chardet == 5.1.0 -setuptools == 47.0.0 -types-setuptools == 57.0.0 -toml == 0.10.0 -types-toml == 0.10.0 - -# file name is a untypical one, so dependabot does not bump this file diff --git a/docs/conf.py b/docs/conf.py index 7ee9b640..c338fbfb 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -32,16 +32,16 @@ extensions = [ "sphinx.ext.autodoc", # "sphinx.ext.viewcode", - "autoapi.extension", + # "autoapi.extension", "sphinx_rtd_theme", "m2r2" ] # Document Python Code -autoapi_type = 'python' -autoapi_dirs = ['../cyclonedx_py'] +# autoapi_type = 'python' +# autoapi_dirs = ['../cyclonedx_py'] # see https://sphinx-autoapi.readthedocs.io/en/latest/reference/config.html#confval-autoapi_options -autoapi_options = ['show-module-summary', 'members', 'undoc-members', 'inherited-members', 'show-inheritance'] +# autoapi_options = ['show-module-summary', 'members', 'undoc-members', 'inherited-members', 'show-inheritance'] source_suffix = ['.rst', '.md'] diff --git a/docs/index.rst b/docs/index.rst index 69a03a2a..5d34a819 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -12,20 +12,29 @@ # # SPDX-License-Identifier: Apache-2.0 -CycloneDX SBOM Generation Tool -==================================================== +CycloneDX SBOM Generation Tool for Python +========================================= -This project provides a runnable Python-based application for generating `CycloneDX`_ bill-of-material documents from -either: +This project provides a runnable Python-based application +for generating Software Bill of material (SBOM) documents in `CycloneDX`_ format +from: -* Your current Python Environment -* Your project's manifest (e.g. ``Pipfile.lock``, ``poetry.lock`` or ``requirements.txt``) -* Conda as a Package Manager +* Python (virtual) environment +* `Poetry`_ manifest +* `Pipenv`_ manifest +* Pip's `requirements file format`_ format +* `Conda`_ as a Package Manager is no longer supported since version 4. + However, ``conda``'s Python environments are fully supported via the methods listed above. -The SBOM will contain an aggregate of all your current project's dependencies, or those defined by the manifest you -supply. +The SBOM will contain an aggregate of all your project's dependencies, or those defined by the manifest you supply. -`CycloneDX`_ is a lightweight BOM specification that is easily created, human-readable, and simple to parse. +`CycloneDX`_ is a full-stack SBOM specification that is easily created, human-readable, and simple to parse. + +.. _CycloneDX: https://cyclonedx.org/ +.. _Poetry: https://python-poetry.org/ +.. _Pipenv: https://pipenv.pypa.io/ +.. _requirements file format: https://pip.pypa.io/en/stable/reference/requirements-file-format/ +.. _conda: https://conda.io/ .. toctree:: :maxdepth: 2 @@ -35,6 +44,3 @@ supply. usage support changelog - - -.. _CycloneDX: https://cyclonedx.org/ \ No newline at end of file diff --git a/docs/install.rst b/docs/install.rst index 2211ca5a..a84d3dfd 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -5,4 +5,8 @@ Install from pypi.org as you would any other Python module using your preferred .. code-block:: sh - pip install cyclonedx-bom + python -m pip install cyclonedx-bom # install via pip + pipx install cyclonedx-bom # install via pipx + poetry add cyclonedx-bom # install via poetry + + # ... you get the hang diff --git a/docs/requirements.txt b/docs/requirements.txt index dd5f9e17..ca4ca769 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,4 @@ m2r2>=0.3.2 sphinx>=7.2.6,<8 -sphinx-autoapi>=3.0.0,<4 -sphinx-rtd-theme>=1.3.0,<2 +#sphinx-autoapi>=3.0.0,<4 +sphinx-rtd-theme>=2.0.0,<3 diff --git a/docs/support.rst b/docs/support.rst index 32a9d44e..bcb589f5 100644 --- a/docs/support.rst +++ b/docs/support.rst @@ -4,8 +4,8 @@ Support If you run into issues utilising this library, please raise a `GitHub Issue`_. When raising an issue please include as much detail as possible including: -* Version ``cyclonedx-bom`` you have installed -* Input(s) +* Version ``cyclonedx-bom`` you have installed. fetch via ``python -m cyclonedx_py --version``. +* Input(s) you used, as well as command line options and switches * Expected Output(s) * Actual Output(s) @@ -13,9 +13,8 @@ Python Version Support ====================== We endeavour to support all functionality for all `current actively supported Python versions`_. -However, some features may not be possible/present in older Python versions due to their lack of support - which are -noted below. +However, some features may not be possible/present in older Python versions due to their lack of support. .. _GitHub Issue: https://github.com/CycloneDX/cyclonedx-python/issues -.. _current actively supported Python versions: https://www.python.org/downloads/ \ No newline at end of file +.. _current actively supported Python versions: https://www.python.org/downloads/ diff --git a/docs/usage.rst b/docs/usage.rst index 57cc0e86..d996d3fb 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -1,332 +1,450 @@ Usage -======= +===== -Command Line Usage ------------------- +Once installed, you can call the tool's command line interface via the following methods: -Once installed, you can call the tool via the following methods: +.. code-block:: shell -.. code-block:: shell-session + cyclonedx-py # call script + python3 -m cyclonedx_py # call python module CLI - $ python3 -m cyclonedx_py - $ cyclonedx-py The full documentation can be issued by running with ``--help``: .. code-block:: shell-session $ cyclonedx-py --help - usage: cyclonedx-py [-h] (-c | -cj | -e | -p | -pip | -r) [-i FILE_PATH] - [--format {json,xml}] [--schema-version {1.4,1.3,1.2,1.1,1.0}] - [-o FILE_PATH] [-F] [-X] + usage: cyclonedx-py [-h] [--version] command ... + + Creates CycloneDX Software Bill of Materials (SBOM) from Python projects and environments. + + positional arguments: + command + environment Build an SBOM from Python (virtual) environment + requirements Build an SBOM from Pip requirements + pipenv Build an SBOM from Pipenv manifest + poetry Build an SBOM from Poetry project + + options: + -h, --help show this help message and exit + --version show program's version number and exit + + +For Python (virtual) environment +-------------------------------- + +.. TODO: describe what an environment is... + +This will produce the most accurate and complete CycloneDX BOM as it analyses the actually installed packages. +It will include all transitive dependencies required by the packages, as well as their properties. + +When using *Environment* as the source, any license information available from the installed packages will also be +included in the generated CycloneDX BOM. + +The full documentation can be issued by running with ``--help``: + +.. code-block:: shell-session + + $ cyclonedx-py environment --help + usage: cyclonedx-py environment [-h] [-v] + [--short-PURLs] [--output-reproducible] + [--validate | --no-validate] + [-o ] [--sv ] [--of ] + [--pyproject ] [--mc-type ] + [python] - CycloneDX SBOM Generator + Build an SBOM from Python (virtual) environment - optional arguments: + positional arguments: + python Python interpreter + + options: -h, --help show this help message and exit - -c, --conda Build a SBOM based on the output from `conda list - --explicit` or `conda list --explicit --md5` - -cj, --conda-json Build a SBOM based on the output from `conda list - --json` - -e, --e, --environment - Build a SBOM based on the packages installed in your - current Python environment (default) - -p, --p, --poetry Build a SBOM based on a Poetry poetry.lock's contents. - Use with -i to specify absolute path to a `poetry.lock` - you wish to use, else we'll look for one in the - current working directory. - -pip, --pip Build a SBOM based on a PipEnv Pipfile.lock's - contents. Use with -i to specify absolute path to a - `Pipfile.lock` you wish to use, else we'll look for - one in the current working directory. - -r, --r, --requirements - Build a SBOM based on a requirements.txt's contents. - Use with -i to specify absolute path to a - `requirements.txt` you wish to use, else we'll look - for one in the current working directory. - --omit OMIT - Omit specified items when using Poetry or PipEnv - (currently supported is dev) - -X Enable debug output - - Input Method: - Flags to determine how this tool obtains its input - - -i FILE_PATH, --in-file FILE_PATH - File to read input from, or STDIN if not specified - - SBOM Output Configuration: - Choose the output format and schema version - - --format {json,xml} The output format for your SBOM (default: xml) - --schema-version {1.4,1.3,1.2,1.1,1.0} - The CycloneDX schema version for your SBOM (default: - 1.3) - -o FILE_PATH, --o FILE_PATH, --output FILE_PATH - Output file path for your SBOM (set to '-' to output - to STDOUT) - -F, --force If outputting to a file and the stated file already - exists, it will be overwritten. + --pyproject Path to the root component's `pyproject.toml` file. + This should point to a file compliant with PEP 621 (storing project metadata). + --mc-type Type of the main component + {choices: application, firmware, library} + (default: ComponentType.APPLICATION) + --short-PURLs Omit all qualifiers from PackageURLs. + This causes information loss in trade-off shorter PURLs, which might improve ingesting these strings. + -o , --outfile + Output file path for your SBOM + (set to "-" to output to STDOUT) + (default: -) + --sv , --schema-version + The CycloneDX schema version for your SBOM + {choices: 1.5, 1.4, 1.3, 1.2, 1.1, 1.0} + (default: 1.5) + --of , --output-format + The output format for your SBOM + {choices: JSON, XML} + (default: JSON) + --output-reproducible + Whether to go the extra mile and make the output reproducible. + This might result in loss of time- and random-based-values. --validate, --no-validate Whether validate the result before outputting + (default: True) + -v, --verbose Increase the verbosity of messages + (multiple for more effect) + (default: silent) -From your current Python Environment -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Examples for macOS/Linux and alike +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This will produce the most accurate and complete CycloneDX BOM as it will include all transitive dependencies required -by the packages defined in your project's manifest (think ``requirements.txt``). +.. code-block:: shell-session + :caption: Build an SBOM from current python environment -When using *Environment* as the source, any license information available from the installed packages will also be -included in the generated CycloneDX BOM. + $ cyclonedx-py environment -Simply run: +.. code-block:: shell-session + :caption: Build an SBOM from a Python (virtual) environment -.. code-block:: sh + $ cyclonedx-py environment '...some/path/bin/python' + $ cyclonedx-py environment '.../.venv/' - cyclonedx-py -e -o - +.. code-block:: shell-session + :caption: Build an SBOM from specific Python environment + $ cyclonedx-py environment "$(which python3.9)" -This will generate a CycloneDX including all packages installed in your current Python environment and output to STDOUT -in XML using the default schema version ``1.4`` by default. +.. code-block:: shell-session + :caption: Build an SBOM from conda Python environment -From your Python application manifest + $ cyclonedx-py environment "$(conda run which python)" -.. note:: - Manifest scanning limits the amount of information available. Each manifest type contains different information - but all are significantly less complete than scanning your actual Python Environment. +.. code-block:: shell-session + :caption: Build an SBOM from Pipenv environment + $ cyclonedx-py environment "$(pipenv --py)" + $ cyclonedx-py environment "$(pipenv --venv)" -**Conda** +.. code-block:: shell-session + :caption: Build an SBOM from Poetry environment -We support parsing output from Conda in various formats: + $ cyclonedx-py environment "$(poetry env info --executable)" -* Explict output (run ``conda list --explicit`` or ``conda list --explicit --md5``) -* JSON output (run ``conda list --json``) -As example: +Examples for Windows +~~~~~~~~~~~~~~~~~~~~ -.. code-block:: sh +.. code-block:: doscon + :caption: Build an SBOM from current python environment - conda list --explicit --md5 | cyclonedx-py -c -o cyclonedx.xml + > cyclonedx-py -**Poetry** +.. code-block:: doscon + :caption: Build an SBOM from a Python (virtual) environment -We support parsing your ``poetry.lock`` file which should be committed along with your ``pyproject.toml`` and details -exact pinned versions. + > cyclonedx-py "...some\\path\\bin\\python.exe" + > cyclonedx-py "...some\\path\\.venv\\" -You can then run ``cyclonedx-py`` as follows: +.. code-block:: doscon + :caption: Build an SBOM from specific Python environment -.. code-block:: sh + > where.exe python3.9.exe + > cyclonedx-py "%%path to specific python%%" - cyclonedx-py -p -i PATH/TO/poetry.lock -o sbom.xml +.. code-block:: doscon + :caption: Build an SBOM from conda Python environment + > conda.exe run where.exe python + > cyclonedx-py "%%path to conda python%%" -If your ``poetry.lock`` is in the current working directory, you can also shorten this to: +.. code-block:: doscon + :caption: Build an SBOM from Pipenv environment -.. code-block:: sh + > pipenv.exe --py + > pipenv.exe --venv + > cyclonedx-py "%%path to pipenv python%%" - cyclonedx-py -p -o sbom.xml +.. code-block:: doscon + :caption: Build an SBOM from Poetry environment -**Pip** + > poetry.exe env info --executable + > cyclonedx-py "%%path to poetry python%%" -We currently support ``Pipfile.lock`` manifest files. -You can then run ``cyclonedx-bom`` as follows: -.. code-block:: sh +For Pipenv +---------- - cyclonedx-py -pip -i PATH/TO/Pipfile.lock -o sbom.xml +Support for `Pipenv`_ dependency management. +This requires parsing your ``Pipfile`` and ``Pipfile.lock`` file which details exact pinned versions of dependencies. +.. _Pipenv: https://pipenv.pypa.io/ -If your ``Pipfile.lock`` is in the current working directory, you can also shorten this to: +The full documentation can be issued by running with ``--help``: -.. code-block:: sh +.. code-block:: shell-session - cyclonedx-pu -pip -o sbom.xml + $ cyclonedx-py pipenv --help + usage: cyclonedx-py pipenv [-h] [-v] + [--short-PURLs] [--output-reproducible] + [--validate | --no-validate] + [-o ] [--sv ] [--of ] + [--categories ] [-d] + [--pypi-mirror ] + [--pyproject ] [--mc-type ] + [project-directory] + Build an SBOM from Pipenv manifest. -**Requirements** + The options and switches mimic the respective ones from Pipenv CLI. -We support ``requirements.txt`` manifest files. Note that a SBOM such as CycloneDX expects exact version numbers, -therefore if you wish to generate a BOM from a ``requirements.txt``, these must be frozen. This can be accomplished via: + positional arguments: + project-directory The project directory for Pipenv (default: current working directory) + Unlike Pipenv tool, there is no auto-detection in this very tool. Please + provide the actual directory that contains `Pipfile` and `Pipfile.lock` -.. code-block:: sh + options: + -h, --help show this help message and exit + --categories + -d, --dev Analyse both develop and default packages + [env var: PIPENV_DEV] + --pypi-mirror Specify a PyPI mirror + [env var: PIPENV_PYPI_MIRROR] + --pyproject Path to the root component's `pyproject.toml` file. + This should point to a file compliant with PEP 621 (storing project metadata). + --mc-type Type of the main component + {choices: application, firmware, library} + (default: ComponentType.APPLICATION) + --short-PURLs Omit all qualifiers from PackageURLs. + This causes information loss in trade-off shorter PURLs, which might improve ingesting these strings. + -o , --outfile + Output file path for your SBOM + (set to "-" to output to ) + (default: -) + --sv , --schema-version + The CycloneDX schema version for your SBOM + {choices: 1.5, 1.4, 1.3, 1.2, 1.1, 1.0} + (default: 1.5) + --of , --output-format + The output format for your SBOM + {choices: JSON, XML} + (default: JSON) + --output-reproducible + Whether to go the extra mile and make the output reproducible. + This might result in loss of time- and random-based-values. + --validate, --no-validate + Whether validate the result before outputting + (default: True) + -v, --verbose Increase the verbosity of messages + (multiple for more effect) + (default: silent) - pip freeze > requirements.txt -You can then run ``cyclonedx-bom`` as follows: +For Poetry +---------- -.. code-block:: sh +Support for `Poetry`_ dependency management and package manifest. +This requires parsing your ``pyproject.toml`` and ``poetry.lock`` file which details exact pinned versions of dependencies. - cyclonedx-py -r -i PATH/TO/requirements.txt -o sbom.xml +.. _Poetry: https://python-poetry.org/ -If your ``requirements.txt`` is in the current working directory, you can also shorten this to: +The full documentation can be issued by running with ``--help``: -.. code-block:: sh +.. code-block:: shell-session - cyclonedx-py -r -o sbom.xml + $ cyclonedx-py poetry --help + usage: cyclonedx-py poetry [-h] [-v] + [--short-PURLs] [--output-reproducible] + [--validate | --no-validate] + [-o ] [--sv ] [--of ] + [--without GROUPS] [--with GROUPS] [--only GROUPS] [--no-dev] + [-E EXTRAS | --all-extras] + [--mc-type ] + [project-directory] + Build an SBOM from Poetry project. -This will generate a CycloneDX and output to STDOUT in XML using the default schema version `1.3`. + The options and switches mimic the respective ones from Poetry CLI. -.. note:: + positional arguments: + project-directory The project directory for Poetry + (default: current working directory) + + options: + -h, --help show this help message and exit + --without GROUPS The dependency groups to ignore + (multiple values allowed) + --with GROUPS The optional dependency groups to include + (multiple values allowed) + --only GROUPS The only dependency groups to include + (multiple values allowed) + --no-dev Explicitly force: --only main + -E EXTRAS, --extras EXTRAS + Extra sets of dependencies to include + (multiple values allowed) + --all-extras Include all extra dependencies + (default: False) + --mc-type Type of the main component + {choices: application, firmware, library} + (default: ComponentType.APPLICATION) + --short-PURLs Omit all qualifiers from PackageURLs. + This causes information loss in trade-off shorter PURLs, which might improve ingesting these strings. + -o , --outfile + Output file path for your SBOM + (set to "-" to output to ) + (default: -) + --sv , --schema-version + The CycloneDX schema version for your SBOM + {choices: 1.5, 1.4, 1.3, 1.2, 1.1, 1.0} (default: 1.5) + --of , --output-format + The output format for your SBOM + {choices: JSON, XML} + (default: JSON) + --output-reproducible + Whether to go the extra mile and make the output reproducible. + This might result in loss of time- and random-based-values. + --validate, --no-validate + Whether validate the result before outputting + (default: True) + -v, --verbose Increase the verbosity of messages + (multiple for more effect) + (default: silent) + + +For Pip requirements +-------------------- + +Support for Pip's `requirements file format`_ dependency lists. + +.. _requirements file format: https://pip.pypa.io/en/stable/reference/requirements-file-format/ + +The full documentation can be issued by running with ``--help``: + +.. code-block:: shell-session + + $ cyclonedx-py requirements --help + usage: cyclonedx-py requirements [-h] [-v] + [--short-PURLs] [--output-reproducible] + [--validate | --no-validate] + [-o ] [--sv ] [--of ] + [-i ] [--extra-index-url ] + [--pyproject ] [--mc-type ] + [] + + Build an SBOM from Pip requirements. + + The options and switches mimic the respective ones from Pip CLI. + + positional arguments: + Path to requirements file. + May be set to "-" to read from . + (default: 'requirements.txt' in current working directory) + + options: + -h, --help show this help message and exit + -i , --index-url + Base URL of the Python Package Index. + This should point to a repository compliant with PEP 503 (the simple repository API) + or a local directory laid out in the same format. + (default: https://pypi.org/simple) + --extra-index-url + Extra URLs of package indexes to use in addition to --index-url. + Should follow the same rules as --index-url + --pyproject Path to the root component's `pyproject.toml` file. + This should point to a file compliant with PEP 621 (storing project metadata). + --mc-type Type of the main component + {choices: application, firmware, library} + (default: ComponentType.APPLICATION) + --short-PURLs Omit all qualifiers from PackageURLs. + This causes information loss in trade-off shorter PURLs, which might improve ingesting these strings. + -o , --outfile + Output file path for your SBOM + (set to "-" to output to ) + (default: -) + --sv , --schema-version + The CycloneDX schema version for your SBOM + {choices: 1.5, 1.4, 1.3, 1.2, 1.1, 1.0} + (default: 1.5) + --of , --output-format + The output format for your SBOM + {choices: JSON, XML} + (default: JSON) + --output-reproducible + Whether to go the extra mile and make the output reproducible. + This might result in loss of time- and random-based-values. + --validate, --no-validate + Whether validate the result before outputting + (default: True) + -v, --verbose Increase the verbosity of messages + (multiple for more effect) + (default: silent) + + +Example Usage +~~~~~~~~~~~~~ + +.. code-block:: shell-session + :caption: Build an SBOM from a requirements file + + $ cyclonedx-py requirements requirements-prod.txt + +.. code-block:: shell-session + :caption: Merge multiple files and build an SBOM from it + + $ cat requirements/*.txt | cyclonedx-py requirements - + + +.. code-block:: shell-session + :caption: Build an inventory for all installed packages + + $ python -m pip freeze --all | cyclonedx-py requirements - + +.. code-block:: shell-session + :caption: Build an inventory for all installed packages in a conda environment + + $ conda run python -m pip freeze --all | cyclonedx-py requirements - + +.. code-block:: shell-session + :caption: Build an inventory for installed packages in a Python (virtual) environment + + $ .../.venv/bin/python -m pip freeze --all --local --require-virtualenv |\ + cyclonedx-py requirements - + +.. code-block:: shell-session + :caption: Build an inventory from an unfrozen manifest + + $ python -m pip install -r dependencies.txt &&\ + python -m pip freeze | cyclonedx-py requirements - + + + +For Conda +--------- + +`Conda`_ is a package manager for all kinds on environments. + +However, since conda it might manage a python environment under the hood, +it is possible to utilize the functionality for Python environments as described above. + +.. _conda: https://conda.io/ + + + +***** - If you failed to freeze your dependencies before passing the ``requirements.txt`` data to ``cyclonedx-bom``, - you'll be warned about this and the dependencies that do not have pinned versions WILL NOT be included in the - resulting CycloneDX output. Programmatic Usage ------------------ -This library provides a number of concrete implementations of :py:mod:`cyclondex.parser.BaserParser`. -Parsers are provided as a quick way to generate a BOM for Python applications or from Python environments. +This tool utilizes the `CycloneDX Python library`_ to generate the actual data structures, and serialize and validate them. - **WARNING**: Limited information will be available when generating a BOM using some Parsers due to limited - information kept/supplied by those package managers. See below for details of what fields can be completed by - different Parsers. +This tool does **not** expose any additional *public* API or classes - all code is intended to be internal and might change without any notice during version upgrades. -Easily create your parser instance as follows: +.. _CycloneDX Python library: https://pypi.org/project/cyclonedx-python-lib + +However, the CLI is stable - you may call it programmatically like: .. code-block:: python - from cyclonedx_py.parser.environment import EnvironmentParser - - parser = EnvironmentParser() - -Conda -~~~~~ - -* :py:mod:`cyclonedx_py.parser.conda.CondaListJsonParser`: Parses input provided as a ``str`` that is output from - ``conda list --json`` -* :py:mod:`cyclonedx_py.parser.conda.CondaListExplicitParser`: Parses input provided as a ``str`` that is output from: - ``conda list --explicit`` or ``conda list --explicit --md5`` - -Environment -~~~~~~~~~~~ - -* :py:mod:`cyclonedx_py.parser.environment.EnvironmentParser`: Looks at the packages installed in your current Python - environment - -Pip -~~~~~~~ - -* :py:mod:`cyclonedx_py.parser.pipenv.PipEnvParser`: Parses ``Pipfile.lock`` content passed in as a string -* :py:mod:`cyclonedx_py.parser.pipenv.PipEnvFileParser`: Parses the ``Pipfile.lock`` file at the supplied path - -Poetry -~~~~~~ - -* :py:mod:`cyclonedx.parser.poetry.PoetryParser`: Parses ``poetry.lock`` content passed in as a string -* :py:mod:`cyclonedx.parser.poetry.PoetryFileParser`: Parses the ``poetry.lock`` file at the supplied path - -Requirements -~~~~~~~~~~~~ - -* :py:mod:`cyclonedx_py.parser.requirements.RequirementsParser`: Parses a multiline string that you provide that conforms - to the ``requirements.txt`` :pep:`508` standard. -* :py:mod:`cyclonedx_py.parser.requirements.RequirementsFileParser`: Parses a file that you provide the path to that conforms to the ``requirements.txt`` :pep:`508` standard. - It supports nested files, so if there is a line in your ``requirements.txt`` file with the ``-r requirements-nested.txt`` syntax, it'll parse the nested file as part of the same file. - -CycloneDX software bill-of-materials require pinned versions of requirements. If your `requirements.txt` does not have -pinned versions, warnings will be recorded and the dependencies without pinned versions will be excluded from the -generated CycloneDX. CycloneDX schemas (from version 1.0+) require a component to have a version when included in a -CycloneDX bill of materials (according to schema). - -If you need to use a ``requirements.txt`` in your project that does not have pinned versions an acceptable workaround -might be to: - -.. code-block:: sh - - pip install -r requirements.txt - pip freeze > requirements-frozen.txt - -You can then feed in the frozen requirements from ``requirements-frozen.txt`` `or` use the ``Environment`` parser once -you have installed your dependencies. - -Parser Schema Support ---------------------- - -Different parsers support population of different information about your dependencies due to how information is -obtained and limitations of what information is available to each Parser. The sections below explain coverage as to what -information is obtained by each set of Parsers. It does NOT guarantee the information is output in the resulting -CycloneDX BOM document. - -The below tables do not state whether specific schema versions support the attributes/items, just whether this library -does. - -xPath is used to refer to data attributes according to the `Cyclone DX Specification`_. - -``bom.components.component`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -+-------------------------+-------------------------------------------------------------------+ -| | Parser Support | -| Data Path +------------+-------------+------------+------------+--------------+ -| | Conda | Environment | Pip | Poetry | Requirements | -+=========================+============+=============+============+============+==============+ -| ``.supplier`` | N | N - Note 1 | N/A | N/A | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.author`` | N | Y - Note 1 | N/A | N/A | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.publisher`` | N | N - Note 1 | N/A | N/A | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.group`` | N | N | N | N | N | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.name`` | Y | Y | Y | Y | Y | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.version`` | Y | Y | Y | Y | Y | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.description`` | N | N | N/A | N | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.scope`` | N | N | N/A | N | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.hashes`` | Y - Note 2 | N/A | Y - Note 3 | Y - Note 3 | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.licenses`` | N | Y - Note 1 | N/A | N/A | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.copyright`` | N | N - Note 1 | N/A | N/A | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.cpe`` | N/A | N/A | N/A | N/A | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.purl`` | Y | Y | Y | Y | Y | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.swid`` | N/A | N/A | N/A | N/A | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.modified`` | *Deprecated - not used* | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.pedigree`` | N/A | N/A | N/A | N/A | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.externalReferences`` | Y - Note 3 | N/A | Y - Note 1 | Y - Note 1 | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.properties`` | N/A | N/A | N/A | N/A | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.components`` | N/A | N/A | N/A | N/A | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.evidence`` | N/A | N/A | N/A | N/A | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ -| ``.releaseNotes`` | N/A | N/A | N/A | N/A | N/A | -+-------------------------+------------+-------------+------------+------------+--------------+ - - **Legend:** - - * **Y**: YES with any caveat states. - * **N**: Not currently supported, but support believed to be possible. - * **N/A**: Not supported and not deemed possible (i.e. the Parser would never be able to reliably determine this - info). - -**Notes** - -1. If contained in the packages ``METADATA`` -2. MD5 hashes are available when using the ``CondaListExplicitParser`` with output from the - conda command ``conda list --explicit --md5`` only -3. Python packages are regularly available as both ``.whl`` and ``.tar.gz`` packages. This means for that for a given - package and version multiple artefacts are possible - which would mean multiple hashes are possible. CycloneDX - supports only a single set of hashes identifying a single artefact at ``component.hashes``. To cater for this - situation in Python, we add the hashes to `component.externalReferences`, as we cannot determine which package was - actually obtained and installed to meet a given dependency. - -.. _Cyclone DX Specification: https://cyclonedx.org/docs/latest + from sys import executable + from subprocess import run + run((executable, '-m', 'cyclonedx_py', '--help')) + diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 1a77884d..00000000 --- a/poetry.lock +++ /dev/null @@ -1,1429 +0,0 @@ -# This file is automatically @generated by Poetry 1.4.1 and should not be changed by hand. - -[[package]] -name = "arrow" -version = "1.3.0" -description = "Better dates & times for Python" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, - {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" -types-python-dateutil = ">=2.8.10" - -[package.extras] -doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] -test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"] - -[[package]] -name = "attrs" -version = "23.1.0" -description = "Classes Without Boilerplate" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] - -[[package]] -name = "autopep8" -version = "2.0.4" -description = "A tool that automatically formats Python code to conform to the PEP 8 style guide" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "autopep8-2.0.4-py2.py3-none-any.whl", hash = "sha256:067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb"}, - {file = "autopep8-2.0.4.tar.gz", hash = "sha256:2913064abd97b3419d1cc83ea71f042cb821f87e45b9c88cad5ad3c4ea87fe0c"}, -] - -[package.dependencies] -pycodestyle = ">=2.10.0" -tomli = {version = "*", markers = "python_version < \"3.11\""} - -[[package]] -name = "bandit" -version = "1.7.5" -description = "Security oriented static analyser for python code." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, - {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} -GitPython = ">=1.0.1" -PyYAML = ">=5.3.1" -rich = "*" -stevedore = ">=1.20.0" - -[package.extras] -test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"] -toml = ["tomli (>=1.1.0)"] -yaml = ["PyYAML"] - -[[package]] -name = "boolean-py" -version = "4.0" -description = "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL." -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "boolean.py-4.0-py3-none-any.whl", hash = "sha256:2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd"}, - {file = "boolean.py-4.0.tar.gz", hash = "sha256:17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4"}, -] - -[[package]] -name = "cachetools" -version = "5.3.2" -description = "Extensible memoizing collections and decorators" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"}, - {file = "cachetools-5.3.2.tar.gz", hash = "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"}, -] - -[[package]] -name = "chardet" -version = "5.2.0" -description = "Universal encoding detector for Python 3" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, - {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, -] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "coverage" -version = "7.3.1" -description = "Code coverage measurement for Python" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "coverage-7.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3"}, - {file = "coverage-7.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136"}, - {file = "coverage-7.3.1-cp310-cp310-win32.whl", hash = "sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f"}, - {file = "coverage-7.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520"}, - {file = "coverage-7.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3"}, - {file = "coverage-7.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3"}, - {file = "coverage-7.3.1-cp311-cp311-win32.whl", hash = "sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a"}, - {file = "coverage-7.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c"}, - {file = "coverage-7.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc"}, - {file = "coverage-7.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f"}, - {file = "coverage-7.3.1-cp312-cp312-win32.whl", hash = "sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a"}, - {file = "coverage-7.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92"}, - {file = "coverage-7.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f"}, - {file = "coverage-7.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff"}, - {file = "coverage-7.3.1-cp38-cp38-win32.whl", hash = "sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3"}, - {file = "coverage-7.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e"}, - {file = "coverage-7.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1"}, - {file = "coverage-7.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8"}, - {file = "coverage-7.3.1-cp39-cp39-win32.whl", hash = "sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140"}, - {file = "coverage-7.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981"}, - {file = "coverage-7.3.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194"}, - {file = "coverage-7.3.1.tar.gz", hash = "sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952"}, -] - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "cyclonedx-python-lib" -version = "5.0.1" -description = "Python library for CycloneDX" -category = "main" -optional = false -python-versions = ">=3.8,<4.0" -files = [ - {file = "cyclonedx_python_lib-5.0.1-py3-none-any.whl", hash = "sha256:88de3c1c59ed849cfe3ffc9405636a26e07c4128c2cfebf02e18bd3efa1668d3"}, - {file = "cyclonedx_python_lib-5.0.1.tar.gz", hash = "sha256:e2fe858c9411dd0b84a7df9529d740d6b0bc8c96a86434ffe46e2b37d82ccac9"}, -] - -[package.dependencies] -jsonschema = {version = ">=4.18,<5.0", extras = ["format"], optional = true, markers = "extra == \"validation\" or extra == \"json-validation\""} -license-expression = ">=30,<31" -lxml = {version = ">=4,<5", optional = true, markers = "extra == \"validation\" or extra == \"xml-validation\""} -packageurl-python = ">=0.11" -py-serializable = ">=0.15,<0.16" -sortedcontainers = ">=2.4.0,<3.0.0" - -[package.extras] -json-validation = ["jsonschema[format] (>=4.18,<5.0)"] -validation = ["jsonschema[format] (>=4.18,<5.0)", "lxml (>=4,<5)"] -xml-validation = ["lxml (>=4,<5)"] - -[[package]] -name = "ddt" -version = "1.6.0" -description = "Data-Driven/Decorated Tests" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "ddt-1.6.0-py2.py3-none-any.whl", hash = "sha256:e3c93b961a108b4f4d5a6c7f2263513d928baf3bb5b32af8e1c804bfb041141d"}, - {file = "ddt-1.6.0.tar.gz", hash = "sha256:f71b348731b8c78c3100bffbd951a769fbd439088d1fdbb3841eee019af80acd"}, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - -[[package]] -name = "distlib" -version = "0.3.7" -description = "Distribution utilities" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, - {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, -] - -[[package]] -name = "filelock" -version = "3.12.4" -description = "A platform independent file lock." -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "filelock-3.12.4-py3-none-any.whl", hash = "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4"}, - {file = "filelock-3.12.4.tar.gz", hash = "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-timeout (>=2.1)"] -typing = ["typing-extensions (>=4.7.1)"] - -[[package]] -name = "flake8" -version = "6.1.0" -description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" -optional = false -python-versions = ">=3.8.1" -files = [ - {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, - {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, -] - -[package.dependencies] -mccabe = ">=0.7.0,<0.8.0" -pycodestyle = ">=2.11.0,<2.12.0" -pyflakes = ">=3.1.0,<3.2.0" - -[[package]] -name = "flake8-annotations" -version = "3.0.1" -description = "Flake8 Type Annotation Checks" -category = "dev" -optional = false -python-versions = ">=3.8.1" -files = [ - {file = "flake8_annotations-3.0.1-py3-none-any.whl", hash = "sha256:af78e3216ad800d7e144745ece6df706c81b3255290cbf870e54879d495e8ade"}, - {file = "flake8_annotations-3.0.1.tar.gz", hash = "sha256:ff37375e71e3b83f2a5a04d443c41e2c407de557a884f3300a7fa32f3c41cb0a"}, -] - -[package.dependencies] -attrs = ">=21.4" -flake8 = ">=5.0" - -[[package]] -name = "flake8-bugbear" -version = "23.7.10" -description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle." -category = "dev" -optional = false -python-versions = ">=3.8.1" -files = [ - {file = "flake8-bugbear-23.7.10.tar.gz", hash = "sha256:0ebdc7d8ec1ca8bd49347694562381f099f4de2f8ec6bda7a7dca65555d9e0d4"}, - {file = "flake8_bugbear-23.7.10-py3-none-any.whl", hash = "sha256:d99d005114020fbef47ed5e4aebafd22f167f9a0fbd0d8bf3c9e90612cb25c34"}, -] - -[package.dependencies] -attrs = ">=19.2.0" -flake8 = ">=6.0.0" - -[package.extras] -dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit", "pytest", "tox"] - -[[package]] -name = "flake8-isort" -version = "6.0.0" -description = "flake8 plugin that integrates isort ." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "flake8-isort-6.0.0.tar.gz", hash = "sha256:537f453a660d7e903f602ecfa36136b140de279df58d02eb1b6a0c84e83c528c"}, - {file = "flake8_isort-6.0.0-py3-none-any.whl", hash = "sha256:aa0cac02a62c7739e370ce6b9c31743edac904bae4b157274511fc8a19c75bbc"}, -] - -[package.dependencies] -flake8 = "*" -isort = ">=5.0.0,<6" - -[package.extras] -test = ["pytest"] - -[[package]] -name = "fqdn" -version = "1.5.1" -description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" -files = [ - {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, - {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, -] - -[[package]] -name = "gitdb" -version = "4.0.11" -description = "Git Object Database" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, - {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, -] - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "gitpython" -version = "3.1.40" -description = "GitPython is a Python library used to interact with Git repositories" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"}, - {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"}, -] - -[package.dependencies] -gitdb = ">=4.0.1,<5" - -[package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] - -[[package]] -name = "importlib-resources" -version = "6.1.0" -description = "Read resources from Python packages" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_resources-6.1.0-py3-none-any.whl", hash = "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83"}, - {file = "importlib_resources-6.1.0.tar.gz", hash = "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] - -[[package]] -name = "isoduration" -version = "20.11.0" -description = "Operations with ISO 8601 durations" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, - {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, -] - -[package.dependencies] -arrow = ">=0.15.0" - -[[package]] -name = "isort" -version = "5.12.0" -description = "A Python utility / library to sort Python imports." -category = "dev" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, -] - -[package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - -[[package]] -name = "jsonpointer" -version = "2.4" -description = "Identify specific nodes in a JSON document (RFC 6901)" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" -files = [ - {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, - {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, -] - -[[package]] -name = "jsonschema" -version = "4.19.1" -description = "An implementation of JSON Schema validation for Python" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema-4.19.1-py3-none-any.whl", hash = "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e"}, - {file = "jsonschema-4.19.1.tar.gz", hash = "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -fqdn = {version = "*", optional = true, markers = "extra == \"format\""} -idna = {version = "*", optional = true, markers = "extra == \"format\""} -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -isoduration = {version = "*", optional = true, markers = "extra == \"format\""} -jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format\""} -jsonschema-specifications = ">=2023.03.6" -pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -referencing = ">=0.28.4" -rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format\""} -rfc3987 = {version = "*", optional = true, markers = "extra == \"format\""} -rpds-py = ">=0.7.1" -uri-template = {version = "*", optional = true, markers = "extra == \"format\""} -webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format\""} - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] - -[[package]] -name = "jsonschema-specifications" -version = "2023.7.1" -description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, - {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, -] - -[package.dependencies] -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -referencing = ">=0.28.0" - -[[package]] -name = "license-expression" -version = "30.1.1" -description = "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "license-expression-30.1.1.tar.gz", hash = "sha256:42375df653ad85e6f5b4b0385138b2dbea1f5d66360783d8625c3e4f97f11f0c"}, - {file = "license_expression-30.1.1-py3-none-any.whl", hash = "sha256:8d7e5e2de0d04fc104a4f952c440e8f08a5ba63480a0dad015b294770b7e58ec"}, -] - -[package.dependencies] -"boolean.py" = ">=4.0" - -[package.extras] -docs = ["Sphinx (==5.1.0)", "doc8 (>=0.8.1)", "sphinx-rtd-theme (>=0.5.0)", "sphinxcontrib-apidoc (>=0.3.0)"] -testing = ["black", "isort", "pytest (>=6,!=7.0.0)", "pytest-xdist (>=2)", "twine"] - -[[package]] -name = "lxml" -version = "4.9.3" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" -files = [ - {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, - {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, - {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, - {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, - {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, - {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, - {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, - {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, - {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, - {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, - {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, - {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, - {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, - {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, - {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, - {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, - {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, - {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, - {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, - {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, - {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, - {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, - {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, - {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, - {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.35)"] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "mccabe" -version = "0.7.0" -description = "McCabe checker, plugin for flake8" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, - {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, -] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "mypy" -version = "1.5.1" -description = "Optional static typing for Python" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, - {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, - {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, - {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, - {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, - {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, - {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, - {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, - {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, - {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, - {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, - {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, - {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, - {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, - {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, - {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, - {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, - {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, - {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, -] - -[package.dependencies] -mypy-extensions = ">=1.0.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.1.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "packageurl-python" -version = "0.11.2" -description = "A purl aka. Package URL parser and builder" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packageurl-python-0.11.2.tar.gz", hash = "sha256:01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471"}, - {file = "packageurl_python-0.11.2-py3-none-any.whl", hash = "sha256:799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84"}, -] - -[package.extras] -build = ["wheel"] -lint = ["black", "isort", "mypy"] -sqlalchemy = ["sqlalchemy (>=2.0.0)"] -test = ["pytest"] - -[[package]] -name = "packaging" -version = "23.2" -description = "Core utilities for Python packages" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, -] - -[[package]] -name = "pbr" -version = "5.11.1" -description = "Python Build Reasonableness" -category = "dev" -optional = false -python-versions = ">=2.6" -files = [ - {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, - {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, -] - -[[package]] -name = "pip-requirements-parser" -version = "32.0.1" -description = "pip requirements parser - a mostly correct pip requirements parsing library because it uses pip's own code." -category = "main" -optional = false -python-versions = ">=3.6.0" -files = [ - {file = "pip-requirements-parser-32.0.1.tar.gz", hash = "sha256:b4fa3a7a0be38243123cf9d1f3518da10c51bdb165a2b2985566247f9155a7d3"}, - {file = "pip_requirements_parser-32.0.1-py3-none-any.whl", hash = "sha256:4659bc2a667783e7a15d190f6fccf8b2486685b6dba4c19c3876314769c57526"}, -] - -[package.dependencies] -packaging = "*" -pyparsing = "*" - -[package.extras] -docs = ["Sphinx (>=3.3.1)", "doc8 (>=0.8.1)", "sphinx-rtd-theme (>=0.5.0)"] -testing = ["aboutcode-toolkit (>=6.0.0)", "black", "pytest (>=6,!=7.0.0)", "pytest-xdist (>=2)"] - -[[package]] -name = "pkgutil-resolve-name" -version = "1.3.10" -description = "Resolve a name to an object." -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, -] - -[[package]] -name = "platformdirs" -version = "3.11.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, - {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - -[[package]] -name = "pluggy" -version = "1.3.0" -description = "plugin and hook calling mechanisms for python" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "py-serializable" -version = "0.15.0" -description = "Library for serializing and deserializing Python Objects to and from JSON and XML." -category = "main" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "py-serializable-0.15.0.tar.gz", hash = "sha256:8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771"}, - {file = "py_serializable-0.15.0-py3-none-any.whl", hash = "sha256:d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2"}, -] - -[package.dependencies] -defusedxml = ">=0.7.1,<0.8.0" - -[[package]] -name = "pycodestyle" -version = "2.11.1" -description = "Python style guide checker" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, - {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, -] - -[[package]] -name = "pyflakes" -version = "3.1.0" -description = "passive checker of Python programs" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, - {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, -] - -[[package]] -name = "pygments" -version = "2.16.1" -description = "Pygments is a syntax highlighting package written in Python." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pyparsing" -version = "3.1.1" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, - {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pyproject-api" -version = "1.6.1" -description = "API to interact with the python pyproject.toml based projects" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyproject_api-1.6.1-py3-none-any.whl", hash = "sha256:4c0116d60476b0786c88692cf4e325a9814965e2469c5998b830bba16b183675"}, - {file = "pyproject_api-1.6.1.tar.gz", hash = "sha256:1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538"}, -] - -[package.dependencies] -packaging = ">=23.1" -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -docs = ["furo (>=2023.8.19)", "sphinx (<7.2)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "setuptools (>=68.1.2)", "wheel (>=0.41.2)"] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, -] - -[[package]] -name = "referencing" -version = "0.30.2" -description = "JSON Referencing + Python" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, - {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" - -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -description = "A pure python RFC3339 validator" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, - {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, -] - -[package.dependencies] -six = "*" - -[[package]] -name = "rfc3987" -version = "1.3.8" -description = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "rfc3987-1.3.8-py2.py3-none-any.whl", hash = "sha256:10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53"}, - {file = "rfc3987-1.3.8.tar.gz", hash = "sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"}, -] - -[[package]] -name = "rich" -version = "13.6.0" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -category = "dev" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, - {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" -typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "rpds-py" -version = "0.10.6" -description = "Python bindings to Rust's persistent data structures (rpds)" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "rpds_py-0.10.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6bdc11f9623870d75692cc33c59804b5a18d7b8a4b79ef0b00b773a27397d1f6"}, - {file = "rpds_py-0.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26857f0f44f0e791f4a266595a7a09d21f6b589580ee0585f330aaccccb836e3"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7f5e15c953ace2e8dde9824bdab4bec50adb91a5663df08d7d994240ae6fa31"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61fa268da6e2e1cd350739bb61011121fa550aa2545762e3dc02ea177ee4de35"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c48f3fbc3e92c7dd6681a258d22f23adc2eb183c8cb1557d2fcc5a024e80b094"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0503c5b681566e8b722fe8c4c47cce5c7a51f6935d5c7012c4aefe952a35eed"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:734c41f9f57cc28658d98270d3436dba65bed0cfc730d115b290e970150c540d"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a5d7ed104d158c0042a6a73799cf0eb576dfd5fc1ace9c47996e52320c37cb7c"}, - {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e3df0bc35e746cce42579826b89579d13fd27c3d5319a6afca9893a9b784ff1b"}, - {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:73e0a78a9b843b8c2128028864901f55190401ba38aae685350cf69b98d9f7c9"}, - {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5ed505ec6305abd2c2c9586a7b04fbd4baf42d4d684a9c12ec6110deefe2a063"}, - {file = "rpds_py-0.10.6-cp310-none-win32.whl", hash = "sha256:d97dd44683802000277bbf142fd9f6b271746b4846d0acaf0cefa6b2eaf2a7ad"}, - {file = "rpds_py-0.10.6-cp310-none-win_amd64.whl", hash = "sha256:b455492cab07107bfe8711e20cd920cc96003e0da3c1f91297235b1603d2aca7"}, - {file = "rpds_py-0.10.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e8cdd52744f680346ff8c1ecdad5f4d11117e1724d4f4e1874f3a67598821069"}, - {file = "rpds_py-0.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66414dafe4326bca200e165c2e789976cab2587ec71beb80f59f4796b786a238"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc435d059f926fdc5b05822b1be4ff2a3a040f3ae0a7bbbe672babb468944722"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e7f2219cb72474571974d29a191714d822e58be1eb171f229732bc6fdedf0ac"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3953c6926a63f8ea5514644b7afb42659b505ece4183fdaaa8f61d978754349e"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bb2e4826be25e72013916eecd3d30f66fd076110de09f0e750163b416500721"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf347b495b197992efc81a7408e9a83b931b2f056728529956a4d0858608b80"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:102eac53bb0bf0f9a275b438e6cf6904904908562a1463a6fc3323cf47d7a532"}, - {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40f93086eef235623aa14dbddef1b9fb4b22b99454cb39a8d2e04c994fb9868c"}, - {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e22260a4741a0e7a206e175232867b48a16e0401ef5bce3c67ca5b9705879066"}, - {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4e56860a5af16a0fcfa070a0a20c42fbb2012eed1eb5ceeddcc7f8079214281"}, - {file = "rpds_py-0.10.6-cp311-none-win32.whl", hash = "sha256:0774a46b38e70fdde0c6ded8d6d73115a7c39d7839a164cc833f170bbf539116"}, - {file = "rpds_py-0.10.6-cp311-none-win_amd64.whl", hash = "sha256:4a5ee600477b918ab345209eddafde9f91c0acd931f3776369585a1c55b04c57"}, - {file = "rpds_py-0.10.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:5ee97c683eaface61d38ec9a489e353d36444cdebb128a27fe486a291647aff6"}, - {file = "rpds_py-0.10.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0713631d6e2d6c316c2f7b9320a34f44abb644fc487b77161d1724d883662e31"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a53f5998b4bbff1cb2e967e66ab2addc67326a274567697379dd1e326bded7"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a555ae3d2e61118a9d3e549737bb4a56ff0cec88a22bd1dfcad5b4e04759175"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:945eb4b6bb8144909b203a88a35e0a03d22b57aefb06c9b26c6e16d72e5eb0f0"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:52c215eb46307c25f9fd2771cac8135d14b11a92ae48d17968eda5aa9aaf5071"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1b3cd23d905589cb205710b3988fc8f46d4a198cf12862887b09d7aaa6bf9b9"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64ccc28683666672d7c166ed465c09cee36e306c156e787acef3c0c62f90da5a"}, - {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:516a611a2de12fbea70c78271e558f725c660ce38e0006f75139ba337d56b1f6"}, - {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9ff93d3aedef11f9c4540cf347f8bb135dd9323a2fc705633d83210d464c579d"}, - {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d858532212f0650be12b6042ff4378dc2efbb7792a286bee4489eaa7ba010586"}, - {file = "rpds_py-0.10.6-cp312-none-win32.whl", hash = "sha256:3c4eff26eddac49d52697a98ea01b0246e44ca82ab09354e94aae8823e8bda02"}, - {file = "rpds_py-0.10.6-cp312-none-win_amd64.whl", hash = "sha256:150eec465dbc9cbca943c8e557a21afdcf9bab8aaabf386c44b794c2f94143d2"}, - {file = "rpds_py-0.10.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:cf693eb4a08eccc1a1b636e4392322582db2a47470d52e824b25eca7a3977b53"}, - {file = "rpds_py-0.10.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4134aa2342f9b2ab6c33d5c172e40f9ef802c61bb9ca30d21782f6e035ed0043"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e782379c2028a3611285a795b89b99a52722946d19fc06f002f8b53e3ea26ea9"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f6da6d842195fddc1cd34c3da8a40f6e99e4a113918faa5e60bf132f917c247"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a9fe992887ac68256c930a2011255bae0bf5ec837475bc6f7edd7c8dfa254e"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b788276a3c114e9f51e257f2a6f544c32c02dab4aa7a5816b96444e3f9ffc336"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa1afc70a02645809c744eefb7d6ee8fef7e2fad170ffdeacca267fd2674f13"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bddd4f91eede9ca5275e70479ed3656e76c8cdaaa1b354e544cbcf94c6fc8ac4"}, - {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:775049dfa63fb58293990fc59473e659fcafd953bba1d00fc5f0631a8fd61977"}, - {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c6c45a2d2b68c51fe3d9352733fe048291e483376c94f7723458cfd7b473136b"}, - {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0699ab6b8c98df998c3eacf51a3b25864ca93dab157abe358af46dc95ecd9801"}, - {file = "rpds_py-0.10.6-cp38-none-win32.whl", hash = "sha256:ebdab79f42c5961682654b851f3f0fc68e6cc7cd8727c2ac4ffff955154123c1"}, - {file = "rpds_py-0.10.6-cp38-none-win_amd64.whl", hash = "sha256:24656dc36f866c33856baa3ab309da0b6a60f37d25d14be916bd3e79d9f3afcf"}, - {file = "rpds_py-0.10.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:0898173249141ee99ffcd45e3829abe7bcee47d941af7434ccbf97717df020e5"}, - {file = "rpds_py-0.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9184fa6c52a74a5521e3e87badbf9692549c0fcced47443585876fcc47e469"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5752b761902cd15073a527b51de76bbae63d938dc7c5c4ad1e7d8df10e765138"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99a57006b4ec39dbfb3ed67e5b27192792ffb0553206a107e4aadb39c5004cd5"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09586f51a215d17efdb3a5f090d7cbf1633b7f3708f60a044757a5d48a83b393"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e225a6a14ecf44499aadea165299092ab0cba918bb9ccd9304eab1138844490b"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2039f8d545f20c4e52713eea51a275e62153ee96c8035a32b2abb772b6fc9e5"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:34ad87a831940521d462ac11f1774edf867c34172010f5390b2f06b85dcc6014"}, - {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dcdc88b6b01015da066da3fb76545e8bb9a6880a5ebf89e0f0b2e3ca557b3ab7"}, - {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25860ed5c4e7f5e10c496ea78af46ae8d8468e0be745bd233bab9ca99bfd2647"}, - {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7854a207ef77319ec457c1eb79c361b48807d252d94348305db4f4b62f40f7f3"}, - {file = "rpds_py-0.10.6-cp39-none-win32.whl", hash = "sha256:e6fcc026a3f27c1282c7ed24b7fcac82cdd70a0e84cc848c0841a3ab1e3dea2d"}, - {file = "rpds_py-0.10.6-cp39-none-win_amd64.whl", hash = "sha256:e98c4c07ee4c4b3acf787e91b27688409d918212dfd34c872201273fdd5a0e18"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:68fe9199184c18d997d2e4293b34327c0009a78599ce703e15cd9a0f47349bba"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3339eca941568ed52d9ad0f1b8eb9fe0958fa245381747cecf2e9a78a5539c42"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a360cfd0881d36c6dc271992ce1eda65dba5e9368575663de993eeb4523d895f"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:031f76fc87644a234883b51145e43985aa2d0c19b063e91d44379cd2786144f8"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f36a9d751f86455dc5278517e8b65580eeee37d61606183897f122c9e51cef3"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:052a832078943d2b2627aea0d19381f607fe331cc0eb5df01991268253af8417"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023574366002bf1bd751ebaf3e580aef4a468b3d3c216d2f3f7e16fdabd885ed"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:defa2c0c68734f4a82028c26bcc85e6b92cced99866af118cd6a89b734ad8e0d"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879fb24304ead6b62dbe5034e7b644b71def53c70e19363f3c3be2705c17a3b4"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:53c43e10d398e365da2d4cc0bcaf0854b79b4c50ee9689652cdc72948e86f487"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3777cc9dea0e6c464e4b24760664bd8831738cc582c1d8aacf1c3f546bef3f65"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:40578a6469e5d1df71b006936ce95804edb5df47b520c69cf5af264d462f2cbb"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:cf71343646756a072b85f228d35b1d7407da1669a3de3cf47f8bbafe0c8183a4"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10f32b53f424fc75ff7b713b2edb286fdbfc94bf16317890260a81c2c00385dc"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81de24a1c51cfb32e1fbf018ab0bdbc79c04c035986526f76c33e3f9e0f3356c"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac17044876e64a8ea20ab132080ddc73b895b4abe9976e263b0e30ee5be7b9c2"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8a78bd4879bff82daef48c14d5d4057f6856149094848c3ed0ecaf49f5aec2"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78ca33811e1d95cac8c2e49cb86c0fb71f4d8409d8cbea0cb495b6dbddb30a55"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c63c3ef43f0b3fb00571cff6c3967cc261c0ebd14a0a134a12e83bdb8f49f21f"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:7fde6d0e00b2fd0dbbb40c0eeec463ef147819f23725eda58105ba9ca48744f4"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:79edd779cfc46b2e15b0830eecd8b4b93f1a96649bcb502453df471a54ce7977"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9164ec8010327ab9af931d7ccd12ab8d8b5dc2f4c6a16cbdd9d087861eaaefa1"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d29ddefeab1791e3c751e0189d5f4b3dbc0bbe033b06e9c333dca1f99e1d523e"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:30adb75ecd7c2a52f5e76af50644b3e0b5ba036321c390b8e7ec1bb2a16dd43c"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd609fafdcdde6e67a139898196698af37438b035b25ad63704fd9097d9a3482"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eef672de005736a6efd565577101277db6057f65640a813de6c2707dc69f396"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cf4393c7b41abbf07c88eb83e8af5013606b1cdb7f6bc96b1b3536b53a574b8"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad857f42831e5b8d41a32437f88d86ead6c191455a3499c4b6d15e007936d4cf"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7360573f1e046cb3b0dceeb8864025aa78d98be4bb69f067ec1c40a9e2d9df"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d08f63561c8a695afec4975fae445245386d645e3e446e6f260e81663bfd2e38"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f0f17f2ce0f3529177a5fff5525204fad7b43dd437d017dd0317f2746773443d"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:442626328600bde1d09dc3bb00434f5374948838ce75c41a52152615689f9403"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e9616f5bd2595f7f4a04b67039d890348ab826e943a9bfdbe4938d0eba606971"}, - {file = "rpds_py-0.10.6.tar.gz", hash = "sha256:4ce5a708d65a8dbf3748d2474b580d606b1b9f91b5c6ab2a316e0b0cf7a4ba50"}, -] - -[[package]] -name = "setuptools" -version = "68.2.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, - {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "smmap" -version = "5.0.1" -description = "A pure Python implementation of a sliding window memory map manager" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, - {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, -] - -[[package]] -name = "sortedcontainers" -version = "2.4.0" -description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, - {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, -] - -[[package]] -name = "stevedore" -version = "5.1.0" -description = "Manage dynamic plugins for Python applications" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, - {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, -] - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "tox" -version = "4.11.3" -description = "tox is a generic virtualenv management and test command line tool" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tox-4.11.3-py3-none-any.whl", hash = "sha256:599af5e5bb0cad0148ac1558a0b66f8fff219ef88363483b8d92a81e4246f28f"}, - {file = "tox-4.11.3.tar.gz", hash = "sha256:5039f68276461fae6a9452a3b2c7295798f00a0e92edcd9a3b78ba1a73577951"}, -] - -[package.dependencies] -cachetools = ">=5.3.1" -chardet = ">=5.2" -colorama = ">=0.4.6" -filelock = ">=3.12.3" -packaging = ">=23.1" -platformdirs = ">=3.10" -pluggy = ">=1.3" -pyproject-api = ">=1.6.1" -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} -virtualenv = ">=20.24.3" - -[package.extras] -docs = ["furo (>=2023.8.19)", "sphinx (>=7.2.4)", "sphinx-argparse-cli (>=1.11.1)", "sphinx-autodoc-typehints (>=1.24)", "sphinx-copybutton (>=0.5.2)", "sphinx-inline-tabs (>=2023.4.21)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -testing = ["build[virtualenv] (>=0.10)", "covdefaults (>=2.3)", "detect-test-pollution (>=1.1.1)", "devpi-process (>=1)", "diff-cover (>=7.7)", "distlib (>=0.3.7)", "flaky (>=3.7)", "hatch-vcs (>=0.3)", "hatchling (>=1.18)", "psutil (>=5.9.5)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-xdist (>=3.3.1)", "re-assert (>=1.1)", "time-machine (>=2.12)", "wheel (>=0.41.2)"] - -[[package]] -name = "types-python-dateutil" -version = "2.8.19.14" -description = "Typing stubs for python-dateutil" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, - {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, -] - -[[package]] -name = "types-setuptools" -version = "68.2.0.0" -description = "Typing stubs for setuptools" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "types-setuptools-68.2.0.0.tar.gz", hash = "sha256:a4216f1e2ef29d089877b3af3ab2acf489eb869ccaf905125c69d2dc3932fd85"}, - {file = "types_setuptools-68.2.0.0-py3-none-any.whl", hash = "sha256:77edcc843e53f8fc83bb1a840684841f3dc804ec94562623bfa2ea70d5a2ba1b"}, -] - -[[package]] -name = "types-toml" -version = "0.10.8.7" -description = "Typing stubs for toml" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "types-toml-0.10.8.7.tar.gz", hash = "sha256:58b0781c681e671ff0b5c0319309910689f4ab40e8a2431e205d70c94bb6efb1"}, - {file = "types_toml-0.10.8.7-py3-none-any.whl", hash = "sha256:61951da6ad410794c97bec035d59376ce1cbf4453dc9b6f90477e81e4442d631"}, -] - -[[package]] -name = "typing-extensions" -version = "4.8.0" -description = "Backported and Experimental Type Hints for Python 3.8+" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, -] - -[[package]] -name = "uri-template" -version = "1.3.0" -description = "RFC 6570 URI Template Processor" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, - {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, -] - -[package.extras] -dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] - -[[package]] -name = "virtualenv" -version = "20.24.6" -description = "Virtual Python Environment builder" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "virtualenv-20.24.6-py3-none-any.whl", hash = "sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381"}, - {file = "virtualenv-20.24.6.tar.gz", hash = "sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af"}, -] - -[package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<4" - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] - -[[package]] -name = "webcolors" -version = "1.13" -description = "A library for working with the color formats defined by HTML and CSS." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, - {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, -] - -[package.extras] -docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] -tests = ["pytest", "pytest-cov"] - -[[package]] -name = "zipp" -version = "3.17.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.8" -content-hash = "f92110595709c3862f7332df548cf325501d2a3feaa6cf2dbe9ae9d0e58077ae" diff --git a/poetry.toml b/poetry.toml new file mode 100644 index 00000000..1865fc64 --- /dev/null +++ b/poetry.toml @@ -0,0 +1,6 @@ + +[virtualenvs.options] +system-site-packages = false +# these are already dev-dependencies, and therefore will come as needed +no-pip = true +no-setuptools = true diff --git a/pyproject.toml b/pyproject.toml index dcf7eb4e..cbe1c50d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,11 +3,9 @@ name = "cyclonedx-bom" version = "4.0.0-alpha.0" description = "CycloneDX Software Bill of Materials (SBOM) generation utility" authors = [ - "Steven Springett ", - "Paul Horton ", + "Jan Kowalleck ", ] maintainers = [ - "Paul Horton ", "Jan Kowalleck ", ] license = "Apache-2.0" @@ -16,60 +14,72 @@ homepage = "https://github.com/CycloneDX/cyclonedx-python/#readme" repository = "https://github.com/CycloneDX/cyclonedx-python" documentation = "https://cyclonedx-bom-tool.readthedocs.io/" packages = [ - { include = "cyclonedx_py" } + { include = "cyclonedx_py" } ] include = [ - "LICENSE", "NOTICE" + "LICENSE", "NOTICE" ] classifiers = [ - # Trove classifiers - https://packaging.python.org/specifications/core-metadata/#metadata-classifier - # Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers - 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Developers', - 'Intended Audience :: Information Technology', - 'Intended Audience :: Legal Industry', - 'Intended Audience :: System Administrators', - 'Topic :: Security', - 'Topic :: Software Development', - 'Topic :: System :: Software Distribution', - 'License :: OSI Approved :: Apache Software License', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Programming Language :: Python :: 3.11', - 'Typing :: Typed' + # Trove classifiers - https://packaging.python.org/specifications/core-metadata/#metadata-classifier + # Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers + 'Development Status :: 5 - Production/Stable', + 'Intended Audience :: Developers', + 'Intended Audience :: Information Technology', + 'Intended Audience :: Legal Industry', + 'Intended Audience :: System Administrators', + 'Topic :: Security', + 'Topic :: Software Development', + 'Topic :: System :: Software Distribution', + 'License :: OSI Approved :: Apache Software License', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: 3.12', + 'Typing :: Typed' ] +[tool.poetry.urls] +"Bug Tracker" = "https://github.com/CycloneDX/cyclonedx-python/issues" +"Funding" = "https://owasp.org/donate/?reponame=www-project-cyclonedx&title=OWASP+CycloneDX" [tool.poetry.dependencies] python = "^3.8" # ATTENTION: keep `deps.lowest.r` file in sync -cyclonedx-python-lib = { version="^5.0.0", extras=['validation'] } +cyclonedx-python-lib = { version = "^6.1.0", extras = ['validation'] } packageurl-python = ">= 0.11" pip-requirements-parser = "^32.0.0" -setuptools = ">= 47.0.0" -toml = "^0.10.0" +tomli = { version = "^2.0.1", python = "<3.11" } chardet = "^5.1" +packaging = "^22||^23" -[tool.poetry.dev-dependencies] +[tool.poetry.group.dev.dependencies] # pin to exact versions, if the tool/lib/plugin is process-relevant coverage = "7.3.1" ddt = "1.6.0" flake8 = { version = "6.1.0", python = ">=3.8.1" } flake8-annotations = { version = "3.0.1", python = ">=3.8.1" } -flake8-bugbear = { version = "23.7.10", python = ">=3.8.1" } -flake8-isort = "6.0.0" +flake8-bugbear = { version = "23.9.16", python = ">=3.8.1" } +flake8-isort = "6.1.1" +flake8-quotes = "3.3.2" +flake8-use-fstring = "1.4" +pep8-naming = "0.13.3" isort = "5.12.0" autopep8 = "2.0.4" -mypy = "1.5.1" +mypy = "1.7.0" bandit = "1.7.5" tox = "4.11.3" # `types-toml` need to stay in sync with version of `toml` types-toml = "^0.10.0" -# `types-setuptools` need to stay in sync with version of `setuptools` - but 47 was not typed... -types-setuptools = ">= 57.0.0" +# min version required to be able to install some dependencies +# see https://github.com/MichaelKim0407/flake8-use-fstring/issues/33 +setuptools = ">= 47.0.0" +# install` needed for setup/init of testbeds +pip = ">=23.0" +pipenv = ">=2023.11.5" +poetry = "^1.7" [tool.poetry.scripts] -cyclonedx-py = 'cyclonedx_py._internal.cli:main' +cyclonedx-py = 'cyclonedx_py._internal.cli:run' [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/tests/__init__.py b/tests/__init__.py index 308d97e7..f9a8a3b5 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,5 +1,3 @@ -# encoding: utf-8 - # This file is part of CycloneDX Python Lib # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,3 +14,148 @@ # # SPDX-License-Identifier: Apache-2.0 # Copyright (c) OWASP Foundation. All Rights Reserved. + + +import re +from json import dumps as json_dumps +from os import getenv +from os.path import dirname, join +from pathlib import Path +from typing import Union +from unittest import TestCase +from xml.sax.saxutils import escape as xml_escape, quoteattr as xml_quoteattr # nosec:B406 + +from cyclonedx.schema import OutputFormat, SchemaVersion + +from cyclonedx_py import __version__ as __this_version + +RECREATE_SNAPSHOTS = '1' == getenv('CDX_TEST_RECREATE_SNAPSHOTS') +if RECREATE_SNAPSHOTS: + print('!!! WILL RECREATE ALL SNAPSHOTS !!!') + +INIT_TESTBEDS = '1' != getenv('CDX_TEST_SKIP_INIT_TESTBEDS') +if INIT_TESTBEDS: + print('!!! WILL INIT TESTBEDS !!!') + +_TESTDATA_DIRECTORY = join(dirname(__file__), '_data') + +INFILES_DIRECTORY = join(_TESTDATA_DIRECTORY, 'infiles') +SNAPSHOTS_DIRECTORY = join(_TESTDATA_DIRECTORY, 'snapshots') + +UNSUPPORTED_OF_SV = ( + (OutputFormat.JSON, SchemaVersion.V1_1), + (OutputFormat.JSON, SchemaVersion.V1_0), +) + +SUPPORTED_OF_SV = tuple( + (of, sv) + for of in OutputFormat + for sv in SchemaVersion + if (of, sv) not in UNSUPPORTED_OF_SV +) + + +class SnapshotMixin: + + @staticmethod + def getSnapshotFile(snapshot_name: str) -> str: # noqa: N802 + return join(SNAPSHOTS_DIRECTORY, f'{snapshot_name}.bin') + + @classmethod + def writeSnapshot(cls, snapshot_name: str, data: str) -> None: # noqa: N802 + with open(cls.getSnapshotFile(snapshot_name), 'wt', encoding='utf8', newline='\n') as sf: + sf.write(data) + + @classmethod + def readSnapshot(cls, snapshot_name: str) -> str: # noqa: N802 + with open(cls.getSnapshotFile(snapshot_name), 'rt', encoding='utf8', newline='\n') as sf: + return sf.read() + + def assertEqualSnapshot(self: Union[TestCase, 'SnapshotMixin'], # noqa: N802 + actual: str, snapshot_name: str) -> None: + if RECREATE_SNAPSHOTS: + self.writeSnapshot(snapshot_name, actual) + _omd = self.maxDiff + _omd = self.maxDiff + self.maxDiff = None + try: + self.assertEqual(actual, self.readSnapshot(snapshot_name)) + finally: + self.maxDiff = _omd + + +# region reproducible test results + +_root_file_uri = Path(__file__).parent.parent.absolute().as_uri() + '/' +_root_file_uri_xml = xml_escape(_root_file_uri) +_root_file_uri_xml_attr = xml_quoteattr(_root_file_uri)[1:-1] +_root_file_uri_json = json_dumps(_root_file_uri)[1:-1] + + +def make_xml_comparable(bom: str) -> str: + bom = bom.replace(_root_file_uri_xml, 'file://.../') + bom = bom.replace(_root_file_uri_xml_attr, 'file://.../') + bom = bom.replace( # replace metadata.tools.version + ' CycloneDX\n' + ' cyclonedx-bom\n' + f' {__this_version}', + ' CycloneDX\n' + ' cyclonedx-bom\n' + ' thisVersion-testing') + bom = re.sub( # replace metadata.tools.version + ' CycloneDX\n' + ' cyclonedx-python-lib\n' + ' .*?', + ' CycloneDX\n' + ' cyclonedx-python-lib\n' + ' libVersion-testing', + bom) + bom = re.sub( # replace metadata.tools.externalReferences + ' CycloneDX\n' + ' cyclonedx-python-lib\n' + r' (.*?)\n' + r' [\s\S]*?', + ' CycloneDX\n' + ' cyclonedx-python-lib\n' + r' \1''\n' + ' ', + bom) + return bom + + +def make_json_comparable(bom: str) -> str: + bom = bom.replace(_root_file_uri_json, 'file://.../') + bom = bom.replace( # replace metadata.tools.version + ' "name": "cyclonedx-bom",\n' + ' "vendor": "CycloneDX",\n' + f' "version": {json_dumps(__this_version)}', + ' "name": "cyclonedx-bom",\n' + ' "vendor": "CycloneDX",\n' + ' "version": "thisVersion-testing"') + bom = re.sub( # replace metadata.tools.version + ' "name": "cyclonedx-python-lib",\n' + ' "vendor": "CycloneDX",\n' + ' "version": ".*?"', + ' "name": "cyclonedx-python-lib",\n' + ' "vendor": "CycloneDX",\n' + ' "version": "libVersion-testing"', + bom) + bom = re.sub( # replace metadata.tools.externalReferences + r' "externalReferences": \[[\s\S]*?\],\n' + ' "name": "cyclonedx-python-lib",\n' + ' "vendor": "CycloneDX"', + ' "externalReferences": [ ],\n' + ' "name": "cyclonedx-python-lib",\n' + ' "vendor": "CycloneDX"', + bom) + return bom + + +def make_comparable(bom: str, of: OutputFormat) -> str: + if of is OutputFormat.XML: + return make_xml_comparable(bom) + if of is OutputFormat.JSON: + return make_json_comparable(bom) + raise NotImplementedError(f'unknown OutputFormat: {of!r}') + +# endregion reproducible test results diff --git a/tests/fixtures/.editorconfig b/tests/_data/infiles/.editorconfig similarity index 100% rename from tests/fixtures/.editorconfig rename to tests/_data/infiles/.editorconfig diff --git a/tests/fixtures/.gitattributes b/tests/_data/infiles/.gitattributes similarity index 100% rename from tests/fixtures/.gitattributes rename to tests/_data/infiles/.gitattributes diff --git a/tests/_data/infiles/_helpers/local_pckages/a/.gitignore b/tests/_data/infiles/_helpers/local_pckages/a/.gitignore new file mode 100644 index 00000000..a4d2bdf6 --- /dev/null +++ b/tests/_data/infiles/_helpers/local_pckages/a/.gitignore @@ -0,0 +1,2 @@ +# in these cases we need to keep the dists, for showcasing purposes +!/dist/ diff --git a/tests/_data/infiles/_helpers/local_pckages/a/README.md b/tests/_data/infiles/_helpers/local_pckages/a/README.md new file mode 100644 index 00000000..19e11b7d --- /dev/null +++ b/tests/_data/infiles/_helpers/local_pckages/a/README.md @@ -0,0 +1 @@ +build via `python -m build` diff --git a/tests/_data/infiles/_helpers/local_pckages/a/dist/package-a-23.42.tar.gz b/tests/_data/infiles/_helpers/local_pckages/a/dist/package-a-23.42.tar.gz new file mode 100644 index 00000000..4bc8f095 Binary files /dev/null and b/tests/_data/infiles/_helpers/local_pckages/a/dist/package-a-23.42.tar.gz differ diff --git a/tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl b/tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl new file mode 100644 index 00000000..b546c551 Binary files /dev/null and b/tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl differ diff --git a/cyclonedx_py/_internal/utils/__init__.py b/tests/_data/infiles/_helpers/local_pckages/a/module_a.py similarity index 93% rename from cyclonedx_py/_internal/utils/__init__.py rename to tests/_data/infiles/_helpers/local_pckages/a/module_a.py index 0d6867b4..e804bc1a 100644 --- a/cyclonedx_py/_internal/utils/__init__.py +++ b/tests/_data/infiles/_helpers/local_pckages/a/module_a.py @@ -1,5 +1,3 @@ -# encoding: utf-8 - # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -15,6 +13,7 @@ # SPDX-License-Identifier: Apache-2.0 # Copyright (c) OWASP Foundation. All Rights Reserved. + """ -Set of utility classes. +module A """ diff --git a/tests/_data/infiles/_helpers/local_pckages/a/pyproject.toml b/tests/_data/infiles/_helpers/local_pckages/a/pyproject.toml new file mode 100644 index 00000000..c9f2cc3b --- /dev/null +++ b/tests/_data/infiles/_helpers/local_pckages/a/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "package-a" +version = "23.42" +description = "some package A" +license = {text = "Apache-2.0"} +authors = [] +requires-python = ">=3.8" + +[tool.setuptools] +py-modules = ["module_a"] + +[build-system] +requires = ["setuptools>=61.0"] +build-backend = "setuptools.build_meta" diff --git a/tests/_data/infiles/_helpers/local_pckages/b/.gitignore b/tests/_data/infiles/_helpers/local_pckages/b/.gitignore new file mode 100644 index 00000000..a4d2bdf6 --- /dev/null +++ b/tests/_data/infiles/_helpers/local_pckages/b/.gitignore @@ -0,0 +1,2 @@ +# in these cases we need to keep the dists, for showcasing purposes +!/dist/ diff --git a/tests/_data/infiles/_helpers/local_pckages/b/README.md b/tests/_data/infiles/_helpers/local_pckages/b/README.md new file mode 100644 index 00000000..19e11b7d --- /dev/null +++ b/tests/_data/infiles/_helpers/local_pckages/b/README.md @@ -0,0 +1 @@ +build via `python -m build` diff --git a/tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz b/tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz new file mode 100644 index 00000000..e5e8b0ef Binary files /dev/null and b/tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz differ diff --git a/tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl b/tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl new file mode 100644 index 00000000..2ab38d98 Binary files /dev/null and b/tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl differ diff --git a/cyclonedx_py/_internal/exception/__init__.py b/tests/_data/infiles/_helpers/local_pckages/b/module_b.py similarity index 86% rename from cyclonedx_py/_internal/exception/__init__.py rename to tests/_data/infiles/_helpers/local_pckages/b/module_b.py index 87d2082d..e23e0482 100644 --- a/cyclonedx_py/_internal/exception/__init__.py +++ b/tests/_data/infiles/_helpers/local_pckages/b/module_b.py @@ -1,5 +1,3 @@ -# encoding: utf-8 - # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -13,8 +11,9 @@ # limitations under the License. # # SPDX-License-Identifier: Apache-2.0 -# +# Copyright (c) OWASP Foundation. All Rights Reserved. + """ -Exceptions that are specific to the CycloneDX Python implementation. +module B """ diff --git a/tests/_data/infiles/_helpers/local_pckages/b/pyproject.toml b/tests/_data/infiles/_helpers/local_pckages/b/pyproject.toml new file mode 100644 index 00000000..fdc0c21b --- /dev/null +++ b/tests/_data/infiles/_helpers/local_pckages/b/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "package-b" +version = "23.42" +description = "some package B" +license = {text = "Apache-2.0"} +authors = [] +requires-python = ">=3.8" + +[tool.setuptools] +py-modules = ["module_b"] + +[build-system] +requires = ["setuptools>=61.0"] +build-backend = "setuptools.build_meta" diff --git a/tests/_data/infiles/_helpers/local_pckages/c/.gitignore b/tests/_data/infiles/_helpers/local_pckages/c/.gitignore new file mode 100644 index 00000000..a4d2bdf6 --- /dev/null +++ b/tests/_data/infiles/_helpers/local_pckages/c/.gitignore @@ -0,0 +1,2 @@ +# in these cases we need to keep the dists, for showcasing purposes +!/dist/ diff --git a/tests/_data/infiles/_helpers/local_pckages/c/README.md b/tests/_data/infiles/_helpers/local_pckages/c/README.md new file mode 100644 index 00000000..19e11b7d --- /dev/null +++ b/tests/_data/infiles/_helpers/local_pckages/c/README.md @@ -0,0 +1 @@ +build via `python -m build` diff --git a/tests/_data/infiles/_helpers/local_pckages/c/dist/package-c-23.42.tar.gz b/tests/_data/infiles/_helpers/local_pckages/c/dist/package-c-23.42.tar.gz new file mode 100644 index 00000000..ee6890ed Binary files /dev/null and b/tests/_data/infiles/_helpers/local_pckages/c/dist/package-c-23.42.tar.gz differ diff --git a/tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl b/tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl new file mode 100644 index 00000000..1d9fd7c1 Binary files /dev/null and b/tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl differ diff --git a/cyclonedx_py/_internal/exception/parser.py b/tests/_data/infiles/_helpers/local_pckages/c/module_c.py similarity index 81% rename from cyclonedx_py/_internal/exception/parser.py rename to tests/_data/infiles/_helpers/local_pckages/c/module_c.py index 8ca45c2e..e23e0482 100644 --- a/cyclonedx_py/_internal/exception/parser.py +++ b/tests/_data/infiles/_helpers/local_pckages/c/module_c.py @@ -1,5 +1,3 @@ -# encoding: utf-8 - # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -13,8 +11,9 @@ # limitations under the License. # # SPDX-License-Identifier: Apache-2.0 -# +# Copyright (c) OWASP Foundation. All Rights Reserved. + """ -Exceptions that are specific error scenarios during occurring within Parsers in the CycloneDX library implementation. +module B """ diff --git a/tests/_data/infiles/_helpers/local_pckages/c/pyproject.toml b/tests/_data/infiles/_helpers/local_pckages/c/pyproject.toml new file mode 100644 index 00000000..ee21be96 --- /dev/null +++ b/tests/_data/infiles/_helpers/local_pckages/c/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "package-c" +version = "23.42" +description = "some package C" +license = {text = "Apache-2.0"} +authors = [] +requires-python = ">=3.8" + +[tool.setuptools] +py-modules = ["module_c"] + +[build-system] +requires = ["setuptools>=61.0"] +build-backend = "setuptools.build_meta" diff --git a/tests/_data/infiles/_helpers/pypi-proxy.py b/tests/_data/infiles/_helpers/pypi-proxy.py new file mode 100755 index 00000000..6d6edee1 --- /dev/null +++ b/tests/_data/infiles/_helpers/pypi-proxy.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 + +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + +""" +This is a small http proxy to PyPI. +This might be needed to play certain setups. +""" + +import sys +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from os import unlink +from urllib.request import urlretrieve + + +class PypiProxyReqHandler(BaseHTTPRequestHandler): + def do_GET(self) -> None: # noqa:N802 + print('> ', self.path, file=sys.stderr) + p, m = urlretrieve(f'https://pypi.org{self.path}') # nosec B310 + print('< ', p, file=sys.stderr) + self.send_response(200) + for k, v in m.items(): + self.send_header(k, v) + self.end_headers() + with open(p, 'rb') as f: + self.wfile.write(f.read()) + unlink(p) + + +if __name__ == '__main__': + server_address = ('', int(sys.argv[1]) if len(sys.argv) >= 2 else 8080) + httpd = ThreadingHTTPServer(server_address, PypiProxyReqHandler) + print(f'running PyPI proxy at: {server_address!r}', file=sys.stderr) + try: + httpd.serve_forever() + except KeyboardInterrupt: + httpd.server_close() diff --git a/tests/_data/infiles/environment/broken-env/README.md b/tests/_data/infiles/environment/broken-env/README.md new file mode 100644 index 00000000..fac9afdb --- /dev/null +++ b/tests/_data/infiles/environment/broken-env/README.md @@ -0,0 +1,2 @@ +A dir that MUST NOT contain any (python (virtual) environment. +This is used in integration tests. diff --git a/tests/_data/infiles/environment/broken-env/broken-json.py b/tests/_data/infiles/environment/broken-env/broken-json.py new file mode 100755 index 00000000..1798a188 --- /dev/null +++ b/tests/_data/infiles/environment/broken-env/broken-json.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python3 + +""" +print broken JSON. +""" + +print(r'{"some unfinished json') +exit(0) diff --git a/tests/_data/infiles/environment/broken-env/non-zero.py b/tests/_data/infiles/environment/broken-env/non-zero.py new file mode 100755 index 00000000..3b9daeef --- /dev/null +++ b/tests/_data/infiles/environment/broken-env/non-zero.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python3 + +""" +exit non-zero. +""" + +print(r'[]') +exit(1337) diff --git a/tests/_data/infiles/environment/editable-self/init.py b/tests/_data/infiles/environment/editable-self/init.py new file mode 100644 index 00000000..a3a7d080 --- /dev/null +++ b/tests/_data/infiles/environment/editable-self/init.py @@ -0,0 +1,40 @@ +""" +initialize this testbed. +""" + +from os import name as os_name +from os.path import dirname, join +from subprocess import check_call # nosec:B404 +from sys import executable +from venv import EnvBuilder + +__all__ = ['main'] + +this_dir = dirname(__file__) +env_dir = join(this_dir, '.venv') + + +def pip_install(*args: str) -> None: + # pip is not API, but a CLI -- call it like that! + call = ( + executable, '-m', 'pip', + '--python', env_dir, + 'install', '--require-virtualenv', '--no-input', '--progress-bar=off', '--no-color', + *args + ) + print('+ ', *call) + check_call(call, cwd=this_dir, shell=False) # nosec:B603 + + +def main() -> None: + EnvBuilder( + system_site_packages=False, + symlinks=os_name != 'nt', + with_pip=False, + ).create(env_dir) + + pip_install('-e', dirname(__file__)) + + +if __name__ == '__main__': + main() diff --git a/tests/_data/infiles/environment/editable-self/pyproject.toml b/tests/_data/infiles/environment/editable-self/pyproject.toml new file mode 100644 index 00000000..42d786f0 --- /dev/null +++ b/tests/_data/infiles/environment/editable-self/pyproject.toml @@ -0,0 +1,8 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "editable-self" +version = "0.1.0" +description = "install the current project as an editable" +dependencies = [ + 'six==1.16.0' +] diff --git a/tests/_data/infiles/environment/local/init.py b/tests/_data/infiles/environment/local/init.py new file mode 100644 index 00000000..7bfa4f1d --- /dev/null +++ b/tests/_data/infiles/environment/local/init.py @@ -0,0 +1,46 @@ +""" +initialize this testbed. +""" + +from os import name as os_name +from os.path import abspath, dirname, join +from subprocess import check_call # nosec:B404 +from sys import executable +from venv import EnvBuilder + +__all__ = ['main'] + +this_dir = dirname(__file__) +env_dir = join(this_dir, '.venv') + +localpackages_dir = abspath(join(dirname(__file__), '..', '..', '_helpers', 'local_pckages')) + + +def pip_install(*args: str) -> None: + # pip is not API, but a CLI -- call it like that! + call = ( + executable, '-m', 'pip', + '--python', env_dir, + 'install', '--require-virtualenv', '--no-input', '--progress-bar=off', '--no-color', + *args + ) + print('+ ', *call) + check_call(call, cwd=this_dir, shell=False) # nosec:B603 + + +def main() -> None: + EnvBuilder( + system_site_packages=False, + symlinks=os_name != 'nt', + with_pip=False, + ).create(env_dir) + + pip_install( + join(localpackages_dir, 'a', 'dist', 'package_a-23.42-py3-none-any.whl'), + join(localpackages_dir, 'b', 'dist', 'package-b-23.42.tar.gz'), + join(localpackages_dir, 'c'), + ) + + +if __name__ == '__main__': + main() diff --git a/tests/_data/infiles/environment/local/pyproject.toml b/tests/_data/infiles/environment/local/pyproject.toml new file mode 100644 index 00000000..6291093d --- /dev/null +++ b/tests/_data/infiles/environment/local/pyproject.toml @@ -0,0 +1,5 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "local" +version = "0.1.0" +description = "packages from local paths" diff --git a/tests/_data/infiles/environment/no-deps/init.py b/tests/_data/infiles/environment/no-deps/init.py new file mode 100644 index 00000000..537b90ab --- /dev/null +++ b/tests/_data/infiles/environment/no-deps/init.py @@ -0,0 +1,23 @@ +""" +initialize this testbed. +""" + +from os import name as os_name +from os.path import dirname, join +from venv import EnvBuilder + +__all__ = ['main'] + +env_dir = join(dirname(__file__), '.venv') + + +def main() -> None: + EnvBuilder( + system_site_packages=False, + symlinks=os_name != 'nt', + with_pip=False, + ).create(env_dir) + + +if __name__ == '__main__': + main() diff --git a/tests/_data/infiles/environment/no-deps/pyproject.toml b/tests/_data/infiles/environment/no-deps/pyproject.toml new file mode 100644 index 00000000..e0dfd501 --- /dev/null +++ b/tests/_data/infiles/environment/no-deps/pyproject.toml @@ -0,0 +1,40 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "no-deps" +version = "0.1.0" +description = "packages with all meta, but no deps" +license = {text="Apache-2.0 OR MIT"} +readme = "README.md" +requires-python = ">=3.8" + +# dynamic = [] # TODO + +authors = ["Your Name ", "My Name"] +maintainers = [ + "John Smith ", + "Jane Smith ", +] + +keywords = ["packaging", "pipenv", "test"] +classifiers = [ + "License :: OSI Approved :: Apache Software License", + "License :: OSI Approved :: MIT License", + "Classifier: Development Status :: 4 - Beta", + "Intended Audience :: Developers" +] + +# dependencies = [] # TODO +# optional-dependencies = [] # TODO + +# entry-point = {} # TODO + +# gui-scripts = {} # TODO +# scripts = {} # TODO + +[project.urls] +homepage = "https://oss.acme.org/my-project/" +repository = "https://oss.acme.org/my-project.git" +documentation = "https://oss.acme.org/my-project/docs/" +"Bug Tracker" = "https://oss.acme.org/my-project/bugs/" +"Funding" = "https://oss.acme.org/my-project/funding/" +"Change log" = "https://oss.acme.org/my-project/changelog/" diff --git a/tests/_data/infiles/environment/via-pipenv/Pipfile b/tests/_data/infiles/environment/via-pipenv/Pipfile new file mode 100644 index 00000000..0df0f6a2 --- /dev/null +++ b/tests/_data/infiles/environment/via-pipenv/Pipfile @@ -0,0 +1,18 @@ +[pipenv] +sort_pipfile = true + +[packages] +toml = ">=0.10.2, <0.11" + +[dev-packages] +ddt = ">=1.6.0, <2" + +# custom catrogys/groups +# see https://pipenv.pypa.io/en/latest/pipfile.html#package-category-groups + +[categoryB] +colorama = ">=0.4.3" + +[groupA] +isoduration = "==20.11.0" +colorama = ">=0.4, <0.5" diff --git a/tests/_data/infiles/environment/via-pipenv/Pipfile.lock b/tests/_data/infiles/environment/via-pipenv/Pipfile.lock new file mode 100644 index 00000000..668b5145 --- /dev/null +++ b/tests/_data/infiles/environment/via-pipenv/Pipfile.lock @@ -0,0 +1,99 @@ +{ + "_meta": { + "hash": { + "sha256": "89162a3ad75438bdbaf691099103dfacb02ee2d655ab1369b20abd1da4250457" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "categoryB": { + "colorama": { + "hashes": [ + "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", + "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==0.4.6" + } + }, + "default": { + "toml": { + "hashes": [ + "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", + "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + ], + "index": "pypi", + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.10.2" + } + }, + "develop": { + "ddt": { + "hashes": [ + "sha256:a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114", + "sha256:d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df" + ], + "index": "pypi", + "version": "==1.7.0" + } + }, + "groupA": { + "arrow": { + "hashes": [ + "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", + "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + ], + "markers": "python_version >= '3.8'", + "version": "==1.3.0" + }, + "colorama": { + "hashes": [ + "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", + "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==0.4.6" + }, + "isoduration": { + "hashes": [ + "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", + "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==20.11.0" + }, + "python-dateutil": { + "hashes": [ + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.8.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" + }, + "types-python-dateutil": { + "hashes": [ + "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b", + "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + ], + "version": "==2.8.19.14" + } + } +} diff --git a/tests/_data/infiles/environment/via-pipenv/init.py b/tests/_data/infiles/environment/via-pipenv/init.py new file mode 100644 index 00000000..2b89aaf1 --- /dev/null +++ b/tests/_data/infiles/environment/via-pipenv/init.py @@ -0,0 +1,63 @@ +""" +initialize this testbed. +""" + +from os import environ +from os.path import dirname, join +from shutil import rmtree +from subprocess import CompletedProcess, run # nosec:B404 +from sys import executable +from typing import Any + +__all__ = ['main'] + +this_dir = dirname(__file__) +env_dir = join(this_dir, '.venv') + +pipenv_env = environ.copy() +pipenv_env['PIPENV_VENV_IN_PROJECT'] = '1' +pipenv_env['PIPENV_IGNORE_VIRTUALENVS'] = '1' +pipenv_env['PIPENV_NO_INHERIT'] = '1' +pipenv_env['PIPENV_NOSPIN'] = '1' + + +def pipenv_run(*args: str) -> CompletedProcess: + # pipenv is not API, but a CLI -- call it like that! + call = ( + executable, '-m', 'pipenv', + *args + ) + print('+ ', *call) + res = run(call, cwd=this_dir, env=pipenv_env, shell=False) # nosec:B603 + if res.returncode != 0: + raise RuntimeError('process failed') + return res + + +def pip_run(*args: str, **kwargs: Any) -> CompletedProcess: + # pip is not API, but a CLI -- call it like that! + call = ( + executable, '-m', 'pip', + '--python', env_dir, + *args + ) + print('+ ', *call) + res = run(call, **kwargs, cwd=this_dir, shell=False) # nosec:B603 + if res.returncode != 0: + raise RuntimeError('process failed') + return res + + +def main() -> None: + # needed to reinit partially stripped evn + rmtree(env_dir, ignore_errors=True) + + # the actual setuo + pipenv_run('install', '--deploy', '--no-site-packages') + + # uninstall things that were coming with virtualenv, that were not wanted in the first place + pip_run('uninstall', '--require-virtualenv', '--no-input', '--yes', 'wheel', 'setuptools', 'pip') + + +if __name__ == '__main__': + main() diff --git a/tests/_data/infiles/environment/via-pipenv/pyproject.toml b/tests/_data/infiles/environment/via-pipenv/pyproject.toml new file mode 100644 index 00000000..e63d70d0 --- /dev/null +++ b/tests/_data/infiles/environment/via-pipenv/pyproject.toml @@ -0,0 +1,42 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "via-pipenv" +version = "0.1.0" +description = "packages with all meta, and some deps" +license = {text="Apache-2.0 OR MIT"} +readme = "README.md" +requires-python = ">=3.8" + +# dynamic = [] # TODO + +authors = ["Your Name ", "My Name"] +maintainers = [ + "John Smith ", + "Jane Smith ", +] + +keywords = ["packaging", "pipenv", "test"] +classifiers = [ + "License :: OSI Approved :: Apache Software License", + "License :: OSI Approved :: MIT License", + "Classifier: Development Status :: 4 - Beta", + "Intended Audience :: Developers" +] + +dependencies = [ + 'toml' +] +optional-dependencies = { 'foo'=['ddt'] } + +# entry-point = {} # TODO + +# gui-scripts = {} # TODO +# scripts = {} # TODO + +[project.urls] +homepage = "https://oss.acme.org/my-project/" +repository = "https://oss.acme.org/my-project.git" +documentation = "https://oss.acme.org/my-project/docs/" +"Bug Tracker" = "https://oss.acme.org/my-project/bugs/" +"Funding" = "https://oss.acme.org/my-project/funding/" +"Change log" = "https://oss.acme.org/my-project/changelog/" diff --git a/tests/_data/infiles/environment/via-poetry/dummy.py b/tests/_data/infiles/environment/via-poetry/dummy.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/_data/infiles/environment/via-poetry/init.py b/tests/_data/infiles/environment/via-poetry/init.py new file mode 100644 index 00000000..7decdf04 --- /dev/null +++ b/tests/_data/infiles/environment/via-poetry/init.py @@ -0,0 +1,38 @@ +""" +initialize this testbed. +""" + +from os import environ +from os.path import dirname +from subprocess import CompletedProcess, run # nosec:B404 +from sys import executable + +__all__ = ['main'] + +this_dir = dirname(__file__) + + +poetry_env = environ.copy() +poetry_env['VIRTUAL_ENV'] = '' + + +def poetry_run(*args: str) -> CompletedProcess: + # Poetry is not API, but a CLI -- call it like that! + call = ( + executable, '-m', 'poetry', + *args + ) + print('+ ', *call) + res = run(call, cwd=this_dir, env=poetry_env, shell=False) # nosec:B603 + if res.returncode != 0: + raise RuntimeError('process failed') + return res + + +def main() -> None: + poetry_run('install', '--no-dev', '--sync', + '--no-interaction', '--no-ansi') + + +if __name__ == '__main__': + main() diff --git a/tests/_data/infiles/environment/via-poetry/poetry.lock b/tests/_data/infiles/environment/via-poetry/poetry.lock new file mode 100644 index 00000000..1798d72b --- /dev/null +++ b/tests/_data/infiles/environment/via-poetry/poetry.lock @@ -0,0 +1,108 @@ +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "ddt" +version = "1.7.0" +description = "Data-Driven/Decorated Tests" +optional = false +python-versions = "*" +files = [ + {file = "ddt-1.7.0-py2.py3-none-any.whl", hash = "sha256:a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114"}, + {file = "ddt-1.7.0.tar.gz", hash = "sha256:d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df"}, +] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = "*" +files = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "6d5a229d01cb18ed9d700fa82978fc270dcf6fee5187bb7b50d1f8040074445c" diff --git a/tests/_data/infiles/environment/via-poetry/poetry.toml b/tests/_data/infiles/environment/via-poetry/poetry.toml new file mode 100644 index 00000000..98ce2385 --- /dev/null +++ b/tests/_data/infiles/environment/via-poetry/poetry.toml @@ -0,0 +1,6 @@ +[virtualenvs] +in-project = true +[virtualenvs.options] +no-pip = true +no-setuptools = true +system-site-packages = false diff --git a/tests/_data/infiles/environment/via-poetry/pyproject.toml b/tests/_data/infiles/environment/via-poetry/pyproject.toml new file mode 100644 index 00000000..223517a8 --- /dev/null +++ b/tests/_data/infiles/environment/via-poetry/pyproject.toml @@ -0,0 +1,51 @@ +[tool.poetry] +## https://python-poetry.org/docs/pyproject/ +name = "via-poetry" +license = "Apache-2.0 OR MIT" +version = "0.1.0" +description = "packages with all meta, and some deps" +authors = ["Your Name ", "My Name"] +maintainers = [ + "John Smith ", + "Jane Smith ", +] +homepage = "https://oss.acme.org/my-project/" +repository = "https://oss.acme.org/my-project.git" +documentation = "https://oss.acme.org/my-project/docs/" +keywords = ["packaging", "poetry", "test"] +classifiers = [ + "License :: OSI Approved :: Apache Software License", + "License :: OSI Approved :: MIT License", + "Classifier: Development Status :: 4 - Beta", + "Intended Audience :: Developers" +] +packages = [ + { include = "dummy.py" } +] + +[tool.poetry.urls] +"Bug Tracker" = "https://oss.acme.org/my-project/bugs/" +"Funding" = "https://oss.acme.org/my-project/funding/" +"Change log" = "https://oss.acme.org/my-project/changelog/" + +[tool.poetry.dependencies] +python = "^3.8" +toml = "^0.10.2" + +[tool.poetry.group.dev.dependencies] +ddt = "^1.6.0" + +[tool.poetry.group.groupB.dependencies] +isoduration = "^20.10" + +[tool.poetry.group.groupA] +optional = true + +[tool.poetry.group.groupA.dependencies] +isoduration = "^20.11" +colorama = "^0.4.6" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/_data/infiles/environment/with-extras/init.py b/tests/_data/infiles/environment/with-extras/init.py new file mode 100644 index 00000000..c189c62e --- /dev/null +++ b/tests/_data/infiles/environment/with-extras/init.py @@ -0,0 +1,62 @@ +""" +initialize this testbed. +""" + +from os import name as os_name +from os.path import dirname, join +from subprocess import PIPE, CompletedProcess, run # nosec:B404 +from sys import argv, executable +from typing import Any +from venv import EnvBuilder + +__all__ = ['main'] + +this_dir = dirname(__file__) +env_dir = join(this_dir, '.venv') +constraint_file = join(this_dir, 'pinning.txt') + + +def pip_run(*args: str, **kwargs: Any) -> CompletedProcess: + # pip is not API, but a CLI -- call it like that! + call = ( + executable, '-m', 'pip', + '--python', env_dir, + *args + ) + print('+ ', *call) + res = run(call, **kwargs, cwd=this_dir, shell=False) # nosec:B603 + if res.returncode != 0: + raise RuntimeError('process failed') + return res + + +def pip_install(*args: str) -> None: + pip_run( + 'install', '--require-virtualenv', '--no-input', '--progress-bar=off', '--no-color', + '-c', constraint_file, # needed for reproducibility + *args + ) + + +def main() -> None: + EnvBuilder( + system_site_packages=False, + symlinks=os_name != 'nt', + with_pip=False, + ).create(env_dir) + + pip_install( + 'cyclonedx-python-lib[xml-validation,json-validation]', + # additionals for reproducibility foo + 'importlib-resources>=1.4.0', + 'pkgutil-resolve-name>=1.3.10', + 'zipp>=3.1.0', + ) + + +if __name__ == '__main__': + main() + if '--pin' in argv: + res = pip_run('freeze', '--all', '--local', stdout=PIPE) + with open(constraint_file, 'wb') as cf: + cf.write(res.stdout) diff --git a/tests/_data/infiles/environment/with-extras/pinning.txt b/tests/_data/infiles/environment/with-extras/pinning.txt new file mode 100644 index 00000000..ddddf3c3 --- /dev/null +++ b/tests/_data/infiles/environment/with-extras/pinning.txt @@ -0,0 +1,28 @@ +arrow==1.3.0 +attrs==23.1.0 +boolean.py==4.0 +cyclonedx-python-lib==6.0.0 +defusedxml==0.7.1 +fqdn==1.5.1 +idna==3.6 +importlib-resources==6.1.1 +isoduration==20.11.0 +jsonpointer==2.4 +jsonschema==4.20.0 +jsonschema-specifications==2023.11.2 +license-expression==30.2.0 +lxml==4.9.4 +packageurl-python==0.13.1 +pkgutil_resolve_name==1.3.10 +py-serializable==0.16.0 +python-dateutil==2.8.2 +referencing==0.32.0 +rfc3339-validator==0.1.4 +rfc3987==1.3.8 +rpds-py==0.15.2 +six==1.16.0 +sortedcontainers==2.4.0 +types-python-dateutil==2.8.19.14 +uri-template==1.3.0 +webcolors==1.13 +zipp==3.17.0 diff --git a/tests/_data/infiles/environment/with-extras/pyproject.toml b/tests/_data/infiles/environment/with-extras/pyproject.toml new file mode 100644 index 00000000..1420454b --- /dev/null +++ b/tests/_data/infiles/environment/with-extras/pyproject.toml @@ -0,0 +1,5 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "with-extras" +version = "0.1.0" +description = "depenndencies with extras" diff --git a/tests/_data/infiles/environment/with-urls/init.py b/tests/_data/infiles/environment/with-urls/init.py new file mode 100644 index 00000000..a19c91ad --- /dev/null +++ b/tests/_data/infiles/environment/with-urls/init.py @@ -0,0 +1,54 @@ +""" +initialize this testbed. +""" + +from os import name as os_name +from os.path import dirname, join +from subprocess import CompletedProcess, run # nosec:B404 +from sys import executable +from venv import EnvBuilder + +__all__ = ['main'] + +this_dir = dirname(__file__) +env_dir = join(this_dir, '.venv') + + +def pip_run(*args: str) -> CompletedProcess: + # pip is not API, but a CLI -- call it like that! + call = ( + executable, '-m', 'pip', + '--python', env_dir, + *args + ) + print('+ ', *call) + res = run(call, cwd=this_dir, shell=False) # nosec:B603 + if res.returncode != 0: + raise RuntimeError('process failed') + return res + + +def pip_install(*args: str) -> None: + pip_run( + 'install', '--require-virtualenv', '--no-input', '--progress-bar=off', '--no-color', + *args + ) + + +def main() -> None: + EnvBuilder( + system_site_packages=False, + symlinks=os_name != 'nt', + with_pip=False, + ).create(env_dir) + + pip_install( + 'git+https://github.com/pypa/packaging.git@23.2', + 'urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip', + 'https://files.pythonhosted.org/packages/d9/5a/' + 'e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl', + ) + + +if __name__ == '__main__': + main() diff --git a/tests/_data/infiles/environment/with-urls/pyproject.toml b/tests/_data/infiles/environment/with-urls/pyproject.toml new file mode 100644 index 00000000..9ddbb291 --- /dev/null +++ b/tests/_data/infiles/environment/with-urls/pyproject.toml @@ -0,0 +1,9 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "with-urls" +version = "0.1.0" +description = "packages from direct urls" +dependencies = [ + 'six', + 'something-that-is-not-insgalled', +] diff --git a/tests/_data/infiles/pipenv/.envrc b/tests/_data/infiles/pipenv/.envrc new file mode 100644 index 00000000..72c4d136 --- /dev/null +++ b/tests/_data/infiles/pipenv/.envrc @@ -0,0 +1,3 @@ +# https://pipenv.pypa.io/en/latest/configuration.html +export PIPENV_IGNORE_VIRTUALENVS=1 + diff --git a/tests/_data/infiles/pipenv/category-deps/Pipfile b/tests/_data/infiles/pipenv/category-deps/Pipfile new file mode 100644 index 00000000..0df0f6a2 --- /dev/null +++ b/tests/_data/infiles/pipenv/category-deps/Pipfile @@ -0,0 +1,18 @@ +[pipenv] +sort_pipfile = true + +[packages] +toml = ">=0.10.2, <0.11" + +[dev-packages] +ddt = ">=1.6.0, <2" + +# custom catrogys/groups +# see https://pipenv.pypa.io/en/latest/pipfile.html#package-category-groups + +[categoryB] +colorama = ">=0.4.3" + +[groupA] +isoduration = "==20.11.0" +colorama = ">=0.4, <0.5" diff --git a/tests/_data/infiles/pipenv/category-deps/Pipfile.lock b/tests/_data/infiles/pipenv/category-deps/Pipfile.lock new file mode 100644 index 00000000..668b5145 --- /dev/null +++ b/tests/_data/infiles/pipenv/category-deps/Pipfile.lock @@ -0,0 +1,99 @@ +{ + "_meta": { + "hash": { + "sha256": "89162a3ad75438bdbaf691099103dfacb02ee2d655ab1369b20abd1da4250457" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "categoryB": { + "colorama": { + "hashes": [ + "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", + "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==0.4.6" + } + }, + "default": { + "toml": { + "hashes": [ + "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", + "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + ], + "index": "pypi", + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.10.2" + } + }, + "develop": { + "ddt": { + "hashes": [ + "sha256:a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114", + "sha256:d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df" + ], + "index": "pypi", + "version": "==1.7.0" + } + }, + "groupA": { + "arrow": { + "hashes": [ + "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", + "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + ], + "markers": "python_version >= '3.8'", + "version": "==1.3.0" + }, + "colorama": { + "hashes": [ + "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", + "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==0.4.6" + }, + "isoduration": { + "hashes": [ + "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", + "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==20.11.0" + }, + "python-dateutil": { + "hashes": [ + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.8.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" + }, + "types-python-dateutil": { + "hashes": [ + "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b", + "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + ], + "version": "==2.8.19.14" + } + } +} diff --git a/tests/_data/infiles/pipenv/category-deps/pyproject.toml b/tests/_data/infiles/pipenv/category-deps/pyproject.toml new file mode 100644 index 00000000..75b5f16f --- /dev/null +++ b/tests/_data/infiles/pipenv/category-deps/pyproject.toml @@ -0,0 +1,5 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "category-deps" +version = "0.1.0" +description = "dependencies organized in groups" diff --git a/tests/_data/infiles/pipenv/default-and-dev/Pipfile b/tests/_data/infiles/pipenv/default-and-dev/Pipfile new file mode 100644 index 00000000..60004aaa --- /dev/null +++ b/tests/_data/infiles/pipenv/default-and-dev/Pipfile @@ -0,0 +1,9 @@ +[pipenv] +sort_pipfile = true + +[packages] +colorama = "*" +toml = ">=0.10.2, <0.11" + +[dev-packages] +isoduration = ">=20.11.0, <21" diff --git a/tests/_data/infiles/pipenv/default-and-dev/Pipfile.lock b/tests/_data/infiles/pipenv/default-and-dev/Pipfile.lock new file mode 100644 index 00000000..628dca98 --- /dev/null +++ b/tests/_data/infiles/pipenv/default-and-dev/Pipfile.lock @@ -0,0 +1,78 @@ +{ + "_meta": { + "hash": { + "sha256": "f37a8525dd6225c9497af74cff4a2c5150976733d9f3616448109c7031093349" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "colorama": { + "hashes": [ + "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", + "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==0.4.6" + }, + "toml": { + "hashes": [ + "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", + "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + ], + "index": "pypi", + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.10.2" + } + }, + "develop": { + "arrow": { + "hashes": [ + "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", + "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + ], + "markers": "python_version >= '3.8'", + "version": "==1.3.0" + }, + "isoduration": { + "hashes": [ + "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", + "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==20.11.0" + }, + "python-dateutil": { + "hashes": [ + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.8.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" + }, + "types-python-dateutil": { + "hashes": [ + "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b", + "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + ], + "version": "==2.8.19.14" + } + } +} diff --git a/tests/_data/infiles/pipenv/default-and-dev/pyproject.toml b/tests/_data/infiles/pipenv/default-and-dev/pyproject.toml new file mode 100644 index 00000000..677c602d --- /dev/null +++ b/tests/_data/infiles/pipenv/default-and-dev/pyproject.toml @@ -0,0 +1,5 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "default-and-dev" +version = "0.1.0" +description = "default and dev depenndencies" diff --git a/tests/_data/infiles/pipenv/editable-self/Pipfile b/tests/_data/infiles/pipenv/editable-self/Pipfile new file mode 100644 index 00000000..57e29d13 --- /dev/null +++ b/tests/_data/infiles/pipenv/editable-self/Pipfile @@ -0,0 +1,6 @@ +[pipenv] +sort_pipfile = true + +[packages] +# https://pipenv.pypa.io/en/latest/specifiers.html?highlight=ref#editable-dependencies-e +editable-self = {path = ".", editable = true} diff --git a/tests/_data/infiles/pipenv/editable-self/Pipfile.lock b/tests/_data/infiles/pipenv/editable-self/Pipfile.lock new file mode 100644 index 00000000..d5208fc4 --- /dev/null +++ b/tests/_data/infiles/pipenv/editable-self/Pipfile.lock @@ -0,0 +1,23 @@ +{ + "_meta": { + "hash": { + "sha256": "eeede3274cf3ff5afa3e8133d5dec39de8939885aad846fb1e5d4807898a57de" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "editable-self": { + "editable": true, + "path": "." + } + }, + "develop": {} +} diff --git a/tests/_data/infiles/pipenv/editable-self/pyproject.toml b/tests/_data/infiles/pipenv/editable-self/pyproject.toml new file mode 100644 index 00000000..3df2eb00 --- /dev/null +++ b/tests/_data/infiles/pipenv/editable-self/pyproject.toml @@ -0,0 +1,5 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "editable-self" +version = "0.1.0" +description = "install the current project as an editable" diff --git a/tests/_data/infiles/pipenv/local/Pipfile b/tests/_data/infiles/pipenv/local/Pipfile new file mode 100644 index 00000000..d3dbddb6 --- /dev/null +++ b/tests/_data/infiles/pipenv/local/Pipfile @@ -0,0 +1,9 @@ +[pipenv] +sort_pipfile = true + +[packages] +package-a = {file = "../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz"} +package-b = {file = "file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl"} +package-c = {path = "../../_helpers/local_pckages/c"} + +[dev-packages] diff --git a/tests/_data/infiles/pipenv/local/Pipfile.lock b/tests/_data/infiles/pipenv/local/Pipfile.lock new file mode 100644 index 00000000..d277960a --- /dev/null +++ b/tests/_data/infiles/pipenv/local/Pipfile.lock @@ -0,0 +1,34 @@ +{ + "_meta": { + "hash": { + "sha256": "b6b344a88a20d99f1cff5db6c549e31c5aa79bf36bb9859c3f818ef795d62850" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "package-a": { + "file": "../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz", + "hashes": [ + "sha256:3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + ] + }, + "package-b": { + "file": "file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl", + "hashes": [ + "sha256:4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + ] + }, + "package-c": { + "path": "../../_helpers/local_pckages/c" + } + }, + "develop": {} +} diff --git a/tests/_data/infiles/pipenv/local/pyproject.toml b/tests/_data/infiles/pipenv/local/pyproject.toml new file mode 100644 index 00000000..6291093d --- /dev/null +++ b/tests/_data/infiles/pipenv/local/pyproject.toml @@ -0,0 +1,5 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "local" +version = "0.1.0" +description = "packages from local paths" diff --git a/tests/_data/infiles/pipenv/no-deps/Pipfile b/tests/_data/infiles/pipenv/no-deps/Pipfile new file mode 100644 index 00000000..ddc8b05b --- /dev/null +++ b/tests/_data/infiles/pipenv/no-deps/Pipfile @@ -0,0 +1,6 @@ +[pipenv] +sort_pipfile = true + +[packages] + +[dev-packages] diff --git a/tests/_data/infiles/pipenv/no-deps/Pipfile.lock b/tests/_data/infiles/pipenv/no-deps/Pipfile.lock new file mode 100644 index 00000000..d2c2cba4 --- /dev/null +++ b/tests/_data/infiles/pipenv/no-deps/Pipfile.lock @@ -0,0 +1,18 @@ +{ + "_meta": { + "hash": { + "sha256": "ebffa69a1fa192d1cef7cb42ad79231ca976565c5ce371a70160b3048d3cbc06" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": {}, + "develop": {} +} diff --git a/tests/_data/infiles/pipenv/no-deps/pyproject.toml b/tests/_data/infiles/pipenv/no-deps/pyproject.toml new file mode 100644 index 00000000..e0dfd501 --- /dev/null +++ b/tests/_data/infiles/pipenv/no-deps/pyproject.toml @@ -0,0 +1,40 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "no-deps" +version = "0.1.0" +description = "packages with all meta, but no deps" +license = {text="Apache-2.0 OR MIT"} +readme = "README.md" +requires-python = ">=3.8" + +# dynamic = [] # TODO + +authors = ["Your Name ", "My Name"] +maintainers = [ + "John Smith ", + "Jane Smith ", +] + +keywords = ["packaging", "pipenv", "test"] +classifiers = [ + "License :: OSI Approved :: Apache Software License", + "License :: OSI Approved :: MIT License", + "Classifier: Development Status :: 4 - Beta", + "Intended Audience :: Developers" +] + +# dependencies = [] # TODO +# optional-dependencies = [] # TODO + +# entry-point = {} # TODO + +# gui-scripts = {} # TODO +# scripts = {} # TODO + +[project.urls] +homepage = "https://oss.acme.org/my-project/" +repository = "https://oss.acme.org/my-project.git" +documentation = "https://oss.acme.org/my-project/docs/" +"Bug Tracker" = "https://oss.acme.org/my-project/bugs/" +"Funding" = "https://oss.acme.org/my-project/funding/" +"Change log" = "https://oss.acme.org/my-project/changelog/" diff --git a/tests/_data/infiles/pipenv/private-packages/Pipfile b/tests/_data/infiles/pipenv/private-packages/Pipfile new file mode 100644 index 00000000..d77ae7a2 --- /dev/null +++ b/tests/_data/infiles/pipenv/private-packages/Pipfile @@ -0,0 +1,24 @@ +[pipenv] +sort_pipfile = true +install_search_all_sources = true + +# see https://pipenv.pypa.io/en/latest/indexes.html#specifying-package-indexes +# run the `//tests/_data/infiles/_helpers/pypi-proxy.py` to setup a PyPI proxy +# call with `pipenv ... --pypi-mirror http://pysrc2.acme.org:8080/simple/ ...` + +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[[source]] +url = "http://pysrc1.acme.org:8080/simple/" +verify_ssl = false +name = "pysrc1.acme.org" + +[packages] +numpy = {version="*", index="pypi"} +six = "*" +toml = {version = "*", index="pysrc1.acme.org"} + +[dev-packages] diff --git a/tests/_data/infiles/pipenv/private-packages/Pipfile.lock b/tests/_data/infiles/pipenv/private-packages/Pipfile.lock new file mode 100644 index 00000000..38595ec4 --- /dev/null +++ b/tests/_data/infiles/pipenv/private-packages/Pipfile.lock @@ -0,0 +1,50 @@ +{ + "_meta": { + "hash": { + "sha256": "4fe98ad8f0ec8924817a18f60955c867bef55a6fa0075a21062543f56af56de7" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + }, + { + "name": "pysrc1.acme.org", + "url": "http://pysrc1.acme.org:8080/simple/", + "verify_ssl": false + } + ] + }, + "default": { + "numpy": { + "hashes": [ + "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b", + "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==1.26.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" + }, + "toml": { + "hashes": [ + "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", + "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + ], + "index": "pysrc1.acme.org", + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.10.2" + } + }, + "develop": {} +} diff --git a/tests/_data/infiles/pipenv/private-packages/pyproject.toml b/tests/_data/infiles/pipenv/private-packages/pyproject.toml new file mode 100644 index 00000000..caf07823 --- /dev/null +++ b/tests/_data/infiles/pipenv/private-packages/pyproject.toml @@ -0,0 +1,5 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "private-packges" +version = "0.1.0" +description = "packages from aternative package repositories" diff --git a/tests/_data/infiles/pipenv/with-extras/Pipfile b/tests/_data/infiles/pipenv/with-extras/Pipfile new file mode 100644 index 00000000..b779fbec --- /dev/null +++ b/tests/_data/infiles/pipenv/with-extras/Pipfile @@ -0,0 +1,7 @@ +[pipenv] +sort_pipfile = true + +[packages] +cyclonedx-python-lib = {version = "==5.1.1", extras = ["xml-validation", "json-validation"]} + +[dev-packages] diff --git a/tests/_data/infiles/pipenv/with-extras/Pipfile.lock b/tests/_data/infiles/pipenv/with-extras/Pipfile.lock new file mode 100644 index 00000000..4c2b6f13 --- /dev/null +++ b/tests/_data/infiles/pipenv/with-extras/Pipfile.lock @@ -0,0 +1,400 @@ +{ + "_meta": { + "hash": { + "sha256": "7fc80a7a63ba5f91c6df003ab8001fc91ef79d9669d32a2159d52cad351e52cf" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "arrow": { + "hashes": [ + "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", + "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + ], + "markers": "python_version >= '3.8'", + "version": "==1.3.0" + }, + "attrs": { + "hashes": [ + "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", + "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + ], + "markers": "python_version >= '3.7'", + "version": "==23.1.0" + }, + "boolean.py": { + "hashes": [ + "sha256:17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4", + "sha256:2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd" + ], + "version": "==4.0" + }, + "cyclonedx-python-lib": { + "extras": [ + "json-validation", + "xml-validation" + ], + "hashes": [ + "sha256:215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6", + "sha256:2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3" + ], + "markers": "python_version >= '3.8' and python_version < '4.0'", + "version": "==5.1.1" + }, + "defusedxml": { + "hashes": [ + "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", + "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.7.1" + }, + "fqdn": { + "hashes": [ + "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", + "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014" + ], + "version": "==1.5.1" + }, + "idna": { + "hashes": [ + "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", + "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + ], + "version": "==3.6" + }, + "isoduration": { + "hashes": [ + "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", + "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + ], + "version": "==20.11.0" + }, + "jsonpointer": { + "hashes": [ + "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a", + "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88" + ], + "version": "==2.4" + }, + "jsonschema": { + "extras": [ + "format" + ], + "hashes": [ + "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa", + "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3" + ], + "version": "==4.20.0" + }, + "jsonschema-specifications": { + "hashes": [ + "sha256:9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8", + "sha256:e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93" + ], + "markers": "python_version >= '3.8'", + "version": "==2023.11.2" + }, + "license-expression": { + "hashes": [ + "sha256:1a7dc2bb2d09cdc983d072e4f9adc787e107e09def84cbb3919baaaf4f8e6fa1", + "sha256:599928edd995c43fc335e0af342076144dc71cb858afa1ed9c1c30c4e81794f5" + ], + "markers": "python_version >= '3.7'", + "version": "==30.2.0" + }, + "lxml": { + "hashes": [ + "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3", + "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d", + "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a", + "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120", + "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305", + "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287", + "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23", + "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52", + "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f", + "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4", + "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584", + "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f", + "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693", + "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef", + "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5", + "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02", + "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc", + "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7", + "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da", + "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a", + "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40", + "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8", + "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd", + "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601", + "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c", + "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be", + "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2", + "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c", + "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129", + "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc", + "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2", + "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1", + "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7", + "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d", + "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477", + "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d", + "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e", + "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7", + "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2", + "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574", + "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf", + "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b", + "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98", + "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12", + "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42", + "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35", + "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d", + "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce", + "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d", + "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f", + "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db", + "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4", + "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694", + "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac", + "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2", + "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7", + "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96", + "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d", + "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b", + "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a", + "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13", + "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340", + "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6", + "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458", + "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c", + "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c", + "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9", + "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432", + "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991", + "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69", + "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf", + "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb", + "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b", + "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833", + "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76", + "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85", + "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e", + "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50", + "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8", + "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4", + "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b", + "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5", + "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190", + "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7", + "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa", + "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0", + "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9", + "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0", + "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b", + "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5", + "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7", + "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4" + ], + "version": "==4.9.3" + }, + "packageurl-python": { + "hashes": [ + "sha256:01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471", + "sha256:799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84" + ], + "markers": "python_version >= '3.7'", + "version": "==0.11.2" + }, + "py-serializable": { + "hashes": [ + "sha256:8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771", + "sha256:d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2" + ], + "markers": "python_version >= '3.7' and python_version < '4.0'", + "version": "==0.15.0" + }, + "python-dateutil": { + "hashes": [ + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==2.8.2" + }, + "referencing": { + "hashes": [ + "sha256:81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec", + "sha256:c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d" + ], + "markers": "python_version >= '3.8'", + "version": "==0.31.1" + }, + "rfc3339-validator": { + "hashes": [ + "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", + "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa" + ], + "version": "==0.1.4" + }, + "rfc3987": { + "hashes": [ + "sha256:10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53", + "sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733" + ], + "version": "==1.3.8" + }, + "rpds-py": { + "hashes": [ + "sha256:06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276", + "sha256:12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f", + "sha256:15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60", + "sha256:188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0", + "sha256:1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d", + "sha256:244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3", + "sha256:25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2", + "sha256:25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9", + "sha256:29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb", + "sha256:2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b", + "sha256:2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a", + "sha256:2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d", + "sha256:2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1", + "sha256:31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7", + "sha256:35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9", + "sha256:38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4", + "sha256:38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53", + "sha256:3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea", + "sha256:3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66", + "sha256:3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190", + "sha256:46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3", + "sha256:4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12", + "sha256:4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824", + "sha256:4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27", + "sha256:4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e", + "sha256:4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8", + "sha256:51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8", + "sha256:530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914", + "sha256:5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211", + "sha256:5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab", + "sha256:5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468", + "sha256:5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3", + "sha256:5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff", + "sha256:5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c", + "sha256:603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d", + "sha256:61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e", + "sha256:61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a", + "sha256:65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e", + "sha256:67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a", + "sha256:6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0", + "sha256:6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1", + "sha256:6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3", + "sha256:729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42", + "sha256:751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452", + "sha256:76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198", + "sha256:79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa", + "sha256:7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b", + "sha256:7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4", + "sha256:80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1", + "sha256:87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad", + "sha256:881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c", + "sha256:8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381", + "sha256:8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0", + "sha256:8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2", + "sha256:96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3", + "sha256:96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31", + "sha256:97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74", + "sha256:9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6", + "sha256:9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff", + "sha256:a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b", + "sha256:aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca", + "sha256:ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd", + "sha256:ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a", + "sha256:aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568", + "sha256:b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1", + "sha256:b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c", + "sha256:b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad", + "sha256:b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7", + "sha256:b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d", + "sha256:b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658", + "sha256:bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1", + "sha256:bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64", + "sha256:bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815", + "sha256:c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1", + "sha256:c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac", + "sha256:c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07", + "sha256:c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e", + "sha256:c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee", + "sha256:d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45", + "sha256:d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc", + "sha256:d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41", + "sha256:d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2", + "sha256:d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083", + "sha256:d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e", + "sha256:db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266", + "sha256:ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141", + "sha256:e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b", + "sha256:e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933", + "sha256:e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21", + "sha256:eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0", + "sha256:ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7", + "sha256:ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc", + "sha256:efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba", + "sha256:f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a", + "sha256:f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57", + "sha256:f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2", + "sha256:f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007", + "sha256:f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f", + "sha256:fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f" + ], + "markers": "python_version >= '3.8'", + "version": "==0.13.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==1.16.0" + }, + "sortedcontainers": { + "hashes": [ + "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", + "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" + ], + "version": "==2.4.0" + }, + "types-python-dateutil": { + "hashes": [ + "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b", + "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + ], + "version": "==2.8.19.14" + }, + "uri-template": { + "hashes": [ + "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", + "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363" + ], + "version": "==1.3.0" + }, + "webcolors": { + "hashes": [ + "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf", + "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a" + ], + "version": "==1.13" + } + }, + "develop": {} +} diff --git a/tests/_data/infiles/pipenv/with-extras/pyproject.toml b/tests/_data/infiles/pipenv/with-extras/pyproject.toml new file mode 100644 index 00000000..1420454b --- /dev/null +++ b/tests/_data/infiles/pipenv/with-extras/pyproject.toml @@ -0,0 +1,5 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "with-extras" +version = "0.1.0" +description = "depenndencies with extras" diff --git a/tests/_data/infiles/pipenv/with-urls/Pipfile b/tests/_data/infiles/pipenv/with-urls/Pipfile new file mode 100644 index 00000000..4c083118 --- /dev/null +++ b/tests/_data/infiles/pipenv/with-urls/Pipfile @@ -0,0 +1,12 @@ +[pipenv] +sort_pipfile = true + +[packages] +# numpy = {file = "https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz"} +pillow = {ref = "10.1.0", git = "git+https://github.com/python-pillow/Pillow.git"} +six = {ref = "1.16.0", git = "git+ssh://git@github.com/benjaminp/six.git"} +# wxpython-phoenix = {file = "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5624+e95b6c8b-cp311-cp311-win32.whl", markers="sys_platform == 'win32'"} +urllib3 = {file = "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip"} +requests = {git = "git+https://github.com/requests/requests.git#egg=requests"} + +[dev-packages] diff --git a/tests/_data/infiles/pipenv/with-urls/Pipfile.lock b/tests/_data/infiles/pipenv/with-urls/Pipfile.lock new file mode 100644 index 00000000..a14c3b7d --- /dev/null +++ b/tests/_data/infiles/pipenv/with-urls/Pipfile.lock @@ -0,0 +1,150 @@ +{ + "_meta": { + "hash": { + "sha256": "7da942b1b25618d83c715727e11e1bd3602acc0aff377dc95d80326e9d77fa5a" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "certifi": { + "hashes": [ + "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1", + "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" + ], + "markers": "python_version >= '3.6'", + "version": "==2023.11.17" + }, + "charset-normalizer": { + "hashes": [ + "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", + "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", + "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", + "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", + "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", + "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", + "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", + "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", + "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", + "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", + "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", + "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", + "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", + "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", + "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", + "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", + "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", + "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", + "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", + "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", + "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", + "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", + "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", + "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", + "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", + "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", + "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", + "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", + "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", + "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", + "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", + "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", + "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", + "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", + "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", + "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", + "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", + "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", + "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", + "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", + "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", + "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", + "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", + "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", + "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", + "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", + "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", + "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", + "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", + "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", + "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", + "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", + "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", + "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", + "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", + "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", + "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", + "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", + "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", + "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", + "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", + "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", + "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", + "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", + "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", + "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", + "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", + "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", + "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", + "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", + "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", + "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", + "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", + "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", + "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", + "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", + "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", + "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", + "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", + "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", + "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", + "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", + "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", + "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", + "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", + "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", + "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", + "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", + "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", + "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.3.2" + }, + "idna": { + "hashes": [ + "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", + "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + ], + "markers": "python_version >= '3.5'", + "version": "==3.6" + }, + "pillow": { + "git": "git+https://github.com/python-pillow/Pillow.git", + "markers": "python_version >= '3.8'", + "ref": "da59ad000d1405eaecd557175e29083a87d19f7c" + }, + "requests": { + "git": "git+https://github.com/requests/requests.git#egg=requests", + "markers": "python_version >= '3.7'", + "ref": "a25fde6989f8df5c3d823bc9f2e2fc24aa71f375" + }, + "six": { + "git": "git+ssh://git@github.com/benjaminp/six.git", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "ref": "65486e4383f9f411da95937451205d3c7b61b9e1" + }, + "urllib3": { + "file": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "markers": "python_version >= '3.8'" + } + }, + "develop": {} +} diff --git a/tests/_data/infiles/pipenv/with-urls/pyproject.toml b/tests/_data/infiles/pipenv/with-urls/pyproject.toml new file mode 100644 index 00000000..39464682 --- /dev/null +++ b/tests/_data/infiles/pipenv/with-urls/pyproject.toml @@ -0,0 +1,5 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "with-urls" +version = "0.1.0" +description = "packages from direct urls" diff --git a/tests/_data/infiles/poetry/group-deps/lock11/poetry.lock b/tests/_data/infiles/poetry/group-deps/lock11/poetry.lock new file mode 100644 index 00000000..bece08e3 --- /dev/null +++ b/tests/_data/infiles/poetry/group-deps/lock11/poetry.lock @@ -0,0 +1,116 @@ +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +category = "dev" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" + +[[package]] +name = "ddt" +version = "1.7.0" +description = "Data-Driven/Decorated Tests" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +category = "dev" +optional = false +python-versions = "*" + +[metadata] +lock-version = "1.1" +python-versions = "^3.11" +content-hash = "9856e62626af9542f9f60a7d4cc6596ad5a5cfd475f9a37369735d42c5c7c2dc" + +[metadata.files] +arrow = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +ddt = [ + {file = "ddt-1.7.0-py2.py3-none-any.whl", hash = "sha256:a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114"}, + {file = "ddt-1.7.0.tar.gz", hash = "sha256:d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df"}, +] +isoduration = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] +types-python-dateutil = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] diff --git a/tests/_data/infiles/poetry/group-deps/lock11/pyproject.toml b/tests/_data/infiles/poetry/group-deps/lock11/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/group-deps/lock11/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/group-deps/lock20/poetry.lock b/tests/_data/infiles/poetry/group-deps/lock20/poetry.lock new file mode 100644 index 00000000..775d78a0 --- /dev/null +++ b/tests/_data/infiles/poetry/group-deps/lock20/poetry.lock @@ -0,0 +1,108 @@ +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "ddt" +version = "1.7.0" +description = "Data-Driven/Decorated Tests" +optional = false +python-versions = "*" +files = [ + {file = "ddt-1.7.0-py2.py3-none-any.whl", hash = "sha256:a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114"}, + {file = "ddt-1.7.0.tar.gz", hash = "sha256:d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df"}, +] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = "*" +files = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.11" +content-hash = "9856e62626af9542f9f60a7d4cc6596ad5a5cfd475f9a37369735d42c5c7c2dc" diff --git a/tests/_data/infiles/poetry/group-deps/lock20/pyproject.toml b/tests/_data/infiles/poetry/group-deps/lock20/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/group-deps/lock20/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/group-deps/pyproject-proto.toml b/tests/_data/infiles/poetry/group-deps/pyproject-proto.toml new file mode 100644 index 00000000..b1611567 --- /dev/null +++ b/tests/_data/infiles/poetry/group-deps/pyproject-proto.toml @@ -0,0 +1,30 @@ +[tool.poetry] +name = "group-deps" +version = "0.1.0" +description = "dependencies organized in groups" +authors = ["Your Name "] +readme = "README.md" + +# see https://python-poetry.org/docs/master/managing-dependencies/#dependency-groups +# This group notation is preferred since Poetry 1.2.0 and not usable in earlier versions. + +[tool.poetry.dependencies] +python = "^3.11" +toml = "^0.10.2" + +[tool.poetry.group.dev.dependencies] +ddt = "^1.6.0" + +[tool.poetry.group.groupB.dependencies] +isoduration = "^20.11.0" + +[tool.poetry.group.groupA] +optional = true + +[tool.poetry.group.groupA.dependencies] +isoduration = "^20.11.0" +colorama = "^0.4.6" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/_data/infiles/poetry/local/lock10/poetry.lock b/tests/_data/infiles/poetry/local/lock10/poetry.lock new file mode 100644 index 00000000..1896ec6a --- /dev/null +++ b/tests/_data/infiles/poetry/local/lock10/poetry.lock @@ -0,0 +1,36 @@ +[[package]] +name = "package-a" +version = "23.42" +description = "some package A" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.source] +type = "file" +url = "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + +[[package]] +name = "package-b" +version = "23.42" +description = "some package B" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.source] +type = "file" +url = "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + +[metadata] +lock-version = "1.1" +python-versions = "^3.8" +content-hash = "734048232bb6dda94b2a854173814b14cb126075501e789ccddc26b4a4b31c5e" + +[metadata.files] +package-a = [ + {file = "package-a-23.42.tar.gz", hash = "sha256:3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592"}, +] +package-b = [ + {file = "package_b-23.42-py3-none-any.whl", hash = "sha256:4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602"}, +] diff --git a/tests/_data/infiles/poetry/local/lock10/pyproject.toml b/tests/_data/infiles/poetry/local/lock10/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/local/lock10/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/local/lock11/poetry.lock b/tests/_data/infiles/poetry/local/lock11/poetry.lock new file mode 100644 index 00000000..60bdd06c --- /dev/null +++ b/tests/_data/infiles/poetry/local/lock11/poetry.lock @@ -0,0 +1,50 @@ +[[package]] +name = "package-a" +version = "23.42" +description = "some package A" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.source] +type = "file" +url = "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + +[[package]] +name = "package-b" +version = "23.42" +description = "some package B" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.source] +type = "file" +url = "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + +[[package]] +name = "package-c" +version = "23.42" +description = "some package C" +category = "main" +optional = false +python-versions = ">=3.8" +develop = false + +[package.source] +type = "directory" +url = "../../../_helpers/local_pckages/c" + +[metadata] +lock-version = "1.1" +python-versions = "^3.8" +content-hash = "eb023411cfd4933d02aaa1b3512ce9cfe90072a81c3f580982b6da501da2cec2" + +[metadata.files] +package-a = [ + {file = "package-a-23.42.tar.gz", hash = "sha256:3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592"}, +] +package-b = [ + {file = "package_b-23.42-py3-none-any.whl", hash = "sha256:4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602"}, +] +package-c = [] diff --git a/tests/_data/infiles/poetry/local/lock11/pyproject.toml b/tests/_data/infiles/poetry/local/lock11/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/local/lock11/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/local/lock20/poetry.lock b/tests/_data/infiles/poetry/local/lock20/poetry.lock new file mode 100644 index 00000000..71dc800d --- /dev/null +++ b/tests/_data/infiles/poetry/local/lock20/poetry.lock @@ -0,0 +1,47 @@ +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. + +[[package]] +name = "package-a" +version = "23.42" +description = "some package A" +optional = false +python-versions = ">=3.8" +files = [ + {file = "package-a-23.42.tar.gz", hash = "sha256:3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592"}, +] + +[package.source] +type = "file" +url = "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + +[[package]] +name = "package-b" +version = "23.42" +description = "some package B" +optional = false +python-versions = ">=3.8" +files = [ + {file = "package_b-23.42-py3-none-any.whl", hash = "sha256:4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602"}, +] + +[package.source] +type = "file" +url = "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + +[[package]] +name = "package-c" +version = "23.42" +description = "some package C" +optional = false +python-versions = ">=3.8" +files = [] +develop = false + +[package.source] +type = "directory" +url = "../../../_helpers/local_pckages/c" + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "eb023411cfd4933d02aaa1b3512ce9cfe90072a81c3f580982b6da501da2cec2" diff --git a/tests/_data/infiles/poetry/local/lock20/pyproject.toml b/tests/_data/infiles/poetry/local/lock20/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/local/lock20/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/local/pyproject-proto.toml b/tests/_data/infiles/poetry/local/pyproject-proto.toml new file mode 100644 index 00000000..89060cd8 --- /dev/null +++ b/tests/_data/infiles/poetry/local/pyproject-proto.toml @@ -0,0 +1,26 @@ +[tool.poetry] +name = "local" +version = "0.1.0" +description = "packages from local paths" +authors = ["Your Name "] + + +# You can specify a package in the following forms: +# [...] +# - A file path (../my-package/my-package.whl) +# - A directory (../my-package/) +# [...] + + +[tool.poetry.dependencies] +python = "^3.8" +package-a = {path = "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz"} +package-b = {path = "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl"} +# package-c not in poetry v1.0 available +package-c = {path = "../../../_helpers/local_pckages/c"} + + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/_data/infiles/poetry/main-and-dev/lock10/poetry.lock b/tests/_data/infiles/poetry/main-and-dev/lock10/poetry.lock new file mode 100644 index 00000000..3ac03a5f --- /dev/null +++ b/tests/_data/infiles/poetry/main-and-dev/lock10/poetry.lock @@ -0,0 +1,95 @@ +[[package]] +category = "dev" +description = "Better dates & times for Python" +name = "arrow" +optional = false +python-versions = ">=3.8" +version = "1.3.0" + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (2021.1)", "simplejson (>=3.0.0,<4.0.0)"] + +[[package]] +category = "main" +description = "Cross-platform colored terminal text." +name = "colorama" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +version = "0.4.6" + +[[package]] +category = "dev" +description = "Operations with ISO 8601 durations" +name = "isoduration" +optional = false +python-versions = ">=3.7" +version = "20.11.0" + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +category = "dev" +description = "Extensions to the standard Python datetime module" +name = "python-dateutil" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +version = "2.8.2" + +[package.dependencies] +six = ">=1.5" + +[[package]] +category = "dev" +description = "Python 2 and 3 compatibility utilities" +name = "six" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "1.16.0" + +[[package]] +category = "main" +description = "Python Library for Tom's Obvious, Minimal Language" +name = "toml" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +version = "0.10.2" + +[[package]] +category = "dev" +description = "Typing stubs for python-dateutil" +name = "types-python-dateutil" +optional = false +python-versions = "*" +version = "2.8.19.14" + +[metadata] +content-hash = "690f86686bbb7dc2130d29a2336f68f1e28d3031b365a45f76e79b87f6ddef94" +lock-version = "1.0" +python-versions = "^3.8" + +[metadata.files] +arrow = [] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +isoduration = [] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] +types-python-dateutil = [] diff --git a/tests/_data/infiles/poetry/main-and-dev/lock10/pyproject.toml b/tests/_data/infiles/poetry/main-and-dev/lock10/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/main-and-dev/lock10/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/main-and-dev/lock11/poetry.lock b/tests/_data/infiles/poetry/main-and-dev/lock11/poetry.lock new file mode 100644 index 00000000..0e8d8fff --- /dev/null +++ b/tests/_data/infiles/poetry/main-and-dev/lock11/poetry.lock @@ -0,0 +1,104 @@ +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +category = "dev" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +category = "dev" +optional = false +python-versions = "*" + +[metadata] +lock-version = "1.1" +python-versions = "^3.8" +content-hash = "690f86686bbb7dc2130d29a2336f68f1e28d3031b365a45f76e79b87f6ddef94" + +[metadata.files] +arrow = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +isoduration = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] +types-python-dateutil = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] diff --git a/tests/_data/infiles/poetry/main-and-dev/lock11/pyproject.toml b/tests/_data/infiles/poetry/main-and-dev/lock11/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/main-and-dev/lock11/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/main-and-dev/lock20/poetry.lock b/tests/_data/infiles/poetry/main-and-dev/lock20/poetry.lock new file mode 100644 index 00000000..f19f45e6 --- /dev/null +++ b/tests/_data/infiles/poetry/main-and-dev/lock20/poetry.lock @@ -0,0 +1,97 @@ +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = "*" +files = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "690f86686bbb7dc2130d29a2336f68f1e28d3031b365a45f76e79b87f6ddef94" diff --git a/tests/_data/infiles/poetry/main-and-dev/lock20/pyproject.toml b/tests/_data/infiles/poetry/main-and-dev/lock20/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/main-and-dev/lock20/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/main-and-dev/pyproject-proto.toml b/tests/_data/infiles/poetry/main-and-dev/pyproject-proto.toml new file mode 100644 index 00000000..f075dac7 --- /dev/null +++ b/tests/_data/infiles/poetry/main-and-dev/pyproject-proto.toml @@ -0,0 +1,25 @@ +[tool.poetry] +name = "main-and-dev" +version = "0.1.0" +description = "main and dev depenndencies" +authors = ["Your Name "] +readme = "README.md" + + + +[tool.poetry.dependencies] +python = "^3.8" +toml = "^0.10.2" +colorama = "*" + +# > This group notation is preferred since Poetry 1.2.0 and not usable in earlier versions. +# > For backwards compatibility with older versions of Poetry, any dependency declared in the dev-dependencies +# > section will automatically be added to the dev group. + +[tool.poetry.dev-dependencies] +isoduration = "^20.11.0" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/_data/infiles/poetry/no-deps/lock20/poetry.lock b/tests/_data/infiles/poetry/no-deps/lock20/poetry.lock new file mode 100644 index 00000000..da22ac15 --- /dev/null +++ b/tests/_data/infiles/poetry/no-deps/lock20/poetry.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. +package = [] + +[metadata] +lock-version = "2.0" +python-versions = "*" +content-hash = "29c1d764c213c1f51fb6bcfa0fe43f351248fae4d4d20a20ade46059d3b7be05" diff --git a/tests/_data/infiles/poetry/no-deps/lock20/pyproject.toml b/tests/_data/infiles/poetry/no-deps/lock20/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/no-deps/lock20/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/no-deps/pyproject-proto.toml b/tests/_data/infiles/poetry/no-deps/pyproject-proto.toml new file mode 100644 index 00000000..4e07a1c4 --- /dev/null +++ b/tests/_data/infiles/poetry/no-deps/pyproject-proto.toml @@ -0,0 +1,34 @@ +[tool.poetry] +## https://python-poetry.org/docs/pyproject/ +name = "no-deps" +license = "Apache-2.0 OR MIT" +version = "0.1.0" +description = "packages with all meta, but no deps" +authors = ["Your Name ", "My Name"] +maintainers = [ + "John Smith ", + "Jane Smith ", +] +homepage = "https://oss.acme.org/my-project/" +repository = "https://oss.acme.org/my-project.git" +documentation = "https://oss.acme.org/my-project/docs/" +keywords = ["packaging", "poetry", "test"] +classifiers = [ + "License :: OSI Approved :: Apache Software License", + "License :: OSI Approved :: MIT License", + "Classifier: Development Status :: 4 - Beta", + "Intended Audience :: Developers" +] + +[tool.poetry.urls] +"Bug Tracker" = "https://oss.acme.org/my-project/bugs/" +"Funding" = "https://oss.acme.org/my-project/funding/" +"Change log" = "https://oss.acme.org/my-project/changelog/" + +[tool.poetry.dependencies] +python = "*" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/_data/infiles/poetry/private-packges/lock10/poetry.lock b/tests/_data/infiles/poetry/private-packges/lock10/poetry.lock new file mode 100644 index 00000000..e863ce46 --- /dev/null +++ b/tests/_data/infiles/poetry/private-packges/lock10/poetry.lock @@ -0,0 +1,40 @@ +[[package]] +category = "main" +description = "Cross-platform colored terminal text." +name = "colorama" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +version = "0.4.6" + +[package.source] +reference = "default-src" +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" + +[[package]] +category = "main" +description = "Python Library for Tom's Obvious, Minimal Language" +name = "toml" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +version = "0.10.2" + +[package.source] +reference = "explicit-src" +type = "legacy" +url = "http://pysrc2.acme.org:8080/simple" + +[metadata] +content-hash = "afe83fd12c41d1b471fc48c0c9fbd8c62e793910c4da1ac852437f5adb8e2622" +lock-version = "1.0" +python-versions = ">=3.9,<3.13" + +[metadata.files] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] diff --git a/tests/_data/infiles/poetry/private-packges/lock10/pyproject.toml b/tests/_data/infiles/poetry/private-packges/lock10/pyproject.toml new file mode 100644 index 00000000..290dabb8 --- /dev/null +++ b/tests/_data/infiles/poetry/private-packges/lock10/pyproject.toml @@ -0,0 +1,47 @@ +[tool.poetry] +name = "private-packges" +version = "0.1.0" +description = "packages from aternative package repositories" +authors = ["Your Name "] + + +# see https://github.com/python-poetry/poetry/blob/1.1/docs/repositories.md +# run the `pypi-proxy.py` to setup a pypi proxy + +[[tool.poetry.source]] +name = "PyPI" +url = "https://pypi.org/simple/" +default = false +secondary = false + +[[tool.poetry.source]] +name = "default-src" +url = "http://pysrc1.acme.org:8080/simple/" +default = true +secondary = false + + +[[tool.poetry.source]] +name = "secondary-src" +url = "http://pysrc4.acme.org:8080/simple/" +default = false +secondary = true + + +[[tool.poetry.source]] +name = "explicit-src" +url = "http://pysrc2.acme.org:8080/simple/" +default = false +secondary = true + + + +[tool.poetry.dependencies] +python = ">=3.9,<3.13" +toml = {version = "^0.10.2", source = "explicit-src"} +colorama = "^0.4.6" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/_data/infiles/poetry/private-packges/lock11/poetry.lock b/tests/_data/infiles/poetry/private-packges/lock11/poetry.lock new file mode 100644 index 00000000..d6f50d3b --- /dev/null +++ b/tests/_data/infiles/poetry/private-packges/lock11/poetry.lock @@ -0,0 +1,291 @@ +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[[package]] +name = "importlib-metadata" +version = "6.8.0" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[[package]] +name = "jax" +version = "0.4.20" +description = "Differentiate, compile, and transform Numpy code." +category = "main" +optional = false +python-versions = ">=3.9" + +[package.dependencies] +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +ml-dtypes = ">=0.2.0" +numpy = [ + {version = ">=1.22", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, +] +opt-einsum = "*" +scipy = [ + {version = ">=1.9", markers = "python_version < \"3.12\""}, + {version = ">=1.11.1", markers = "python_version >= \"3.12\""}, +] + +[package.extras] +australis = ["protobuf (>=3.13,<4)"] +ci = ["jaxlib (==0.4.19)"] +cpu = ["jaxlib (==0.4.20)"] +cuda = ["jaxlib (==0.4.20+cuda11.cudnn86)"] +cuda11-cudnn86 = ["jaxlib (==0.4.20+cuda11.cudnn86)"] +cuda11-local = ["jaxlib (==0.4.20+cuda11.cudnn86)"] +cuda11-pip = ["jaxlib (==0.4.20+cuda11.cudnn86)", "nvidia-cublas-cu11 (>=11.11)", "nvidia-cuda-cupti-cu11 (>=11.8)", "nvidia-cuda-nvcc-cu11 (>=11.8)", "nvidia-cuda-runtime-cu11 (>=11.8)", "nvidia-cudnn-cu11 (>=8.8)", "nvidia-cufft-cu11 (>=10.9)", "nvidia-cusolver-cu11 (>=11.4)", "nvidia-cusparse-cu11 (>=11.7)", "nvidia-nccl-cu11 (>=2.18.3)"] +cuda12-local = ["jaxlib (==0.4.20+cuda12.cudnn89)"] +cuda12-pip = ["jaxlib (==0.4.20+cuda12.cudnn89)", "nvidia-cublas-cu12 (>=12.2.5.6)", "nvidia-cuda-cupti-cu12 (>=12.2.142)", "nvidia-cuda-nvcc-cu12 (>=12.2.140)", "nvidia-cuda-runtime-cu12 (>=12.2.140)", "nvidia-cudnn-cu12 (>=8.9)", "nvidia-cufft-cu12 (>=11.0.8.103)", "nvidia-cusolver-cu12 (>=11.5.2)", "nvidia-cusparse-cu12 (>=12.1.2.141)", "nvidia-nccl-cu12 (>=2.18.3)", "nvidia-nvjitlink-cu12 (>=12.2)"] +minimum-jaxlib = ["jaxlib (==0.4.14)"] +tpu = ["jaxlib (==0.4.20)", "libtpu-nightly (==0.1.dev20231102)", "requests"] + +[package.source] +type = "legacy" +url = "https://storage.googleapis.com/jax-releases/jax_releases.html" +reference = "jax-src" + +[[package]] +name = "ml-dtypes" +version = "0.3.1" +description = "" +category = "main" +optional = false +python-versions = ">=3.9" + +[package.dependencies] +numpy = [ + {version = ">1.20", markers = "python_version <= \"3.9\""}, + {version = ">=1.23.3", markers = "python_version > \"3.10\""}, + {version = ">=1.21.2", markers = "python_version > \"3.9\""}, +] + +[package.extras] +dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[[package]] +name = "numpy" +version = "1.26.1" +description = "Fundamental package for array computing in Python" +category = "main" +optional = false +python-versions = ">=3.9" + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[[package]] +name = "opt-einsum" +version = "3.3.0" +description = "Optimizing numpys einsum function" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +numpy = ">=1.7" + +[package.extras] +docs = ["numpydoc", "sphinx (==1.2.3)", "sphinx-rtd-theme", "sphinxcontrib-napoleon"] +tests = ["pytest", "pytest-cov", "pytest-pep8"] + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[[package]] +name = "scipy" +version = "1.11.3" +description = "Fundamental algorithms for scientific computing in Python" +category = "main" +optional = false +python-versions = "<3.13,>=3.9" + +[package.dependencies] +numpy = ">=1.21.6,<1.28.0" + +[package.extras] +dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[package.source] +type = "legacy" +url = "http://pysrc2.acme.org:8080/simple" +reference = "explicit-src" + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[metadata] +lock-version = "1.1" +python-versions = ">=3.9,<3.13" +content-hash = "6569debdbca76163ca69bb37458a56a013aef2da2bb1682692c1103c7c032b25" + +[metadata.files] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +importlib-metadata = [ + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, +] +jax = [ + {file = "jax-0.4.20-py3-none-any.whl", hash = "sha256:3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2"}, + {file = "jax-0.4.20.tar.gz", hash = "sha256:ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac"}, +] +ml-dtypes = [ + {file = "ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267"}, + {file = "ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b"}, + {file = "ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e"}, + {file = "ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16"}, + {file = "ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23"}, + {file = "ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be"}, + {file = "ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99"}, + {file = "ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44"}, + {file = "ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058"}, + {file = "ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364"}, + {file = "ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f"}, + {file = "ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39"}, + {file = "ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95"}, + {file = "ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b"}, + {file = "ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77"}, + {file = "ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201"}, + {file = "ml_dtypes-0.3.1.tar.gz", hash = "sha256:60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611"}, +] +numpy = [ + {file = "numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af"}, + {file = "numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67"}, + {file = "numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2"}, + {file = "numpy-1.26.1-cp310-cp310-win32.whl", hash = "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297"}, + {file = "numpy-1.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974"}, + {file = "numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c"}, + {file = "numpy-1.26.1-cp311-cp311-win32.whl", hash = "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b"}, + {file = "numpy-1.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124"}, + {file = "numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c"}, + {file = "numpy-1.26.1-cp312-cp312-win32.whl", hash = "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66"}, + {file = "numpy-1.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908"}, + {file = "numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5"}, + {file = "numpy-1.26.1-cp39-cp39-win32.whl", hash = "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104"}, + {file = "numpy-1.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f"}, + {file = "numpy-1.26.1.tar.gz", hash = "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe"}, +] +opt-einsum = [ + {file = "opt_einsum-3.3.0-py3-none-any.whl", hash = "sha256:2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147"}, + {file = "opt_einsum-3.3.0.tar.gz", hash = "sha256:59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549"}, +] +scipy = [ + {file = "scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0"}, + {file = "scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3"}, + {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc"}, + {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1"}, + {file = "scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88"}, + {file = "scipy-1.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929"}, + {file = "scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165"}, + {file = "scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a"}, + {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3"}, + {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221"}, + {file = "scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d"}, + {file = "scipy-1.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820"}, + {file = "scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15"}, + {file = "scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7"}, + {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc"}, + {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6"}, + {file = "scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280"}, + {file = "scipy-1.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6"}, + {file = "scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83"}, + {file = "scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e"}, + {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917"}, + {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156"}, + {file = "scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0"}, + {file = "scipy-1.11.3-cp39-cp39-win_amd64.whl", hash = "sha256:4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2"}, + {file = "scipy-1.11.3.tar.gz", hash = "sha256:bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] +zipp = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] diff --git a/tests/_data/infiles/poetry/private-packges/lock11/pyproject.toml b/tests/_data/infiles/poetry/private-packges/lock11/pyproject.toml new file mode 100644 index 00000000..a7006fdd --- /dev/null +++ b/tests/_data/infiles/poetry/private-packges/lock11/pyproject.toml @@ -0,0 +1,53 @@ +[tool.poetry] +name = "private-packges" +version = "0.1.0" +description = "packages from aternative package repositories" +authors = ["Your Name "] + + +# see https://github.com/python-poetry/poetry/blob/1.2/docs/repositories.md +# run the `pypi-proxy.py` to setup a pypi proxy + +[[tool.poetry.source]] +name = "PyPI" +url = "https://pypi.org/simple/" +default = false +secondary = false + +[[tool.poetry.source]] +name = "default-src" +url = "http://pysrc1.acme.org:8080/simple/" +default = true +secondary = false + + +[[tool.poetry.source]] +name = "secondary-src" +url = "http://pysrc4.acme.org:8080/simple/" +default = false +secondary = true + + +[[tool.poetry.source]] +name = "explicit-src" +url = "http://pysrc2.acme.org:8080/simple/" +default = false +secondary = true + +[[tool.poetry.source]] +name = "jax-src" +url = "https://storage.googleapis.com/jax-releases/jax_releases.html" +default = false +secondary = false + + +[tool.poetry.dependencies] +python = ">=3.9,<3.13" +jax = {version = "0.4.20", source = "jax-src"} +toml = {version = "^0.10.2", source = "explicit-src"} +colorama = "^0.4.6" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/_data/infiles/poetry/private-packges/lock20/poetry.lock b/tests/_data/infiles/poetry/private-packges/lock20/poetry.lock new file mode 100644 index 00000000..db559fef --- /dev/null +++ b/tests/_data/infiles/poetry/private-packges/lock20/poetry.lock @@ -0,0 +1,282 @@ +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[[package]] +name = "importlib-metadata" +version = "6.8.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[[package]] +name = "jax" +version = "0.4.20" +description = "Differentiate, compile, and transform Numpy code." +optional = false +python-versions = ">=3.9" +files = [ + {file = "jax-0.4.20-py3-none-any.whl", hash = "sha256:3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2"}, + {file = "jax-0.4.20.tar.gz", hash = "sha256:ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +ml-dtypes = ">=0.2.0" +numpy = [ + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, + {version = ">=1.22", markers = "python_version < \"3.11\""}, +] +opt-einsum = "*" +scipy = [ + {version = ">=1.11.1", markers = "python_version >= \"3.12\""}, + {version = ">=1.9", markers = "python_version < \"3.12\""}, +] + +[package.extras] +australis = ["protobuf (>=3.13,<4)"] +ci = ["jaxlib (==0.4.19)"] +cpu = ["jaxlib (==0.4.20)"] +cuda = ["jaxlib (==0.4.20+cuda11.cudnn86)"] +cuda11-cudnn86 = ["jaxlib (==0.4.20+cuda11.cudnn86)"] +cuda11-local = ["jaxlib (==0.4.20+cuda11.cudnn86)"] +cuda11-pip = ["jaxlib (==0.4.20+cuda11.cudnn86)", "nvidia-cublas-cu11 (>=11.11)", "nvidia-cuda-cupti-cu11 (>=11.8)", "nvidia-cuda-nvcc-cu11 (>=11.8)", "nvidia-cuda-runtime-cu11 (>=11.8)", "nvidia-cudnn-cu11 (>=8.8)", "nvidia-cufft-cu11 (>=10.9)", "nvidia-cusolver-cu11 (>=11.4)", "nvidia-cusparse-cu11 (>=11.7)", "nvidia-nccl-cu11 (>=2.18.3)"] +cuda12-local = ["jaxlib (==0.4.20+cuda12.cudnn89)"] +cuda12-pip = ["jaxlib (==0.4.20+cuda12.cudnn89)", "nvidia-cublas-cu12 (>=12.2.5.6)", "nvidia-cuda-cupti-cu12 (>=12.2.142)", "nvidia-cuda-nvcc-cu12 (>=12.2.140)", "nvidia-cuda-runtime-cu12 (>=12.2.140)", "nvidia-cudnn-cu12 (>=8.9)", "nvidia-cufft-cu12 (>=11.0.8.103)", "nvidia-cusolver-cu12 (>=11.5.2)", "nvidia-cusparse-cu12 (>=12.1.2.141)", "nvidia-nccl-cu12 (>=2.18.3)", "nvidia-nvjitlink-cu12 (>=12.2)"] +minimum-jaxlib = ["jaxlib (==0.4.14)"] +tpu = ["jaxlib (==0.4.20)", "libtpu-nightly (==0.1.dev20231102)", "requests"] + +[package.source] +type = "legacy" +url = "https://storage.googleapis.com/jax-releases/jax_releases.html" +reference = "jax-src" + +[[package]] +name = "ml-dtypes" +version = "0.3.1" +description = "" +optional = false +python-versions = ">=3.9" +files = [ + {file = "ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267"}, + {file = "ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b"}, + {file = "ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e"}, + {file = "ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16"}, + {file = "ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23"}, + {file = "ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be"}, + {file = "ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99"}, + {file = "ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44"}, + {file = "ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058"}, + {file = "ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364"}, + {file = "ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f"}, + {file = "ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39"}, + {file = "ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95"}, + {file = "ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b"}, + {file = "ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77"}, + {file = "ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201"}, + {file = "ml_dtypes-0.3.1.tar.gz", hash = "sha256:60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.23.3", markers = "python_version > \"3.10\""}, + {version = ">=1.21.2", markers = "python_version > \"3.9\" and python_version <= \"3.10\""}, + {version = ">1.20", markers = "python_version <= \"3.9\""}, +] + +[package.extras] +dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[[package]] +name = "numpy" +version = "1.26.1" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = "<3.13,>=3.9" +files = [ + {file = "numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af"}, + {file = "numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67"}, + {file = "numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2"}, + {file = "numpy-1.26.1-cp310-cp310-win32.whl", hash = "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297"}, + {file = "numpy-1.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974"}, + {file = "numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c"}, + {file = "numpy-1.26.1-cp311-cp311-win32.whl", hash = "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b"}, + {file = "numpy-1.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124"}, + {file = "numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c"}, + {file = "numpy-1.26.1-cp312-cp312-win32.whl", hash = "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66"}, + {file = "numpy-1.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908"}, + {file = "numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5"}, + {file = "numpy-1.26.1-cp39-cp39-win32.whl", hash = "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104"}, + {file = "numpy-1.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f"}, + {file = "numpy-1.26.1.tar.gz", hash = "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe"}, +] + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[[package]] +name = "opt-einsum" +version = "3.3.0" +description = "Optimizing numpys einsum function" +optional = false +python-versions = ">=3.5" +files = [ + {file = "opt_einsum-3.3.0-py3-none-any.whl", hash = "sha256:2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147"}, + {file = "opt_einsum-3.3.0.tar.gz", hash = "sha256:59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549"}, +] + +[package.dependencies] +numpy = ">=1.7" + +[package.extras] +docs = ["numpydoc", "sphinx (==1.2.3)", "sphinx-rtd-theme", "sphinxcontrib-napoleon"] +tests = ["pytest", "pytest-cov", "pytest-pep8"] + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[[package]] +name = "scipy" +version = "1.11.3" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = "<3.13,>=3.9" +files = [ + {file = "scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0"}, + {file = "scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3"}, + {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc"}, + {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1"}, + {file = "scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88"}, + {file = "scipy-1.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929"}, + {file = "scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165"}, + {file = "scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a"}, + {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3"}, + {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221"}, + {file = "scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d"}, + {file = "scipy-1.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820"}, + {file = "scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15"}, + {file = "scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7"}, + {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc"}, + {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6"}, + {file = "scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280"}, + {file = "scipy-1.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6"}, + {file = "scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83"}, + {file = "scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e"}, + {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917"}, + {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156"}, + {file = "scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0"}, + {file = "scipy-1.11.3-cp39-cp39-win_amd64.whl", hash = "sha256:4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2"}, + {file = "scipy-1.11.3.tar.gz", hash = "sha256:bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd"}, +] + +[package.dependencies] +numpy = ">=1.21.6,<1.28.0" + +[package.extras] +dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[package.source] +type = "legacy" +url = "http://pysrc2.acme.org:8080/simple" +reference = "explicit-src" + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[package.source] +type = "legacy" +url = "http://pysrc1.acme.org:8080/simple" +reference = "default-src" + +[metadata] +lock-version = "2.0" +python-versions = ">=3.9,<3.13" +content-hash = "87eb1466760484f7ffadfcf73d1454c99635627aa82e8fd8b9ec68444462aecf" diff --git a/tests/_data/infiles/poetry/private-packges/lock20/pyproject.toml b/tests/_data/infiles/poetry/private-packges/lock20/pyproject.toml new file mode 100644 index 00000000..9c0b2cac --- /dev/null +++ b/tests/_data/infiles/poetry/private-packges/lock20/pyproject.toml @@ -0,0 +1,59 @@ +[tool.poetry] +name = "private-packges" +version = "0.1.0" +description = "packages from aternative package repositories" +authors = ["Your Name "] + + +# see https://python-poetry.org/docs/repositories/ +# run the `pypi-proxy.py` to setup a pypi proxy + + +[[tool.poetry.source]] +name = "PyPI" +priority = "primary" + + +[[tool.poetry.source]] +name = "default-src" +url = "http://pysrc1.acme.org:8080/simple/" +priority = "default" + + +[[tool.poetry.source]] +name = "explicit-src" +url = "http://pysrc2.acme.org:8080/simple/" +priority = "explicit" + + +[[tool.poetry.source]] +name = "supplemental-src" +url = "http://pysrc3.acme.org:8080/simple/" +priority = "supplemental" + + +[[tool.poetry.source]] +name = "testpypi" +url = "https://test.pypi.org/simple/" +priority = "explicit" + + + +[[tool.poetry.source]] +name = "jax-src" +url = "https://storage.googleapis.com/jax-releases/jax_releases.html" +priority = "primary" + + + + +[tool.poetry.dependencies] +python = ">=3.9,<3.13" +jax = {version = "0.4.20", source = "jax-src"} +toml = {version = "^0.10.2", source = "explicit-src"} +colorama = "*" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/_data/infiles/poetry/private-packges/pyproject-proto.toml b/tests/_data/infiles/poetry/private-packges/pyproject-proto.toml new file mode 100644 index 00000000..413ad296 --- /dev/null +++ b/tests/_data/infiles/poetry/private-packges/pyproject-proto.toml @@ -0,0 +1,68 @@ +[tool.poetry] +name = "private-packges" +version = "0.1.0" +description = "packages from aternative package repositories" +authors = ["Your Name "] + + +# see https://python-poetry.org/docs/repositories/ +# run the `//tests/_data/infiles/_helpers/pypi-proxy.py` to setup a PyPI proxy + + +[[tool.poetry.source]] +name = "PyPI" +priority = "primary" + + +[[tool.poetry.source]] +name = "default-src" +url = "http://pysrc1.acme.org:8080/simple/" +priority = "default" + + +[[tool.poetry.source]] +name = "explicit-src" +url = "http://pysrc2.acme.org:8080/simple/" +priority = "explicit" + + +[[tool.poetry.source]] +name = "supplemental-src" +url = "http://pysrc3.acme.org:8080/simple/" +priority = "supplemental" + + +[[tool.poetry.source]] +name = "secondary-src" +url = "http://pysrc4.acme.org:8080/simple/" +priority = "secondary" + + +[[tool.poetry.source]] +name = "testpypi" +url = "https://test.pypi.org/simple/" +priority = "explicit" + + + +[[tool.poetry.source]] +name = "jax-src" +url = "https://storage.googleapis.com/jax-releases/jax_releases.html" +priority = "primary" + + + + +[tool.poetry.dependencies] +python = ">=3.9,<3.13" +# toml = "^0.10.2" +# colorama = "*" +# isoduration = "^20.11.0" +jax = {version = "0.4.20", source = "jax-src"} +toml = {version = "*", source = "explicit-src"} +colorama = "*" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/_data/infiles/poetry/regression-issue611/lock20/poetry.lock b/tests/_data/infiles/poetry/regression-issue611/lock20/poetry.lock new file mode 120000 index 00000000..0d698fcc --- /dev/null +++ b/tests/_data/infiles/poetry/regression-issue611/lock20/poetry.lock @@ -0,0 +1 @@ +regression-issue611-poetry.lock.bin \ No newline at end of file diff --git a/tests/_data/infiles/poetry/regression-issue611/lock20/pyproject.toml b/tests/_data/infiles/poetry/regression-issue611/lock20/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/regression-issue611/lock20/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/fixtures/poetry-lock-regression-issue611.txt.bin b/tests/_data/infiles/poetry/regression-issue611/lock20/regression-issue611-poetry.lock.bin similarity index 100% rename from tests/fixtures/poetry-lock-regression-issue611.txt.bin rename to tests/_data/infiles/poetry/regression-issue611/lock20/regression-issue611-poetry.lock.bin diff --git a/tests/_data/infiles/poetry/regression-issue611/pyproject-proto.toml b/tests/_data/infiles/poetry/regression-issue611/pyproject-proto.toml new file mode 100644 index 00000000..f27c4e41 --- /dev/null +++ b/tests/_data/infiles/poetry/regression-issue611/pyproject-proto.toml @@ -0,0 +1,14 @@ +[tool.poetry] +name = "regression-issue611" +version = "0.1.0" +description = "regression for issue #611" +authors = ["Your Name "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.11" +pyhumps = "3.7.1" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/_data/infiles/poetry/with-extras/lock10/poetry.lock b/tests/_data/infiles/poetry/with-extras/lock10/poetry.lock new file mode 100644 index 00000000..560d617b --- /dev/null +++ b/tests/_data/infiles/poetry/with-extras/lock10/poetry.lock @@ -0,0 +1,108 @@ +[[package]] +category = "main" +description = "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL." +name = "boolean.py" +optional = true +python-versions = "*" +version = "4.0" + +[[package]] +category = "main" +description = "Python library for CycloneDX" +name = "cyclonedx-python-lib" +optional = true +python-versions = ">=3.8,<4.0" +version = "5.1.1" + +[package.dependencies] +license-expression = ">=30,<31" +packageurl-python = ">=0.11" +py-serializable = ">=0.15,<0.16" +sortedcontainers = ">=2.4.0,<3.0.0" + +[package.dependencies.jsonschema] +extras = ["format"] +optional = true +version = ">=4.18,<5.0" + +[package.dependencies.lxml] +optional = true +version = ">=4,<5" + +[package.extras] +json-validation = ["jsonschema (>=4.18,<5.0)"] +validation = ["jsonschema (>=4.18,<5.0)", "lxml (>=4,<5)"] +xml-validation = ["lxml (>=4,<5)"] + +[[package]] +category = "main" +description = "XML bomb protection for Python stdlib modules" +name = "defusedxml" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "0.7.1" + +[[package]] +category = "main" +description = "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic." +name = "license-expression" +optional = true +python-versions = ">=3.7" +version = "30.1.1" + +[package.dependencies] +"boolean.py" = ">=4.0" + +[package.extras] +docs = ["Sphinx (5.1.0)", "sphinx-rtd-theme (>=0.5.0)", "sphinxcontrib-apidoc (>=0.3.0)", "doc8 (>=0.8.1)"] +testing = ["pytest (>=6,<7.0.0 || >7.0.0)", "pytest-xdist (>=2)", "twine", "black", "isort"] + +[[package]] +category = "main" +description = "A purl aka. Package URL parser and builder" +name = "packageurl-python" +optional = true +python-versions = ">=3.7" +version = "0.11.2" + +[package.extras] +build = ["wheel"] +lint = ["isort", "black", "mypy"] +sqlalchemy = ["sqlalchemy (>=2.0.0)"] +test = ["pytest"] + +[[package]] +category = "main" +description = "Library for serializing and deserializing Python Objects to and from JSON and XML." +name = "py-serializable" +optional = true +python-versions = ">=3.7,<4.0" +version = "0.15.0" + +[package.dependencies] +defusedxml = ">=0.7.1,<0.8.0" + +[[package]] +category = "main" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +name = "sortedcontainers" +optional = true +python-versions = "*" +version = "2.4.0" + +[extras] +my-extra = ["cyclonedx-python-lib"] + +[metadata] +content-hash = "36326c9123bc7b66b886bf3d024816b5c2eb03533401ecc9399ef8ac539c3d40" +lock-version = "1.0" +python-versions = "^3.8" + +[metadata.files] +"boolean.py" = [] +cyclonedx-python-lib = [] +defusedxml = [] +license-expression = [] +packageurl-python = [] +py-serializable = [] +sortedcontainers = [] diff --git a/tests/_data/infiles/poetry/with-extras/lock10/pyproject.toml b/tests/_data/infiles/poetry/with-extras/lock10/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/with-extras/lock10/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/with-extras/lock11/poetry.lock b/tests/_data/infiles/poetry/with-extras/lock11/poetry.lock new file mode 100644 index 00000000..525b4053 --- /dev/null +++ b/tests/_data/infiles/poetry/with-extras/lock11/poetry.lock @@ -0,0 +1,520 @@ +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +category = "main" +optional = true +python-versions = ">=3.8" + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"] + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.extras] +cov = ["attrs", "coverage[toml] (>=5.3)"] +dev = ["attrs", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist"] + +[[package]] +name = "boolean.py" +version = "4.0" +description = "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL." +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "cyclonedx-python-lib" +version = "5.1.1" +description = "Python library for CycloneDX" +category = "main" +optional = true +python-versions = ">=3.8,<4.0" + +[package.dependencies] +jsonschema = {version = ">=4.18,<5.0", extras = ["format"], optional = true, markers = "extra == \"validation\" or extra == \"json-validation\""} +license-expression = ">=30,<31" +lxml = {version = ">=4,<5", optional = true, markers = "extra == \"validation\" or extra == \"xml-validation\""} +packageurl-python = ">=0.11" +py-serializable = ">=0.15,<0.16" +sortedcontainers = ">=2.4.0,<3.0.0" + +[package.extras] +json-validation = ["jsonschema[format] (>=4.18,<5.0)"] +validation = ["jsonschema[format] (>=4.18,<5.0)", "lxml (>=4,<5)"] +xml-validation = ["lxml (>=4,<5)"] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = true +python-versions = ">=3.5" + +[[package]] +name = "importlib-resources" +version = "6.1.1" +description = "Read resources from Python packages" +category = "main" +optional = true +python-versions = ">=3.8" + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "jsonpointer" +version = "2.4" +description = "Identify specific nodes in a JSON document (RFC 6901)" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" + +[[package]] +name = "jsonschema" +version = "4.19.2" +description = "An implementation of JSON Schema validation for Python" +category = "main" +optional = true +python-versions = ">=3.8" + +[package.dependencies] +attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format\""} +idna = {version = "*", optional = true, markers = "extra == \"format\""} +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format\""} +jsonschema-specifications = ">=2023.03.6" +pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} +referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format\""} +rfc3987 = {version = "*", optional = true, markers = "extra == \"format\""} +rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.7.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +category = "main" +optional = true +python-versions = ">=3.8" + +[package.dependencies] +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +referencing = ">=0.28.0" + +[[package]] +name = "license-expression" +version = "30.1.1" +description = "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic." +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +"boolean.py" = ">=4.0" + +[package.extras] +docs = ["Sphinx (==5.1.0)", "doc8 (>=0.8.1)", "sphinx-rtd-theme (>=0.5.0)", "sphinxcontrib-apidoc (>=0.3.0)"] +testing = ["black", "isort", "pytest (>=6,!=7.0.0)", "pytest-xdist (>=2)", "twine"] + +[[package]] +name = "lxml" +version = "4.9.3" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["beautifulsoup4"] +source = ["Cython (>=0.29.35)"] + +[[package]] +name = "packageurl-python" +version = "0.11.2" +description = "A purl aka. Package URL parser and builder" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.extras] +build = ["wheel"] +lint = ["black", "isort", "mypy"] +sqlalchemy = ["sqlalchemy (>=2.0.0)"] +test = ["pytest"] + +[[package]] +name = "pkgutil-resolve-name" +version = "1.3.10" +description = "Resolve a name to an object." +category = "main" +optional = true +python-versions = ">=3.6" + +[[package]] +name = "py-serializable" +version = "0.15.0" +description = "Library for serializing and deserializing Python Objects to and from JSON and XML." +category = "main" +optional = true +python-versions = ">=3.7,<4.0" + +[package.dependencies] +defusedxml = ">=0.7.1,<0.8.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = true +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "referencing" +version = "0.30.2" +description = "JSON Referencing + Python" +category = "main" +optional = true +python-versions = ">=3.8" + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3987" +version = "1.3.8" +description = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "rpds-py" +version = "0.12.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +category = "main" +optional = true +python-versions = ">=3.8" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-pyyaml"] + +[[package]] +name = "webcolors" +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." +category = "main" +optional = true +python-versions = ">=3.7" + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = true +python-versions = ">=3.8" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-o", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[extras] +my-extra = ["cyclonedx-python-lib"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.8" +content-hash = "36326c9123bc7b66b886bf3d024816b5c2eb03533401ecc9399ef8ac539c3d40" + +[metadata.files] +arrow = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] +attrs = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] +"boolean.py" = [] +cyclonedx-python-lib = [] +defusedxml = [] +fqdn = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] +idna = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] +importlib-resources = [ + {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, + {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, +] +isoduration = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] +jsonpointer = [ + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, +] +jsonschema = [] +jsonschema-specifications = [ + {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, + {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, +] +license-expression = [] +lxml = [] +packageurl-python = [] +pkgutil-resolve-name = [ + {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, + {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, +] +py-serializable = [] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +referencing = [ + {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, + {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, +] +rfc3339-validator = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] +rfc3987 = [ + {file = "rfc3987-1.3.8-py2.py3-none-any.whl", hash = "sha256:10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53"}, + {file = "rfc3987-1.3.8.tar.gz", hash = "sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"}, +] +rpds-py = [ + {file = "rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46"}, + {file = "rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e"}, + {file = "rpds_py-0.12.0-cp310-none-win32.whl", hash = "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29"}, + {file = "rpds_py-0.12.0-cp310-none-win_amd64.whl", hash = "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c"}, + {file = "rpds_py-0.12.0-cp311-none-win32.whl", hash = "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10"}, + {file = "rpds_py-0.12.0-cp311-none-win_amd64.whl", hash = "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b"}, + {file = "rpds_py-0.12.0-cp312-none-win32.whl", hash = "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978"}, + {file = "rpds_py-0.12.0-cp312-none-win_amd64.whl", hash = "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c"}, + {file = "rpds_py-0.12.0-cp38-none-win32.whl", hash = "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595"}, + {file = "rpds_py-0.12.0-cp38-none-win_amd64.whl", hash = "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0"}, + {file = "rpds_py-0.12.0-cp39-none-win32.whl", hash = "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31"}, + {file = "rpds_py-0.12.0-cp39-none-win_amd64.whl", hash = "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4"}, + {file = "rpds_py-0.12.0.tar.gz", hash = "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +sortedcontainers = [] +types-python-dateutil = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] +uri-template = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] +webcolors = [ + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, +] +zipp = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] diff --git a/tests/_data/infiles/poetry/with-extras/lock11/pyproject.toml b/tests/_data/infiles/poetry/with-extras/lock11/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/with-extras/lock11/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/with-extras/lock20/poetry.lock b/tests/_data/infiles/poetry/with-extras/lock20/poetry.lock new file mode 100644 index 00000000..9e22c9f4 --- /dev/null +++ b/tests/_data/infiles/poetry/with-extras/lock20/poetry.lock @@ -0,0 +1,609 @@ +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +optional = true +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = true +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "boolean-py" +version = "4.0" +description = "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL." +optional = true +python-versions = "*" +files = [ + {file = "boolean.py-4.0-py3-none-any.whl", hash = "sha256:2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd"}, + {file = "boolean.py-4.0.tar.gz", hash = "sha256:17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4"}, +] + +[[package]] +name = "cyclonedx-python-lib" +version = "5.1.1" +description = "Python library for CycloneDX" +optional = true +python-versions = ">=3.8,<4.0" +files = [ + {file = "cyclonedx_python_lib-5.1.1-py3-none-any.whl", hash = "sha256:2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3"}, + {file = "cyclonedx_python_lib-5.1.1.tar.gz", hash = "sha256:215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6"}, +] + +[package.dependencies] +jsonschema = {version = ">=4.18,<5.0", extras = ["format"], optional = true, markers = "extra == \"validation\" or extra == \"json-validation\""} +license-expression = ">=30,<31" +lxml = {version = ">=4,<5", optional = true, markers = "extra == \"validation\" or extra == \"xml-validation\""} +packageurl-python = ">=0.11" +py-serializable = ">=0.15,<0.16" +sortedcontainers = ">=2.4.0,<3.0.0" + +[package.extras] +json-validation = ["jsonschema[format] (>=4.18,<5.0)"] +validation = ["jsonschema[format] (>=4.18,<5.0)", "lxml (>=4,<5)"] +xml-validation = ["lxml (>=4,<5)"] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = true +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = true +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "importlib-resources" +version = "6.1.1" +description = "Read resources from Python packages" +optional = true +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, + {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = true +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "jsonpointer" +version = "2.4" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, +] + +[[package]] +name = "jsonschema" +version = "4.19.2" +description = "An implementation of JSON Schema validation for Python" +optional = true +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.19.2-py3-none-any.whl", hash = "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc"}, + {file = "jsonschema-4.19.2.tar.gz", hash = "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format\""} +idna = {version = "*", optional = true, markers = "extra == \"format\""} +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format\""} +jsonschema-specifications = ">=2023.03.6" +pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} +referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format\""} +rfc3987 = {version = "*", optional = true, markers = "extra == \"format\""} +rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.7.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = true +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, + {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, +] + +[package.dependencies] +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +referencing = ">=0.28.0" + +[[package]] +name = "license-expression" +version = "30.1.1" +description = "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic." +optional = true +python-versions = ">=3.7" +files = [ + {file = "license-expression-30.1.1.tar.gz", hash = "sha256:42375df653ad85e6f5b4b0385138b2dbea1f5d66360783d8625c3e4f97f11f0c"}, + {file = "license_expression-30.1.1-py3-none-any.whl", hash = "sha256:8d7e5e2de0d04fc104a4f952c440e8f08a5ba63480a0dad015b294770b7e58ec"}, +] + +[package.dependencies] +"boolean.py" = ">=4.0" + +[package.extras] +docs = ["Sphinx (==5.1.0)", "doc8 (>=0.8.1)", "sphinx-rtd-theme (>=0.5.0)", "sphinxcontrib-apidoc (>=0.3.0)"] +testing = ["black", "isort", "pytest (>=6,!=7.0.0)", "pytest-xdist (>=2)", "twine"] + +[[package]] +name = "lxml" +version = "4.9.3" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +files = [ + {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, + {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, + {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, + {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, + {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, + {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, + {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, + {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, + {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, + {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, + {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, + {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, + {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, + {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, + {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, + {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, + {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, + {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, + {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, + {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, + {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, + {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, + {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, + {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, + {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, +] + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=0.29.35)"] + +[[package]] +name = "packageurl-python" +version = "0.11.2" +description = "A purl aka. Package URL parser and builder" +optional = true +python-versions = ">=3.7" +files = [ + {file = "packageurl-python-0.11.2.tar.gz", hash = "sha256:01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471"}, + {file = "packageurl_python-0.11.2-py3-none-any.whl", hash = "sha256:799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84"}, +] + +[package.extras] +build = ["wheel"] +lint = ["black", "isort", "mypy"] +sqlalchemy = ["sqlalchemy (>=2.0.0)"] +test = ["pytest"] + +[[package]] +name = "pkgutil-resolve-name" +version = "1.3.10" +description = "Resolve a name to an object." +optional = true +python-versions = ">=3.6" +files = [ + {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, + {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, +] + +[[package]] +name = "py-serializable" +version = "0.15.0" +description = "Library for serializing and deserializing Python Objects to and from JSON and XML." +optional = true +python-versions = ">=3.7,<4.0" +files = [ + {file = "py-serializable-0.15.0.tar.gz", hash = "sha256:8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771"}, + {file = "py_serializable-0.15.0-py3-none-any.whl", hash = "sha256:d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2"}, +] + +[package.dependencies] +defusedxml = ">=0.7.1,<0.8.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = true +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "referencing" +version = "0.30.2" +description = "JSON Referencing + Python" +optional = true +python-versions = ">=3.8" +files = [ + {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, + {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3987" +version = "1.3.8" +description = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)" +optional = true +python-versions = "*" +files = [ + {file = "rfc3987-1.3.8-py2.py3-none-any.whl", hash = "sha256:10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53"}, + {file = "rfc3987-1.3.8.tar.gz", hash = "sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"}, +] + +[[package]] +name = "rpds-py" +version = "0.12.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = true +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46"}, + {file = "rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e"}, + {file = "rpds_py-0.12.0-cp310-none-win32.whl", hash = "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29"}, + {file = "rpds_py-0.12.0-cp310-none-win_amd64.whl", hash = "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c"}, + {file = "rpds_py-0.12.0-cp311-none-win32.whl", hash = "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10"}, + {file = "rpds_py-0.12.0-cp311-none-win_amd64.whl", hash = "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b"}, + {file = "rpds_py-0.12.0-cp312-none-win32.whl", hash = "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978"}, + {file = "rpds_py-0.12.0-cp312-none-win_amd64.whl", hash = "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c"}, + {file = "rpds_py-0.12.0-cp38-none-win32.whl", hash = "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595"}, + {file = "rpds_py-0.12.0-cp38-none-win_amd64.whl", hash = "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0"}, + {file = "rpds_py-0.12.0-cp39-none-win32.whl", hash = "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31"}, + {file = "rpds_py-0.12.0-cp39-none-win_amd64.whl", hash = "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4"}, + {file = "rpds_py-0.12.0.tar.gz", hash = "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80"}, +] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = true +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +optional = true +python-versions = "*" +files = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = true +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + +[[package]] +name = "webcolors" +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." +optional = true +python-versions = ">=3.7" +files = [ + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = true +python-versions = ">=3.8" +files = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[extras] +my-extra = ["cyclonedx-python-lib"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "36326c9123bc7b66b886bf3d024816b5c2eb03533401ecc9399ef8ac539c3d40" diff --git a/tests/_data/infiles/poetry/with-extras/lock20/pyproject.toml b/tests/_data/infiles/poetry/with-extras/lock20/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/with-extras/lock20/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/with-extras/pyproject-proto.toml b/tests/_data/infiles/poetry/with-extras/pyproject-proto.toml new file mode 100644 index 00000000..a35ec674 --- /dev/null +++ b/tests/_data/infiles/poetry/with-extras/pyproject-proto.toml @@ -0,0 +1,18 @@ +[tool.poetry] +name = "with-extras" +version = "0.1.0" +description = "depenndencies with extras" +authors = ["Your Name "] + + +[tool.poetry.dependencies] +python = "^3.8" +cyclonedx-python-lib = {version = "5.1.1", extras = ["json-validation", "xml-validation"], optional = true} + +[tool.poetry.extras] +my-extra = ["cyclonedx-python-lib"] + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/_data/infiles/poetry/with-urls/lock10/poetry.lock b/tests/_data/infiles/poetry/with-urls/lock10/poetry.lock new file mode 100644 index 00000000..e78aa09e --- /dev/null +++ b/tests/_data/infiles/poetry/with-urls/lock10/poetry.lock @@ -0,0 +1,70 @@ +[[package]] +category = "main" +description = "Fundamental package for array computing in Python" +name = "numpy" +optional = false +python-versions = ">=3.8" +version = "1.24.4" + +[package.source] +reference = "" +type = "url" +url = "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" +[[package]] +category = "main" +description = "Python Imaging Library (Fork)" +name = "Pillow" +optional = false +python-versions = ">=3.8" +version = "10.1.0" + +[package.extras] +docs = ["furo", "olefile", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinx (>=2.4)", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + +[package.source] +reference = "da59ad000d1405eaecd557175e29083a87d19f7c" +type = "git" +url = "https://github.com/python-pillow/Pillow.git" +[[package]] +category = "main" +description = "Python 2 and 3 compatibility utilities" +name = "six" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "1.16.0" + +[package.source] +reference = "65486e4383f9f411da95937451205d3c7b61b9e1" +type = "git" +url = "ssh://git@github.com/benjaminp/six.git" +[[package]] +category = "main" +description = "Cross platform GUI toolkit for Python, \"Phoenix\" version" +name = "wxPython" +optional = false +python-versions = "*" +version = "4.2.2a1.dev5618+1f82021f" + +[package.dependencies] +pillow = "*" +six = "*" + +[package.dependencies.numpy] +python = ">=3.0,<3.12" +version = "*" + +[package.source] +reference = "" +type = "url" +url = "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" +[metadata] +content-hash = "b4436d6f975d6f207483913778773f9eee6432c4283394bb277b4100c6a3c1df" +lock-version = "1.0" +python-versions = "^3.8" + +[metadata.files] +numpy = [] +Pillow = [] +six = [] +wxPython = [] diff --git a/tests/_data/infiles/poetry/with-urls/lock10/pyproject.toml b/tests/_data/infiles/poetry/with-urls/lock10/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/with-urls/lock10/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/with-urls/lock11/poetry.lock b/tests/_data/infiles/poetry/with-urls/lock11/poetry.lock new file mode 100644 index 00000000..e8765f8b --- /dev/null +++ b/tests/_data/infiles/poetry/with-urls/lock11/poetry.lock @@ -0,0 +1,71 @@ +[[package]] +name = "numpy" +version = "1.24.4" +description = "Fundamental package for array computing in Python" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.source] +type = "url" +url = "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" +[[package]] +name = "Pillow" +version = "10.1.0" +description = "Python Imaging Library (Fork)" +category = "main" +optional = false +python-versions = ">=3.8" +develop = false + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + +[package.source] +type = "git" +url = "https://github.com/python-pillow/Pillow.git" +reference = "10.1.0" +resolved_reference = "da59ad000d1405eaecd557175e29083a87d19f7c" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +develop = false + +[package.source] +type = "git" +url = "ssh://git@github.com/benjaminp/six.git" +reference = "1.16.0" +resolved_reference = "65486e4383f9f411da95937451205d3c7b61b9e1" + +[[package]] +name = "wxPython" +version = "4.2.2a1.dev5618+1f82021f" +description = "Cross platform GUI toolkit for Python, \"Phoenix\" version" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +numpy = {version = "*", markers = "python_version >= \"3.0\" and python_version < \"3.12\""} +pillow = "*" +six = "*" + +[package.source] +type = "url" +url = "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" +[metadata] +lock-version = "1.1" +python-versions = "^3.8" +content-hash = "b4436d6f975d6f207483913778773f9eee6432c4283394bb277b4100c6a3c1df" + +[metadata.files] +numpy = [] +Pillow = [] +six = [] +wxPython = [] diff --git a/tests/_data/infiles/poetry/with-urls/lock11/pyproject.toml b/tests/_data/infiles/poetry/with-urls/lock11/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/with-urls/lock11/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/with-urls/lock20/poetry.lock b/tests/_data/infiles/poetry/with-urls/lock20/poetry.lock new file mode 100644 index 00000000..16d83b9c --- /dev/null +++ b/tests/_data/infiles/poetry/with-urls/lock20/poetry.lock @@ -0,0 +1,75 @@ +# This file is automatically @generated by Poetry 1.4.1 and should not be changed by hand. + +[[package]] +name = "numpy" +version = "1.24.4" +description = "Fundamental package for array computing in Python" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, +] + +[package.source] +type = "url" +url = "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" +[[package]] +name = "Pillow" +version = "10.1.0" +description = "Python Imaging Library (Fork)" +category = "main" +optional = false +python-versions = ">=3.8" +files = [] +develop = false + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + +[package.source] +type = "git" +url = "https://github.com/python-pillow/Pillow.git" +reference = "10.1.0" +resolved_reference = "da59ad000d1405eaecd557175e29083a87d19f7c" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [] +develop = false + +[package.source] +type = "git" +url = "ssh://git@github.com/benjaminp/six.git" +reference = "1.16.0" +resolved_reference = "65486e4383f9f411da95937451205d3c7b61b9e1" + +[[package]] +name = "wxPython" +version = "4.2.2a1.dev5618+1f82021f" +description = "Cross platform GUI toolkit for Python, \"Phoenix\" version" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl", hash = "sha256:6ebb5019c6b999941a6cddd298dff7951d826239d663f6ce698b9547ae72d6b9"}, +] + +[package.dependencies] +numpy = {version = "*", markers = "python_version >= \"3.0\" and python_version < \"3.12\""} +pillow = "*" +six = "*" + +[package.source] +type = "url" +url = "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "b4436d6f975d6f207483913778773f9eee6432c4283394bb277b4100c6a3c1df" diff --git a/tests/_data/infiles/poetry/with-urls/lock20/pyproject.toml b/tests/_data/infiles/poetry/with-urls/lock20/pyproject.toml new file mode 120000 index 00000000..060072be --- /dev/null +++ b/tests/_data/infiles/poetry/with-urls/lock20/pyproject.toml @@ -0,0 +1 @@ +../pyproject-proto.toml \ No newline at end of file diff --git a/tests/_data/infiles/poetry/with-urls/pyproject-proto.toml b/tests/_data/infiles/poetry/with-urls/pyproject-proto.toml new file mode 100644 index 00000000..7f442805 --- /dev/null +++ b/tests/_data/infiles/poetry/with-urls/pyproject-proto.toml @@ -0,0 +1,28 @@ +[tool.poetry] +name = "with-urls" +version = "0.1.0" +description = "packages from direct urls" +authors = ["Your Name "] + + +# You can specify a package in the following forms: +# [...] +# - A git url (git+https://github.com/python-poetry/poetry.git) +# - A git url with a revision (git+https://github.com/python-poetry/poetry.git#develop) +# - A git SSH url (git+ssh://github.com/python-poetry/poetry.git) +# - A git SSH url with a revision (git+ssh://github.com/python-poetry/poetry.git#develop) +# [...] +# - A url (https://example.com/packages/my-package-0.1.0.tar.gz) + + +[tool.poetry.dependencies] +python = "^3.8" +wxpython = {url = "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl"} +numpy = {url = "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz"} +pillow = {git = "https://github.com/python-pillow/Pillow.git", rev = "10.1.0"} +six = {git = "ssh://git@github.com/benjaminp/six.git", rev = "1.16.0"} + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/_data/infiles/requirements/frozen.txt b/tests/_data/infiles/requirements/frozen.txt new file mode 100644 index 00000000..8bb1ebe8 --- /dev/null +++ b/tests/_data/infiles/requirements/frozen.txt @@ -0,0 +1,9 @@ +# all dependencies are pinned to an exact version + +# just pinned +colorama==0.4.6 + +# with hashes -- https://pip.pypa.io/en/stable/topics/secure-installs/#hash-checking-mode +FooProject == 1.2 \ + --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 \ + --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 diff --git a/tests/_data/infiles/requirements/local.txt b/tests/_data/infiles/requirements/local.txt new file mode 100644 index 00000000..4c55d2e3 --- /dev/null +++ b/tests/_data/infiles/requirements/local.txt @@ -0,0 +1,17 @@ +# local +./myproject/chardet + +# local with hash +./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + +# editable install +-e ./myproject/idna.whl + +# named +foo @ file://../foo + +# unnamed build distribution +./downloads/numpy-1.9.2-cp34-none-win32.whl + +# unnamed source distribution +./downloads/numpy-1.26.1.tar.gz diff --git a/tests/_data/infiles/requirements/nested.txt b/tests/_data/infiles/requirements/nested.txt new file mode 100644 index 00000000..a55928fc --- /dev/null +++ b/tests/_data/infiles/requirements/nested.txt @@ -0,0 +1,4 @@ +# nest another requirement file in + +-r frozen.txt + diff --git a/tests/_data/infiles/requirements/private-packages.txt b/tests/_data/infiles/requirements/private-packages.txt new file mode 100644 index 00000000..3b3b4181 --- /dev/null +++ b/tests/_data/infiles/requirements/private-packages.txt @@ -0,0 +1,7 @@ +## pip option to use an alternative package registry + +--index-url https://pypackages.acme.org/simple/ +--extra-index-url https://legacy1.pypackages.acme.org/simple/ +--extra-index-url https://legacy2.pypackages.acme.org/simple/ + +my-package==1.2.3 diff --git a/tests/_data/infiles/requirements/pyproject.toml b/tests/_data/infiles/requirements/pyproject.toml new file mode 100644 index 00000000..0a190a8b --- /dev/null +++ b/tests/_data/infiles/requirements/pyproject.toml @@ -0,0 +1,40 @@ +[project] +# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata +name = "testing-requirements-txt" +version = "0.1.0" +description = "some `reuqirements.txt` a root-component with all metadata" +license = {text="Apache-2.0 OR MIT"} +readme = "README.md" +requires-python = ">=3.7" + +# dynamic = [] # TODO + +authors = ["Your Name ", "My Name"] +maintainers = [ + "John Smith ", + "Jane Smith ", +] + +keywords = ["packaging", "pipenv", "test"] +classifiers = [ + "License :: OSI Approved :: Apache Software License", + "License :: OSI Approved :: MIT License", + "Classifier: Development Status :: 4 - Beta", + "Intended Audience :: Developers" +] + +# dependencies = [] # TODO +# optional-dependencies = [] # TODO + +# entry-point = {} # TODO + +# gui-scripts = {} # TODO +# scripts = {} # TODO + +[project.urls] +homepage = "https://oss.acme.org/my-project/" +repository = "https://oss.acme.org/my-project.git" +documentation = "https://oss.acme.org/my-project/docs/" +"Bug Tracker" = "https://oss.acme.org/my-project/bugs/" +"Funding" = "https://oss.acme.org/my-project/funding/" +"Change log" = "https://oss.acme.org/my-project/changelog/" diff --git a/tests/fixtures/requirements-regression-issue448.cp1252.txt.bin b/tests/_data/infiles/requirements/regression-issue448.cp1252.txt.bin similarity index 100% rename from tests/fixtures/requirements-regression-issue448.cp1252.txt.bin rename to tests/_data/infiles/requirements/regression-issue448.cp1252.txt.bin diff --git a/tests/fixtures/requirements-with-comments.txt b/tests/_data/infiles/requirements/with-comments.txt similarity index 100% rename from tests/fixtures/requirements-with-comments.txt rename to tests/_data/infiles/requirements/with-comments.txt diff --git a/tests/_data/infiles/requirements/with-extras.txt b/tests/_data/infiles/requirements/with-extras.txt new file mode 100644 index 00000000..92c506eb --- /dev/null +++ b/tests/_data/infiles/requirements/with-extras.txt @@ -0,0 +1,3 @@ +# package with extras + +cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 diff --git a/tests/_data/infiles/requirements/with-hashes.txt b/tests/_data/infiles/requirements/with-hashes.txt new file mode 100644 index 00000000..a4bac967 --- /dev/null +++ b/tests/_data/infiles/requirements/with-hashes.txt @@ -0,0 +1,21 @@ +# hash mode -- https://pip.pypa.io/en/stable/topics/secure-installs/#hash-checking-mode + +## oneliner +certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + +## unorthodox line breaks +urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c \ + --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + +## typical line breaks +FooProject == 1.2 \ + --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 \ + --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + +# from direct source +colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz \ + --hash=md5:9854316552d41419b678d39af443a75f \ + --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + +# unknown hash type -> ignore hash +something == 1.33.7 --hash=foo:something-invalid diff --git a/tests/_data/infiles/requirements/with-urls.txt b/tests/_data/infiles/requirements/with-urls.txt new file mode 100644 index 00000000..c17d92b6 --- /dev/null +++ b/tests/_data/infiles/requirements/with-urls.txt @@ -0,0 +1,23 @@ +# dependencies from urls + +## VCS +### commit hash +git+https://github.com/path/to/package-one@41b95ec#egg=package-one +### master branch +git+https://github.com/path/to/package-two@master#egg=package-two +### tag +git+https://github.com/path/to/package-three@0.1#egg=package-three +### release tag +git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + + +## http build dist +http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + + +## http source dist +https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + + +## named fetchable file +urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip diff --git a/tests/_data/infiles/requirements/without-pinned-versions.txt b/tests/_data/infiles/requirements/without-pinned-versions.txt new file mode 100644 index 00000000..6ffd6d5c --- /dev/null +++ b/tests/_data/infiles/requirements/without-pinned-versions.txt @@ -0,0 +1,3 @@ +certifi>=2021.5.30 +chardet >= 4.0.0 , < 5 +urllib3 diff --git a/tests/_data/snapshots/.gitattributes b/tests/_data/snapshots/.gitattributes new file mode 100644 index 00000000..3c0b93a6 --- /dev/null +++ b/tests/_data/snapshots/.gitattributes @@ -0,0 +1,5 @@ +# files are compared bype-wise, so they need to be treated as binary +* linguist-generated +*.bin binary +*.xml*.bin diff=xml +*.json*.bin diff=json diff --git a/tests/_data/snapshots/README.md b/tests/_data/snapshots/README.md new file mode 100644 index 00000000..f9743244 --- /dev/null +++ b/tests/_data/snapshots/README.md @@ -0,0 +1,13 @@ +# TEST FIXTURES + +## RE-CREATION + +Some assets here can be (re-)created automatically, by setting the env var `CDX_TEST_RECREATE_SNAPSHOTS=1`. +It might also help to set `PYTHONHASHSEED=0`! +As a shortcut just run: + +```shell +CDX_TEST_RECREATE_SNAPSHOTS=1 poetry run tox -e py +``` + +The files will be written as is, which might not be human-readable. feel free to reformat the files manually. diff --git a/tests/_data/snapshots/cli/purls-normal.json.bin b/tests/_data/snapshots/cli/purls-normal.json.bin new file mode 100644 index 00000000..2e88d0ba --- /dev/null +++ b/tests/_data/snapshots/cli/purls-normal.json.bin @@ -0,0 +1,44 @@ +{ + "components": [ + { + "bom-ref": "my-lib-A", + "components": [ + { + "bom-ref": "my-lib-A-sub", + "name": "my-lib-A-sub", + "purl": "pkg:generic/testing/my-lib-A-sub?foo=bar#bazz", + "type": "application" + } + ], + "name": "my-lib-A", + "purl": "pkg:generic/testing/my-lib-A@2?lol=rofl", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "my-app" + }, + { + "ref": "my-lib-A" + } + ], + "metadata": { + "component": { + "bom-ref": "my-app", + "name": "my-app", + "purl": "pkg:generic/testing/my-app@1", + "type": "application" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/cli/purls-short.json.bin b/tests/_data/snapshots/cli/purls-short.json.bin new file mode 100644 index 00000000..33d7e39f --- /dev/null +++ b/tests/_data/snapshots/cli/purls-short.json.bin @@ -0,0 +1,44 @@ +{ + "components": [ + { + "bom-ref": "my-lib-A", + "components": [ + { + "bom-ref": "my-lib-A-sub", + "name": "my-lib-A-sub", + "purl": "pkg:generic/testing/my-lib-A-sub", + "type": "application" + } + ], + "name": "my-lib-A", + "purl": "pkg:generic/testing/my-lib-A@2", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "my-app" + }, + { + "ref": "my-lib-A" + } + ], + "metadata": { + "component": { + "bom-ref": "my-app", + "name": "my-app", + "purl": "pkg:generic/testing/my-app@1", + "type": "application" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_editable-self_1.0.xml.bin b/tests/_data/snapshots/environment/venv_editable-self_1.0.xml.bin new file mode 100644 index 00000000..f54d9d57 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_editable-self_1.0.xml.bin @@ -0,0 +1,12 @@ + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + false + + + diff --git a/tests/_data/snapshots/environment/venv_editable-self_1.1.xml.bin b/tests/_data/snapshots/environment/venv_editable-self_1.1.xml.bin new file mode 100644 index 00000000..4e08d28a --- /dev/null +++ b/tests/_data/snapshots/environment/venv_editable-self_1.1.xml.bin @@ -0,0 +1,22 @@ + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + diff --git a/tests/_data/snapshots/environment/venv_editable-self_1.2.json.bin b/tests/_data/snapshots/environment/venv_editable-self_1.2.json.bin new file mode 100644 index 00000000..d1c2f622 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_editable-self_1.2.json.bin @@ -0,0 +1,62 @@ +{ + "components": [ + { + "bom-ref": "six==1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/benjaminp/six" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "root-component" + }, + { + "ref": "six==1.16.0" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "install the current project as an editable", + "name": "editable-self", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_editable-self_1.2.xml.bin b/tests/_data/snapshots/environment/venv_editable-self_1.2.xml.bin new file mode 100644 index 00000000..7a3ad29a --- /dev/null +++ b/tests/_data/snapshots/environment/venv_editable-self_1.2.xml.bin @@ -0,0 +1,47 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + editable-self + 0.1.0 + install the current project as an editable + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_editable-self_1.3.json.bin b/tests/_data/snapshots/environment/venv_editable-self_1.3.json.bin new file mode 100644 index 00000000..c9e9b4e6 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_editable-self_1.3.json.bin @@ -0,0 +1,68 @@ +{ + "components": [ + { + "bom-ref": "six==1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/benjaminp/six" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "root-component" + }, + { + "ref": "six==1.16.0" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "install the current project as an editable", + "name": "editable-self", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_editable-self_1.3.xml.bin b/tests/_data/snapshots/environment/venv_editable-self_1.3.xml.bin new file mode 100644 index 00000000..581ab83a --- /dev/null +++ b/tests/_data/snapshots/environment/venv_editable-self_1.3.xml.bin @@ -0,0 +1,50 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + editable-self + 0.1.0 + install the current project as an editable + + + true + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_editable-self_1.4.json.bin b/tests/_data/snapshots/environment/venv_editable-self_1.4.json.bin new file mode 100644 index 00000000..1515817b --- /dev/null +++ b/tests/_data/snapshots/environment/venv_editable-self_1.4.json.bin @@ -0,0 +1,64 @@ +{ + "components": [ + { + "bom-ref": "six==1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/benjaminp/six" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "root-component" + }, + { + "ref": "six==1.16.0" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "install the current project as an editable", + "name": "editable-self", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_editable-self_1.4.xml.bin b/tests/_data/snapshots/environment/venv_editable-self_1.4.xml.bin new file mode 100644 index 00000000..c5f314ff --- /dev/null +++ b/tests/_data/snapshots/environment/venv_editable-self_1.4.xml.bin @@ -0,0 +1,77 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + editable-self + 0.1.0 + install the current project as an editable + + + true + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_editable-self_1.5.json.bin b/tests/_data/snapshots/environment/venv_editable-self_1.5.json.bin new file mode 100644 index 00000000..01f7a341 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_editable-self_1.5.json.bin @@ -0,0 +1,64 @@ +{ + "components": [ + { + "bom-ref": "six==1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/benjaminp/six" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "root-component" + }, + { + "ref": "six==1.16.0" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "install the current project as an editable", + "name": "editable-self", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_editable-self_1.5.xml.bin b/tests/_data/snapshots/environment/venv_editable-self_1.5.xml.bin new file mode 100644 index 00000000..4ddf82f6 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_editable-self_1.5.xml.bin @@ -0,0 +1,77 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + editable-self + 0.1.0 + install the current project as an editable + + + true + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_local_1.0.xml.bin b/tests/_data/snapshots/environment/venv_local_1.0.xml.bin new file mode 100644 index 00000000..13deb487 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_local_1.0.xml.bin @@ -0,0 +1,23 @@ + + + + + package-a + 23.42 + some package A + false + + + package-b + 23.42 + some package B + false + + + package-c + 23.42 + some package C + false + + + diff --git a/tests/_data/snapshots/environment/venv_local_1.1.xml.bin b/tests/_data/snapshots/environment/venv_local_1.1.xml.bin new file mode 100644 index 00000000..74e71ad1 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_local_1.1.xml.bin @@ -0,0 +1,53 @@ + + + + + package-a + 23.42 + some package A + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl + PackageSource: Archive + + + + + package-b + 23.42 + some package B + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz + PackageSource: Archive + + + + + package-c + 23.42 + some package C + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/c + PackageSource: Local + + + + + diff --git a/tests/_data/snapshots/environment/venv_local_1.2.json.bin b/tests/_data/snapshots/environment/venv_local_1.2.json.bin new file mode 100644 index 00000000..83c6d8b0 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_local_1.2.json.bin @@ -0,0 +1,106 @@ +{ + "components": [ + { + "bom-ref": "package-a==23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "package-a", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b==23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "package-b", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c==23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "PackageSource: Local", + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/c" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "package-c", + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "ref": "package-a==23.42" + }, + { + "ref": "package-b==23.42" + }, + { + "ref": "package-c==23.42" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_local_1.2.xml.bin b/tests/_data/snapshots/environment/venv_local_1.2.xml.bin new file mode 100644 index 00000000..9bd185ef --- /dev/null +++ b/tests/_data/snapshots/environment/venv_local_1.2.xml.bin @@ -0,0 +1,78 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + local + 0.1.0 + packages from local paths + + + + + package-a + 23.42 + some package A + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl + PackageSource: Archive + + + + + package-b + 23.42 + some package B + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz + PackageSource: Archive + + + + + package-c + 23.42 + some package C + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/c + PackageSource: Local + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_local_1.3.json.bin b/tests/_data/snapshots/environment/venv_local_1.3.json.bin new file mode 100644 index 00000000..3e09434a --- /dev/null +++ b/tests/_data/snapshots/environment/venv_local_1.3.json.bin @@ -0,0 +1,124 @@ +{ + "components": [ + { + "bom-ref": "package-a==23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f37ac4a44c1dcce7f3d6203d45e9d1945a28f69fbfb44f418c44ea73c77de86" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "package-a", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b==23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "33d37cf528bc0b20ec8ffd9fa21170e7caadb1b9f15eb559d1937fa4c82d3d40" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "package-b", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c==23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "PackageSource: Local", + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/c" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "package-c", + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "ref": "package-a==23.42" + }, + { + "ref": "package-b==23.42" + }, + { + "ref": "package-c==23.42" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_local_1.3.xml.bin b/tests/_data/snapshots/environment/venv_local_1.3.xml.bin new file mode 100644 index 00000000..9c663c20 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_local_1.3.xml.bin @@ -0,0 +1,87 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + 23.42 + some package A + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl + PackageSource: Archive + + 4f37ac4a44c1dcce7f3d6203d45e9d1945a28f69fbfb44f418c44ea73c77de86 + + + + + + package-b + 23.42 + some package B + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz + PackageSource: Archive + + 33d37cf528bc0b20ec8ffd9fa21170e7caadb1b9f15eb559d1937fa4c82d3d40 + + + + + + package-c + 23.42 + some package C + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/c + PackageSource: Local + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_local_1.4.json.bin b/tests/_data/snapshots/environment/venv_local_1.4.json.bin new file mode 100644 index 00000000..e6298492 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_local_1.4.json.bin @@ -0,0 +1,120 @@ +{ + "components": [ + { + "bom-ref": "package-a==23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f37ac4a44c1dcce7f3d6203d45e9d1945a28f69fbfb44f418c44ea73c77de86" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "package-a", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b==23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "33d37cf528bc0b20ec8ffd9fa21170e7caadb1b9f15eb559d1937fa4c82d3d40" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "package-b", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c==23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "PackageSource: Local", + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/c" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "package-c", + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "ref": "package-a==23.42" + }, + { + "ref": "package-b==23.42" + }, + { + "ref": "package-c==23.42" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_local_1.4.xml.bin b/tests/_data/snapshots/environment/venv_local_1.4.xml.bin new file mode 100644 index 00000000..c3ad1442 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_local_1.4.xml.bin @@ -0,0 +1,114 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + 23.42 + some package A + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl + PackageSource: Archive + + 4f37ac4a44c1dcce7f3d6203d45e9d1945a28f69fbfb44f418c44ea73c77de86 + + + + + + package-b + 23.42 + some package B + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz + PackageSource: Archive + + 33d37cf528bc0b20ec8ffd9fa21170e7caadb1b9f15eb559d1937fa4c82d3d40 + + + + + + package-c + 23.42 + some package C + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/c + PackageSource: Local + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_local_1.5.json.bin b/tests/_data/snapshots/environment/venv_local_1.5.json.bin new file mode 100644 index 00000000..948eeb0b --- /dev/null +++ b/tests/_data/snapshots/environment/venv_local_1.5.json.bin @@ -0,0 +1,120 @@ +{ + "components": [ + { + "bom-ref": "package-a==23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f37ac4a44c1dcce7f3d6203d45e9d1945a28f69fbfb44f418c44ea73c77de86" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "package-a", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b==23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "33d37cf528bc0b20ec8ffd9fa21170e7caadb1b9f15eb559d1937fa4c82d3d40" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "package-b", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c==23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "PackageSource: Local", + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/c" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "package-c", + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "ref": "package-a==23.42" + }, + { + "ref": "package-b==23.42" + }, + { + "ref": "package-c==23.42" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_local_1.5.xml.bin b/tests/_data/snapshots/environment/venv_local_1.5.xml.bin new file mode 100644 index 00000000..13138e0a --- /dev/null +++ b/tests/_data/snapshots/environment/venv_local_1.5.xml.bin @@ -0,0 +1,114 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + 23.42 + some package A + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl + PackageSource: Archive + + 4f37ac4a44c1dcce7f3d6203d45e9d1945a28f69fbfb44f418c44ea73c77de86 + + + + + + package-b + 23.42 + some package B + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package-b-23.42.tar.gz + PackageSource: Archive + + 33d37cf528bc0b20ec8ffd9fa21170e7caadb1b9f15eb559d1937fa4c82d3d40 + + + + + + package-c + 23.42 + some package C + + + Apache-2.0 + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/c + PackageSource: Local + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_no-deps_1.0.xml.bin b/tests/_data/snapshots/environment/venv_no-deps_1.0.xml.bin new file mode 100644 index 00000000..acb06612 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_no-deps_1.0.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/environment/venv_no-deps_1.1.xml.bin b/tests/_data/snapshots/environment/venv_no-deps_1.1.xml.bin new file mode 100644 index 00000000..640f73ff --- /dev/null +++ b/tests/_data/snapshots/environment/venv_no-deps_1.1.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/environment/venv_no-deps_1.2.json.bin b/tests/_data/snapshots/environment/venv_no-deps_1.2.json.bin new file mode 100644 index 00000000..6de193b1 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_no-deps_1.2.json.bin @@ -0,0 +1,69 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, but no deps", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "no-deps", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_no-deps_1.2.xml.bin b/tests/_data/snapshots/environment/venv_no-deps_1.2.xml.bin new file mode 100644 index 00000000..a982f421 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_no-deps_1.2.xml.bin @@ -0,0 +1,54 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + no-deps + 0.1.0 + packages with all meta, but no deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_no-deps_1.3.json.bin b/tests/_data/snapshots/environment/venv_no-deps_1.3.json.bin new file mode 100644 index 00000000..4922946d --- /dev/null +++ b/tests/_data/snapshots/environment/venv_no-deps_1.3.json.bin @@ -0,0 +1,75 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, but no deps", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "no-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_no-deps_1.3.xml.bin b/tests/_data/snapshots/environment/venv_no-deps_1.3.xml.bin new file mode 100644 index 00000000..f70c1e34 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_no-deps_1.3.xml.bin @@ -0,0 +1,57 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + no-deps + 0.1.0 + packages with all meta, but no deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + + diff --git a/tests/_data/snapshots/environment/venv_no-deps_1.4.json.bin b/tests/_data/snapshots/environment/venv_no-deps_1.4.json.bin new file mode 100644 index 00000000..354ca1e5 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_no-deps_1.4.json.bin @@ -0,0 +1,71 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, but no deps", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "no-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_no-deps_1.4.xml.bin b/tests/_data/snapshots/environment/venv_no-deps_1.4.xml.bin new file mode 100644 index 00000000..3a1fc66d --- /dev/null +++ b/tests/_data/snapshots/environment/venv_no-deps_1.4.xml.bin @@ -0,0 +1,84 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + no-deps + 0.1.0 + packages with all meta, but no deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + + diff --git a/tests/_data/snapshots/environment/venv_no-deps_1.5.json.bin b/tests/_data/snapshots/environment/venv_no-deps_1.5.json.bin new file mode 100644 index 00000000..e246c19d --- /dev/null +++ b/tests/_data/snapshots/environment/venv_no-deps_1.5.json.bin @@ -0,0 +1,71 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, but no deps", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "no-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_no-deps_1.5.xml.bin b/tests/_data/snapshots/environment/venv_no-deps_1.5.xml.bin new file mode 100644 index 00000000..bf68b2e3 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_no-deps_1.5.xml.bin @@ -0,0 +1,84 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + no-deps + 0.1.0 + packages with all meta, but no deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + + diff --git a/tests/_data/snapshots/environment/venv_via-pipenv_1.0.xml.bin b/tests/_data/snapshots/environment/venv_via-pipenv_1.0.xml.bin new file mode 100644 index 00000000..2316393a --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-pipenv_1.0.xml.bin @@ -0,0 +1,12 @@ + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + false + + + diff --git a/tests/_data/snapshots/environment/venv_via-pipenv_1.1.xml.bin b/tests/_data/snapshots/environment/venv_via-pipenv_1.1.xml.bin new file mode 100644 index 00000000..31bbeab3 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-pipenv_1.1.xml.bin @@ -0,0 +1,22 @@ + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + + + MIT + + + pkg:pypi/toml@0.10.2 + + + https://github.com/uiri/toml + from packaging metadata: Home-page + + + + + diff --git a/tests/_data/snapshots/environment/venv_via-pipenv_1.2.json.bin b/tests/_data/snapshots/environment/venv_via-pipenv_1.2.json.bin new file mode 100644 index 00000000..b834d0c1 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-pipenv_1.2.json.bin @@ -0,0 +1,99 @@ +{ + "components": [ + { + "bom-ref": "toml==0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/uiri/toml" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml==0.10.2" + ], + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, and some deps", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "via-pipenv", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_via-pipenv_1.2.xml.bin b/tests/_data/snapshots/environment/venv_via-pipenv_1.2.xml.bin new file mode 100644 index 00000000..1efec495 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-pipenv_1.2.xml.bin @@ -0,0 +1,76 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + via-pipenv + 0.1.0 + packages with all meta, and some deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + + + MIT + + + pkg:pypi/toml@0.10.2 + + + https://github.com/uiri/toml + from packaging metadata: Home-page + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_via-pipenv_1.3.json.bin b/tests/_data/snapshots/environment/venv_via-pipenv_1.3.json.bin new file mode 100644 index 00000000..96f86ca8 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-pipenv_1.3.json.bin @@ -0,0 +1,105 @@ +{ + "components": [ + { + "bom-ref": "toml==0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/uiri/toml" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml==0.10.2" + ], + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, and some deps", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "via-pipenv", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_via-pipenv_1.3.xml.bin b/tests/_data/snapshots/environment/venv_via-pipenv_1.3.xml.bin new file mode 100644 index 00000000..91b0d73d --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-pipenv_1.3.xml.bin @@ -0,0 +1,79 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + via-pipenv + 0.1.0 + packages with all meta, and some deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + + + MIT + + + pkg:pypi/toml@0.10.2 + + + https://github.com/uiri/toml + from packaging metadata: Home-page + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_via-pipenv_1.4.json.bin b/tests/_data/snapshots/environment/venv_via-pipenv_1.4.json.bin new file mode 100644 index 00000000..1fe8a128 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-pipenv_1.4.json.bin @@ -0,0 +1,101 @@ +{ + "components": [ + { + "bom-ref": "toml==0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/uiri/toml" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml==0.10.2" + ], + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, and some deps", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "via-pipenv", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_via-pipenv_1.4.xml.bin b/tests/_data/snapshots/environment/venv_via-pipenv_1.4.xml.bin new file mode 100644 index 00000000..7717aa82 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-pipenv_1.4.xml.bin @@ -0,0 +1,106 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + via-pipenv + 0.1.0 + packages with all meta, and some deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + + + MIT + + + pkg:pypi/toml@0.10.2 + + + https://github.com/uiri/toml + from packaging metadata: Home-page + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_via-pipenv_1.5.json.bin b/tests/_data/snapshots/environment/venv_via-pipenv_1.5.json.bin new file mode 100644 index 00000000..ba06f83c --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-pipenv_1.5.json.bin @@ -0,0 +1,101 @@ +{ + "components": [ + { + "bom-ref": "toml==0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/uiri/toml" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml==0.10.2" + ], + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, and some deps", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "via-pipenv", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_via-pipenv_1.5.xml.bin b/tests/_data/snapshots/environment/venv_via-pipenv_1.5.xml.bin new file mode 100644 index 00000000..4e309e52 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-pipenv_1.5.xml.bin @@ -0,0 +1,106 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + via-pipenv + 0.1.0 + packages with all meta, and some deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + + + MIT + + + pkg:pypi/toml@0.10.2 + + + https://github.com/uiri/toml + from packaging metadata: Home-page + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_via-poetry_1.0.xml.bin b/tests/_data/snapshots/environment/venv_via-poetry_1.0.xml.bin new file mode 100644 index 00000000..2316393a --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-poetry_1.0.xml.bin @@ -0,0 +1,12 @@ + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + false + + + diff --git a/tests/_data/snapshots/environment/venv_via-poetry_1.1.xml.bin b/tests/_data/snapshots/environment/venv_via-poetry_1.1.xml.bin new file mode 100644 index 00000000..31bbeab3 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-poetry_1.1.xml.bin @@ -0,0 +1,22 @@ + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + + + MIT + + + pkg:pypi/toml@0.10.2 + + + https://github.com/uiri/toml + from packaging metadata: Home-page + + + + + diff --git a/tests/_data/snapshots/environment/venv_via-poetry_1.2.json.bin b/tests/_data/snapshots/environment/venv_via-poetry_1.2.json.bin new file mode 100644 index 00000000..81fea90f --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-poetry_1.2.json.bin @@ -0,0 +1,99 @@ +{ + "components": [ + { + "bom-ref": "toml==0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/uiri/toml" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml==0.10.2" + ], + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, and some deps", + "externalReferences": [ + { + "comment": "from poetry: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from poetry url: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from poetry url: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from poetry url: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from poetry: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from poetry: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "via-poetry", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_via-poetry_1.2.xml.bin b/tests/_data/snapshots/environment/venv_via-poetry_1.2.xml.bin new file mode 100644 index 00000000..2dd144db --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-poetry_1.2.xml.bin @@ -0,0 +1,76 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + via-poetry + 0.1.0 + packages with all meta, and some deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from poetry: documentation + + + https://oss.acme.org/my-project/bugs/ + from poetry url: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from poetry url: Funding + + + https://oss.acme.org/my-project/changelog/ + from poetry url: Change log + + + https://oss.acme.org/my-project.git + from poetry: repository + + + https://oss.acme.org/my-project/ + from poetry: homepage + + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + + + MIT + + + pkg:pypi/toml@0.10.2 + + + https://github.com/uiri/toml + from packaging metadata: Home-page + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_via-poetry_1.3.json.bin b/tests/_data/snapshots/environment/venv_via-poetry_1.3.json.bin new file mode 100644 index 00000000..54a91215 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-poetry_1.3.json.bin @@ -0,0 +1,105 @@ +{ + "components": [ + { + "bom-ref": "toml==0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/uiri/toml" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml==0.10.2" + ], + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, and some deps", + "externalReferences": [ + { + "comment": "from poetry: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from poetry url: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from poetry url: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from poetry url: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from poetry: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from poetry: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "via-poetry", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_via-poetry_1.3.xml.bin b/tests/_data/snapshots/environment/venv_via-poetry_1.3.xml.bin new file mode 100644 index 00000000..a1ec9fa9 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-poetry_1.3.xml.bin @@ -0,0 +1,79 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + via-poetry + 0.1.0 + packages with all meta, and some deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from poetry: documentation + + + https://oss.acme.org/my-project/bugs/ + from poetry url: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from poetry url: Funding + + + https://oss.acme.org/my-project/changelog/ + from poetry url: Change log + + + https://oss.acme.org/my-project.git + from poetry: repository + + + https://oss.acme.org/my-project/ + from poetry: homepage + + + + + true + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + + + MIT + + + pkg:pypi/toml@0.10.2 + + + https://github.com/uiri/toml + from packaging metadata: Home-page + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_via-poetry_1.4.json.bin b/tests/_data/snapshots/environment/venv_via-poetry_1.4.json.bin new file mode 100644 index 00000000..b4255d0a --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-poetry_1.4.json.bin @@ -0,0 +1,101 @@ +{ + "components": [ + { + "bom-ref": "toml==0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/uiri/toml" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml==0.10.2" + ], + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, and some deps", + "externalReferences": [ + { + "comment": "from poetry: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from poetry url: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from poetry url: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from poetry url: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from poetry: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from poetry: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "via-poetry", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_via-poetry_1.4.xml.bin b/tests/_data/snapshots/environment/venv_via-poetry_1.4.xml.bin new file mode 100644 index 00000000..64dcc67e --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-poetry_1.4.xml.bin @@ -0,0 +1,106 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + via-poetry + 0.1.0 + packages with all meta, and some deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from poetry: documentation + + + https://oss.acme.org/my-project/bugs/ + from poetry url: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from poetry url: Funding + + + https://oss.acme.org/my-project/changelog/ + from poetry url: Change log + + + https://oss.acme.org/my-project.git + from poetry: repository + + + https://oss.acme.org/my-project/ + from poetry: homepage + + + + + true + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + + + MIT + + + pkg:pypi/toml@0.10.2 + + + https://github.com/uiri/toml + from packaging metadata: Home-page + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_via-poetry_1.5.json.bin b/tests/_data/snapshots/environment/venv_via-poetry_1.5.json.bin new file mode 100644 index 00000000..942d9e23 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-poetry_1.5.json.bin @@ -0,0 +1,101 @@ +{ + "components": [ + { + "bom-ref": "toml==0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/uiri/toml" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml==0.10.2" + ], + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, and some deps", + "externalReferences": [ + { + "comment": "from poetry: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from poetry url: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from poetry url: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from poetry url: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from poetry: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from poetry: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "via-poetry", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_via-poetry_1.5.xml.bin b/tests/_data/snapshots/environment/venv_via-poetry_1.5.xml.bin new file mode 100644 index 00000000..709ba71f --- /dev/null +++ b/tests/_data/snapshots/environment/venv_via-poetry_1.5.xml.bin @@ -0,0 +1,106 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + via-poetry + 0.1.0 + packages with all meta, and some deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from poetry: documentation + + + https://oss.acme.org/my-project/bugs/ + from poetry url: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from poetry url: Funding + + + https://oss.acme.org/my-project/changelog/ + from poetry url: Change log + + + https://oss.acme.org/my-project.git + from poetry: repository + + + https://oss.acme.org/my-project/ + from poetry: homepage + + + + + true + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + + + MIT + + + pkg:pypi/toml@0.10.2 + + + https://github.com/uiri/toml + from packaging metadata: Home-page + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_with-extras_1.0.xml.bin b/tests/_data/snapshots/environment/venv_with-extras_1.0.xml.bin new file mode 100644 index 00000000..efa7100a --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-extras_1.0.xml.bin @@ -0,0 +1,201 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + false + + + attrs + 23.1.0 + Classes Without Boilerplate + pkg:pypi/attrs@23.1.0 + false + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + pkg:pypi/boolean.py@4.0 + false + + + cyclonedx-python-lib + 6.0.0 + Python library for CycloneDX + pkg:pypi/cyclonedx-python-lib@6.0.0 + false + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + pkg:pypi/defusedxml@0.7.1 + false + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + pkg:pypi/fqdn@1.5.1 + false + + + idna + 3.6 + Internationalized Domain Names in Applications (IDNA) + pkg:pypi/idna@3.6 + false + + + importlib-resources + 6.1.1 + Read resources from Python packages + pkg:pypi/importlib-resources@6.1.1 + false + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + false + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + pkg:pypi/jsonpointer@2.4 + false + + + jsonschema + 4.20.0 + An implementation of JSON Schema validation for Python + pkg:pypi/jsonschema@4.20.0 + false + + + jsonschema-specifications + 2023.11.2 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + pkg:pypi/jsonschema-specifications@2023.11.2 + false + + + license-expression + 30.2.0 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + pkg:pypi/license-expression@30.2.0 + false + + + lxml + 4.9.4 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + pkg:pypi/lxml@4.9.4 + false + + + packageurl-python + 0.13.1 + A purl aka. Package URL parser and builder + pkg:pypi/packageurl-python@0.13.1 + false + + + pkgutil_resolve_name + 1.3.10 + Resolve a name to an object. + pkg:pypi/pkgutil-resolve-name@1.3.10 + false + + + py-serializable + 0.16.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + pkg:pypi/py-serializable@0.16.0 + false + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + false + + + referencing + 0.32.0 + JSON Referencing + Python + pkg:pypi/referencing@0.32.0 + false + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + pkg:pypi/rfc3339-validator@0.1.4 + false + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + pkg:pypi/rfc3987@1.3.8 + false + + + rpds-py + 0.15.2 + Python bindings to Rust's persistent data structures (rpds) + pkg:pypi/rpds-py@0.15.2 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + false + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + pkg:pypi/sortedcontainers@2.4.0 + false + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + pkg:pypi/uri-template@1.3.0 + false + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + pkg:pypi/webcolors@1.13 + false + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0 + false + + + diff --git a/tests/_data/snapshots/environment/venv_with-extras_1.1.xml.bin b/tests/_data/snapshots/environment/venv_with-extras_1.1.xml.bin new file mode 100644 index 00000000..8e7c5574 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-extras_1.1.xml.bin @@ -0,0 +1,681 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://arrow.readthedocs.io + from packaging metadata Project-URL: Documentation + + + https://github.com/arrow-py/arrow/issues + from packaging metadata Project-URL: Issues + + + https://github.com/arrow-py/arrow + from packaging metadata Project-URL: Source + + + + + attrs + 23.1.0 + Classes Without Boilerplate + + + MIT + + + pkg:pypi/attrs@23.1.0 + + + https://www.attrs.org/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-attrs/attrs/issues + from packaging metadata Project-URL: Bug Tracker + + + https://github.com/python-attrs/attrs + from packaging metadata Project-URL: Source Code + + + https://github.com/sponsors/hynek + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi + from packaging metadata Project-URL: Tidelift + + + https://www.attrs.org/en/stable/changelog.html + from packaging metadata Project-URL: Changelog + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + + + BSD-2-Clause + + + pkg:pypi/boolean.py@4.0 + + + https://github.com/bastikr/boolean.py + from packaging metadata: Home-page + + + + + cyclonedx-python-lib + 6.0.0 + Python library for CycloneDX + + + Apache-2.0 + + + pkg:pypi/cyclonedx-python-lib@6.0.0 + + + https://cyclonedx-python-library.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/CycloneDX/cyclonedx-python-lib/issues + from packaging metadata Project-URL: Bug Tracker + + + https://owasp.org/donate/?reponame=www-project-cyclonedx&title=OWASP+CycloneDX + from packaging metadata Project-URL: Funding + + + https://github.com/CycloneDX/cyclonedx-python-lib + from packaging metadata Project-URL: Repository + + + https://github.com/CycloneDX/cyclonedx-python-lib/#readme + from packaging metadata: Home-page + + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + + + Python-2.0 + + + PSFL + + + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.python.org/pypi/defusedxml + from packaging metadata: Download-URL + + + https://github.com/tiran/defusedxml + from packaging metadata: Home-page + + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + + + MPL 2.0 + + + pkg:pypi/fqdn@1.5.1 + + + https://github.com/ypcrts/fqdn + from packaging metadata: Home-page + + + + + idna + 3.6 + Internationalized Domain Names in Applications (IDNA) + pkg:pypi/idna@3.6 + + + https://github.com/kjd/idna/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/kjd/idna + from packaging metadata Project-URL: Source + + + https://github.com/kjd/idna/blob/master/HISTORY.rst + from packaging metadata Project-URL: Changelog + + + + + importlib-resources + 6.1.1 + Read resources from Python packages + pkg:pypi/importlib-resources@6.1.1 + + + https://importlib-resources.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python/importlib_resources + from packaging metadata: Home-page + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + + + ISC + + + UNKNOWN + + + pkg:pypi/isoduration@20.11.0 + + + https://github.com/bolsote/isoduration/issues + from packaging metadata Project-URL: Bug Reports + + + https://github.com/bolsote/isoduration/blob/master/CHANGELOG + from packaging metadata Project-URL: Changelog + + + https://github.com/bolsote/isoduration + from packaging metadata Project-URL: Repository + + + https://github.com/bolsote/isoduration + from packaging metadata: Home-page + + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + + + Modified BSD License + + + pkg:pypi/jsonpointer@2.4 + + + https://github.com/stefankoegl/python-json-pointer + from packaging metadata: Home-page + + + + + jsonschema + 4.20.0 + An implementation of JSON Schema validation for Python + + + MIT + + + pkg:pypi/jsonschema@4.20.0 + + + https://python-jsonschema.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/jsonschema/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/jsonschema + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst + from packaging metadata Project-URL: Changelog + + + https://github.com/python-jsonschema/jsonschema + from packaging metadata Project-URL: Homepage + + + + + jsonschema-specifications + 2023.11.2 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + + + MIT + + + pkg:pypi/jsonschema-specifications@2023.11.2 + + + https://jsonschema-specifications.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/jsonschema-specifications/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/jsonschema-specifications + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-jsonschema-specifications?utm_source=pypi-jsonschema-specifications&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/jsonschema-specifications + from packaging metadata Project-URL: Homepage + + + + + license-expression + 30.2.0 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + + + Apache-2.0 + + + pkg:pypi/license-expression@30.2.0 + + + https://github.com/nexB/license-expression + from packaging metadata: Home-page + + + + + lxml + 4.9.4 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + + + BSD-3-Clause + + + pkg:pypi/lxml@4.9.4 + + + https://github.com/lxml/lxml + from packaging metadata Project-URL: Source + + + https://lxml.de/ + from packaging metadata: Home-page + + + + + packageurl-python + 0.13.1 + A purl aka. Package URL parser and builder + + + MIT + + + pkg:pypi/packageurl-python@0.13.1 + + + https://github.com/package-url/packageurl-python + from packaging metadata: Home-page + + + + + pkgutil_resolve_name + 1.3.10 + Resolve a name to an object. + + + MIT + + + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://github.com/graingert/pkgutil-resolve-name + from packaging metadata: Home-page + + + + + py-serializable + 0.16.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + + + Apache-2.0 + + + pkg:pypi/py-serializable@0.16.0 + + + https://github.com/madpah/serializable/issues + from packaging metadata Project-URL: Bug Tracker + + + https://github.com/madpah/serializable + from packaging metadata Project-URL: Repository + + + https://github.com/madpah/serializable + from packaging metadata: Home-page + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + + + Dual License + + + pkg:pypi/python-dateutil@2.8.2 + + + https://dateutil.readthedocs.io/en/stable/ + from packaging metadata Project-URL: Documentation + + + https://github.com/dateutil/dateutil + from packaging metadata Project-URL: Source + + + https://github.com/dateutil/dateutil + from packaging metadata: Home-page + + + + + referencing + 0.32.0 + JSON Referencing + Python + + + MIT + + + pkg:pypi/referencing@0.32.0 + + + https://referencing.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/referencing/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/referencing + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-referencing?utm_source=pypi-referencing&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/referencing + from packaging metadata Project-URL: Homepage + + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + + + MIT + + + MIT license + + + pkg:pypi/rfc3339-validator@0.1.4 + + + https://github.com/naimetti/rfc3339-validator + from packaging metadata: Home-page + + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + + + GPL-3.0-or-later + + + GNU GPLv3+ + + + pkg:pypi/rfc3987@1.3.8 + + + https://github.com/dgerber/rfc3987 + from packaging metadata: Download-URL + + + http://pypi.python.org/pypi/rfc3987 + from packaging metadata: Home-page + + + + + rpds-py + 0.15.2 + Python bindings to Rust's persistent data structures (rpds) + + + MIT + + + pkg:pypi/rpds-py@0.15.2 + + + https://rpds.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/crate-py/rpds/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/crate-py/rpds + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-rpds-py?utm_source=pypi-rpds-py&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/crate-py/rpds + from packaging metadata Project-URL: Homepage + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + + + Apache 2.0 + + + pkg:pypi/sortedcontainers@2.4.0 + + + http://www.grantjenks.com/docs/sortedcontainers/ + from packaging metadata: Home-page + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + + + Apache-2.0 license + + + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://gitter.im/python/typing + from packaging metadata Project-URL: Chat + + + https://github.com/python/typeshed/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/python-dateutil.md + from packaging metadata Project-URL: Changes + + + https://github.com/python/typeshed + from packaging metadata Project-URL: GitHub + + + https://github.com/python/typeshed + from packaging metadata: Home-page + + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + + + MIT + + + MIT License + + + pkg:pypi/uri-template@1.3.0 + + + https://gitlab.linss.com/open-source/python/uri-template + from packaging metadata Project-URL: homepage + + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + + + BSD-3-Clause + + + pkg:pypi/webcolors@1.13 + + + https://webcolors.readthedocs.io + from packaging metadata Project-URL: documentation + + + https://github.com/ubernostrum/webcolors + from packaging metadata Project-URL: homepage + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + + + MIT + + + pkg:pypi/zipp@3.17.0 + + + https://github.com/jaraco/zipp + from packaging metadata: Home-page + + + + + diff --git a/tests/_data/snapshots/environment/venv_with-extras_1.2.json.bin b/tests/_data/snapshots/environment/venv_with-extras_1.2.json.bin new file mode 100644 index 00000000..dddbc81c --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-extras_1.2.json.bin @@ -0,0 +1,1041 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://arrow.readthedocs.io" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/arrow-py/arrow/issues" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/arrow-py/arrow" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs==23.1.0", + "description": "Classes Without Boilerplate", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://www.attrs.org/" + }, + { + "comment": "from packaging metadata Project-URL: Bug Tracker", + "type": "issue-tracker", + "url": "https://github.com/python-attrs/attrs/issues" + }, + { + "comment": "from packaging metadata Project-URL: Source Code", + "type": "other", + "url": "https://github.com/python-attrs/attrs" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/hynek" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "other", + "url": "https://www.attrs.org/en/stable/changelog.html" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "attrs", + "purl": "pkg:pypi/attrs@23.1.0", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean.py==4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/bastikr/boolean.py" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-2-Clause" + } + } + ], + "name": "boolean.py", + "purl": "pkg:pypi/boolean.py@4.0", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib==6.0.0", + "description": "Python library for CycloneDX", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://cyclonedx-python-library.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Bug Tracker", + "type": "issue-tracker", + "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://owasp.org/donate/?reponame=www-project-cyclonedx&title=OWASP+CycloneDX" + }, + { + "comment": "from packaging metadata Project-URL: Repository", + "type": "vcs", + "url": "https://github.com/CycloneDX/cyclonedx-python-lib" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/CycloneDX/cyclonedx-python-lib/#readme" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "cyclonedx-python-lib", + "purl": "pkg:pypi/cyclonedx-python-lib@6.0.0", + "type": "library", + "version": "6.0.0" + }, + { + "bom-ref": "defusedxml==0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "externalReferences": [ + { + "comment": "from packaging metadata: Download-URL", + "type": "distribution", + "url": "https://pypi.python.org/pypi/defusedxml" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/tiran/defusedxml" + } + ], + "licenses": [ + { + "license": { + "id": "Python-2.0" + } + }, + { + "license": { + "name": "PSFL" + } + } + ], + "name": "defusedxml", + "purl": "pkg:pypi/defusedxml@0.7.1", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn==1.5.1", + "description": "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/ypcrts/fqdn" + } + ], + "licenses": [ + { + "license": { + "name": "MPL 2.0" + } + } + ], + "name": "fqdn", + "purl": "pkg:pypi/fqdn@1.5.1", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna==3.6", + "description": "Internationalized Domain Names in Applications (IDNA)", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Issue tracker", + "type": "issue-tracker", + "url": "https://github.com/kjd/idna/issues" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/kjd/idna" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "other", + "url": "https://github.com/kjd/idna/blob/master/HISTORY.rst" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@3.6", + "type": "library", + "version": "3.6" + }, + { + "bom-ref": "importlib-resources==6.1.1", + "description": "Read resources from Python packages", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://importlib-resources.readthedocs.io/" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/python/importlib_resources" + } + ], + "name": "importlib-resources", + "purl": "pkg:pypi/importlib-resources@6.1.1", + "type": "library", + "version": "6.1.1" + }, + { + "bom-ref": "isoduration==20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Bug Reports", + "type": "issue-tracker", + "url": "https://github.com/bolsote/isoduration/issues" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "other", + "url": "https://github.com/bolsote/isoduration/blob/master/CHANGELOG" + }, + { + "comment": "from packaging metadata Project-URL: Repository", + "type": "vcs", + "url": "https://github.com/bolsote/isoduration" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/bolsote/isoduration" + } + ], + "licenses": [ + { + "license": { + "id": "ISC" + } + }, + { + "license": { + "name": "UNKNOWN" + } + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer==2.4", + "description": "Identify specific nodes in a JSON document (RFC 6901) ", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/stefankoegl/python-json-pointer" + } + ], + "licenses": [ + { + "license": { + "name": "Modified BSD License" + } + } + ], + "name": "jsonpointer", + "purl": "pkg:pypi/jsonpointer@2.4", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema==4.20.0", + "description": "An implementation of JSON Schema validation for Python", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://python-jsonschema.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/python-jsonschema/jsonschema/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/python-jsonschema/jsonschema" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "other", + "url": "https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/python-jsonschema/jsonschema" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "jsonschema", + "purl": "pkg:pypi/jsonschema@4.20.0", + "type": "library", + "version": "4.20.0" + }, + { + "bom-ref": "jsonschema-specifications==2023.11.2", + "description": "The JSON Schema meta-schemas and vocabularies, exposed as a Registry", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://jsonschema-specifications.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/python-jsonschema/jsonschema-specifications/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/python-jsonschema/jsonschema-specifications" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-jsonschema-specifications?utm_source=pypi-jsonschema-specifications&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/python-jsonschema/jsonschema-specifications" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "jsonschema-specifications", + "purl": "pkg:pypi/jsonschema-specifications@2023.11.2", + "type": "library", + "version": "2023.11.2" + }, + { + "bom-ref": "license-expression==30.2.0", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/nexB/license-expression" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "license-expression", + "purl": "pkg:pypi/license-expression@30.2.0", + "type": "library", + "version": "30.2.0" + }, + { + "bom-ref": "lxml==4.9.4", + "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/lxml/lxml" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://lxml.de/" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "name": "lxml", + "purl": "pkg:pypi/lxml@4.9.4", + "type": "library", + "version": "4.9.4" + }, + { + "bom-ref": "packageurl-python==0.13.1", + "description": "A purl aka. Package URL parser and builder", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/package-url/packageurl-python" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python@0.13.1", + "type": "library", + "version": "0.13.1" + }, + { + "bom-ref": "pkgutil_resolve_name==1.3.10", + "description": "Resolve a name to an object.", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/graingert/pkgutil-resolve-name" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "pkgutil_resolve_name", + "purl": "pkg:pypi/pkgutil-resolve-name@1.3.10", + "type": "library", + "version": "1.3.10" + }, + { + "bom-ref": "py-serializable==0.16.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Bug Tracker", + "type": "issue-tracker", + "url": "https://github.com/madpah/serializable/issues" + }, + { + "comment": "from packaging metadata Project-URL: Repository", + "type": "vcs", + "url": "https://github.com/madpah/serializable" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/madpah/serializable" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "py-serializable", + "purl": "pkg:pypi/py-serializable@0.16.0", + "type": "library", + "version": "0.16.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://dateutil.readthedocs.io/en/stable/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/dateutil/dateutil" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/dateutil/dateutil" + } + ], + "licenses": [ + { + "license": { + "name": "Dual License" + } + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing==0.32.0", + "description": "JSON Referencing + Python", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://referencing.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/python-jsonschema/referencing/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/python-jsonschema/referencing" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-referencing?utm_source=pypi-referencing&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/python-jsonschema/referencing" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "referencing", + "purl": "pkg:pypi/referencing@0.32.0", + "type": "library", + "version": "0.32.0" + }, + { + "bom-ref": "rfc3339-validator==0.1.4", + "description": "A pure python RFC3339 validator", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/naimetti/rfc3339-validator" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "MIT license" + } + } + ], + "name": "rfc3339-validator", + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987==1.3.8", + "description": "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)", + "externalReferences": [ + { + "comment": "from packaging metadata: Download-URL", + "type": "distribution", + "url": "https://github.com/dgerber/rfc3987" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "http://pypi.python.org/pypi/rfc3987" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-3.0-or-later" + } + }, + { + "license": { + "name": "GNU GPLv3+" + } + } + ], + "name": "rfc3987", + "purl": "pkg:pypi/rfc3987@1.3.8", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py==0.15.2", + "description": "Python bindings to Rust's persistent data structures (rpds)", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://rpds.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/crate-py/rpds/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/crate-py/rpds" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-rpds-py?utm_source=pypi-rpds-py&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/crate-py/rpds" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "rpds-py", + "purl": "pkg:pypi/rpds-py@0.15.2", + "type": "library", + "version": "0.15.2" + }, + { + "bom-ref": "six==1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/benjaminp/six" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers==2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "http://www.grantjenks.com/docs/sortedcontainers/" + } + ], + "licenses": [ + { + "license": { + "name": "Apache 2.0" + } + } + ], + "name": "sortedcontainers", + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Chat", + "type": "chat", + "url": "https://gitter.im/python/typing" + }, + { + "comment": "from packaging metadata Project-URL: Issue tracker", + "type": "issue-tracker", + "url": "https://github.com/python/typeshed/issues" + }, + { + "comment": "from packaging metadata Project-URL: Changes", + "type": "other", + "url": "https://github.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/python-dateutil.md" + }, + { + "comment": "from packaging metadata Project-URL: GitHub", + "type": "vcs", + "url": "https://github.com/python/typeshed" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/python/typeshed" + } + ], + "licenses": [ + { + "license": { + "name": "Apache-2.0 license" + } + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template==1.3.0", + "description": "RFC 6570 URI Template Processor", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: homepage", + "type": "website", + "url": "https://gitlab.linss.com/open-source/python/uri-template" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "MIT License" + } + } + ], + "name": "uri-template", + "purl": "pkg:pypi/uri-template@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors==1.13", + "description": "A library for working with the color formats defined by HTML and CSS.", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: documentation", + "type": "documentation", + "url": "https://webcolors.readthedocs.io" + }, + { + "comment": "from packaging metadata Project-URL: homepage", + "type": "website", + "url": "https://github.com/ubernostrum/webcolors" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "name": "webcolors", + "purl": "pkg:pypi/webcolors@1.13", + "type": "library", + "version": "1.13" + }, + { + "bom-ref": "zipp==3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/jaraco/zipp" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil==2.8.2", + "types-python-dateutil==2.8.19.14" + ], + "ref": "arrow==1.3.0" + }, + { + "ref": "attrs==23.1.0" + }, + { + "ref": "boolean.py==4.0" + }, + { + "dependsOn": [ + "jsonschema==4.20.0", + "license-expression==30.2.0", + "lxml==4.9.4", + "packageurl-python==0.13.1", + "py-serializable==0.16.0", + "sortedcontainers==2.4.0" + ], + "ref": "cyclonedx-python-lib==6.0.0" + }, + { + "ref": "defusedxml==0.7.1" + }, + { + "ref": "fqdn==1.5.1" + }, + { + "ref": "idna==3.6" + }, + { + "dependsOn": [ + "zipp==3.17.0" + ], + "ref": "importlib-resources==6.1.1" + }, + { + "dependsOn": [ + "arrow==1.3.0" + ], + "ref": "isoduration==20.11.0" + }, + { + "ref": "jsonpointer==2.4" + }, + { + "dependsOn": [ + "importlib-resources==6.1.1", + "referencing==0.32.0" + ], + "ref": "jsonschema-specifications==2023.11.2" + }, + { + "dependsOn": [ + "attrs==23.1.0", + "fqdn==1.5.1", + "idna==3.6", + "importlib-resources==6.1.1", + "isoduration==20.11.0", + "jsonpointer==2.4", + "jsonschema-specifications==2023.11.2", + "referencing==0.32.0", + "rfc3339-validator==0.1.4", + "rfc3987==1.3.8", + "rpds-py==0.15.2", + "uri-template==1.3.0", + "webcolors==1.13" + ], + "ref": "jsonschema==4.20.0" + }, + { + "dependsOn": [ + "boolean.py==4.0" + ], + "ref": "license-expression==30.2.0" + }, + { + "ref": "lxml==4.9.4" + }, + { + "ref": "packageurl-python==0.13.1" + }, + { + "ref": "pkgutil_resolve_name==1.3.10" + }, + { + "dependsOn": [ + "defusedxml==0.7.1" + ], + "ref": "py-serializable==0.16.0" + }, + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "python-dateutil==2.8.2" + }, + { + "dependsOn": [ + "attrs==23.1.0", + "rpds-py==0.15.2" + ], + "ref": "referencing==0.32.0" + }, + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "rfc3339-validator==0.1.4" + }, + { + "ref": "rfc3987==1.3.8" + }, + { + "ref": "root-component" + }, + { + "ref": "rpds-py==0.15.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "sortedcontainers==2.4.0" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + }, + { + "ref": "uri-template==1.3.0" + }, + { + "ref": "webcolors==1.13" + }, + { + "ref": "zipp==3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_with-extras_1.2.xml.bin b/tests/_data/snapshots/environment/venv_with-extras_1.2.xml.bin new file mode 100644 index 00000000..43608693 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-extras_1.2.xml.bin @@ -0,0 +1,773 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://arrow.readthedocs.io + from packaging metadata Project-URL: Documentation + + + https://github.com/arrow-py/arrow/issues + from packaging metadata Project-URL: Issues + + + https://github.com/arrow-py/arrow + from packaging metadata Project-URL: Source + + + + + attrs + 23.1.0 + Classes Without Boilerplate + + + MIT + + + pkg:pypi/attrs@23.1.0 + + + https://www.attrs.org/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-attrs/attrs/issues + from packaging metadata Project-URL: Bug Tracker + + + https://github.com/python-attrs/attrs + from packaging metadata Project-URL: Source Code + + + https://github.com/sponsors/hynek + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi + from packaging metadata Project-URL: Tidelift + + + https://www.attrs.org/en/stable/changelog.html + from packaging metadata Project-URL: Changelog + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + + + BSD-2-Clause + + + pkg:pypi/boolean.py@4.0 + + + https://github.com/bastikr/boolean.py + from packaging metadata: Home-page + + + + + cyclonedx-python-lib + 6.0.0 + Python library for CycloneDX + + + Apache-2.0 + + + pkg:pypi/cyclonedx-python-lib@6.0.0 + + + https://cyclonedx-python-library.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/CycloneDX/cyclonedx-python-lib/issues + from packaging metadata Project-URL: Bug Tracker + + + https://owasp.org/donate/?reponame=www-project-cyclonedx&title=OWASP+CycloneDX + from packaging metadata Project-URL: Funding + + + https://github.com/CycloneDX/cyclonedx-python-lib + from packaging metadata Project-URL: Repository + + + https://github.com/CycloneDX/cyclonedx-python-lib/#readme + from packaging metadata: Home-page + + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + + + Python-2.0 + + + PSFL + + + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.python.org/pypi/defusedxml + from packaging metadata: Download-URL + + + https://github.com/tiran/defusedxml + from packaging metadata: Home-page + + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + + + MPL 2.0 + + + pkg:pypi/fqdn@1.5.1 + + + https://github.com/ypcrts/fqdn + from packaging metadata: Home-page + + + + + idna + 3.6 + Internationalized Domain Names in Applications (IDNA) + pkg:pypi/idna@3.6 + + + https://github.com/kjd/idna/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/kjd/idna + from packaging metadata Project-URL: Source + + + https://github.com/kjd/idna/blob/master/HISTORY.rst + from packaging metadata Project-URL: Changelog + + + + + importlib-resources + 6.1.1 + Read resources from Python packages + pkg:pypi/importlib-resources@6.1.1 + + + https://importlib-resources.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python/importlib_resources + from packaging metadata: Home-page + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + + + ISC + + + UNKNOWN + + + pkg:pypi/isoduration@20.11.0 + + + https://github.com/bolsote/isoduration/issues + from packaging metadata Project-URL: Bug Reports + + + https://github.com/bolsote/isoduration/blob/master/CHANGELOG + from packaging metadata Project-URL: Changelog + + + https://github.com/bolsote/isoduration + from packaging metadata Project-URL: Repository + + + https://github.com/bolsote/isoduration + from packaging metadata: Home-page + + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + + + Modified BSD License + + + pkg:pypi/jsonpointer@2.4 + + + https://github.com/stefankoegl/python-json-pointer + from packaging metadata: Home-page + + + + + jsonschema + 4.20.0 + An implementation of JSON Schema validation for Python + + + MIT + + + pkg:pypi/jsonschema@4.20.0 + + + https://python-jsonschema.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/jsonschema/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/jsonschema + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst + from packaging metadata Project-URL: Changelog + + + https://github.com/python-jsonschema/jsonschema + from packaging metadata Project-URL: Homepage + + + + + jsonschema-specifications + 2023.11.2 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + + + MIT + + + pkg:pypi/jsonschema-specifications@2023.11.2 + + + https://jsonschema-specifications.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/jsonschema-specifications/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/jsonschema-specifications + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-jsonschema-specifications?utm_source=pypi-jsonschema-specifications&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/jsonschema-specifications + from packaging metadata Project-URL: Homepage + + + + + license-expression + 30.2.0 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + + + Apache-2.0 + + + pkg:pypi/license-expression@30.2.0 + + + https://github.com/nexB/license-expression + from packaging metadata: Home-page + + + + + lxml + 4.9.4 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + + + BSD-3-Clause + + + pkg:pypi/lxml@4.9.4 + + + https://github.com/lxml/lxml + from packaging metadata Project-URL: Source + + + https://lxml.de/ + from packaging metadata: Home-page + + + + + packageurl-python + 0.13.1 + A purl aka. Package URL parser and builder + + + MIT + + + pkg:pypi/packageurl-python@0.13.1 + + + https://github.com/package-url/packageurl-python + from packaging metadata: Home-page + + + + + pkgutil_resolve_name + 1.3.10 + Resolve a name to an object. + + + MIT + + + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://github.com/graingert/pkgutil-resolve-name + from packaging metadata: Home-page + + + + + py-serializable + 0.16.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + + + Apache-2.0 + + + pkg:pypi/py-serializable@0.16.0 + + + https://github.com/madpah/serializable/issues + from packaging metadata Project-URL: Bug Tracker + + + https://github.com/madpah/serializable + from packaging metadata Project-URL: Repository + + + https://github.com/madpah/serializable + from packaging metadata: Home-page + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + + + Dual License + + + pkg:pypi/python-dateutil@2.8.2 + + + https://dateutil.readthedocs.io/en/stable/ + from packaging metadata Project-URL: Documentation + + + https://github.com/dateutil/dateutil + from packaging metadata Project-URL: Source + + + https://github.com/dateutil/dateutil + from packaging metadata: Home-page + + + + + referencing + 0.32.0 + JSON Referencing + Python + + + MIT + + + pkg:pypi/referencing@0.32.0 + + + https://referencing.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/referencing/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/referencing + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-referencing?utm_source=pypi-referencing&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/referencing + from packaging metadata Project-URL: Homepage + + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + + + MIT + + + MIT license + + + pkg:pypi/rfc3339-validator@0.1.4 + + + https://github.com/naimetti/rfc3339-validator + from packaging metadata: Home-page + + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + + + GPL-3.0-or-later + + + GNU GPLv3+ + + + pkg:pypi/rfc3987@1.3.8 + + + https://github.com/dgerber/rfc3987 + from packaging metadata: Download-URL + + + http://pypi.python.org/pypi/rfc3987 + from packaging metadata: Home-page + + + + + rpds-py + 0.15.2 + Python bindings to Rust's persistent data structures (rpds) + + + MIT + + + pkg:pypi/rpds-py@0.15.2 + + + https://rpds.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/crate-py/rpds/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/crate-py/rpds + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-rpds-py?utm_source=pypi-rpds-py&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/crate-py/rpds + from packaging metadata Project-URL: Homepage + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + + + Apache 2.0 + + + pkg:pypi/sortedcontainers@2.4.0 + + + http://www.grantjenks.com/docs/sortedcontainers/ + from packaging metadata: Home-page + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + + + Apache-2.0 license + + + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://gitter.im/python/typing + from packaging metadata Project-URL: Chat + + + https://github.com/python/typeshed/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/python-dateutil.md + from packaging metadata Project-URL: Changes + + + https://github.com/python/typeshed + from packaging metadata Project-URL: GitHub + + + https://github.com/python/typeshed + from packaging metadata: Home-page + + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + + + MIT + + + MIT License + + + pkg:pypi/uri-template@1.3.0 + + + https://gitlab.linss.com/open-source/python/uri-template + from packaging metadata Project-URL: homepage + + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + + + BSD-3-Clause + + + pkg:pypi/webcolors@1.13 + + + https://webcolors.readthedocs.io + from packaging metadata Project-URL: documentation + + + https://github.com/ubernostrum/webcolors + from packaging metadata Project-URL: homepage + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + + + MIT + + + pkg:pypi/zipp@3.17.0 + + + https://github.com/jaraco/zipp + from packaging metadata: Home-page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_with-extras_1.3.json.bin b/tests/_data/snapshots/environment/venv_with-extras_1.3.json.bin new file mode 100644 index 00000000..3424594d --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-extras_1.3.json.bin @@ -0,0 +1,1053 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://arrow.readthedocs.io" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/arrow-py/arrow/issues" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/arrow-py/arrow" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs==23.1.0", + "description": "Classes Without Boilerplate", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://www.attrs.org/" + }, + { + "comment": "from packaging metadata Project-URL: Bug Tracker", + "type": "issue-tracker", + "url": "https://github.com/python-attrs/attrs/issues" + }, + { + "comment": "from packaging metadata Project-URL: Source Code", + "type": "other", + "url": "https://github.com/python-attrs/attrs" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/hynek" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "other", + "url": "https://www.attrs.org/en/stable/changelog.html" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "attrs", + "purl": "pkg:pypi/attrs@23.1.0", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean.py==4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/bastikr/boolean.py" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-2-Clause" + } + } + ], + "name": "boolean.py", + "purl": "pkg:pypi/boolean.py@4.0", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib==6.0.0", + "description": "Python library for CycloneDX", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://cyclonedx-python-library.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Bug Tracker", + "type": "issue-tracker", + "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://owasp.org/donate/?reponame=www-project-cyclonedx&title=OWASP+CycloneDX" + }, + { + "comment": "from packaging metadata Project-URL: Repository", + "type": "vcs", + "url": "https://github.com/CycloneDX/cyclonedx-python-lib" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/CycloneDX/cyclonedx-python-lib/#readme" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "cyclonedx-python-lib", + "purl": "pkg:pypi/cyclonedx-python-lib@6.0.0", + "type": "library", + "version": "6.0.0" + }, + { + "bom-ref": "defusedxml==0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "externalReferences": [ + { + "comment": "from packaging metadata: Download-URL", + "type": "distribution", + "url": "https://pypi.python.org/pypi/defusedxml" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/tiran/defusedxml" + } + ], + "licenses": [ + { + "license": { + "id": "Python-2.0" + } + }, + { + "license": { + "name": "PSFL" + } + } + ], + "name": "defusedxml", + "purl": "pkg:pypi/defusedxml@0.7.1", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn==1.5.1", + "description": "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/ypcrts/fqdn" + } + ], + "licenses": [ + { + "license": { + "name": "MPL 2.0" + } + } + ], + "name": "fqdn", + "purl": "pkg:pypi/fqdn@1.5.1", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna==3.6", + "description": "Internationalized Domain Names in Applications (IDNA)", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Issue tracker", + "type": "issue-tracker", + "url": "https://github.com/kjd/idna/issues" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/kjd/idna" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "other", + "url": "https://github.com/kjd/idna/blob/master/HISTORY.rst" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@3.6", + "type": "library", + "version": "3.6" + }, + { + "bom-ref": "importlib-resources==6.1.1", + "description": "Read resources from Python packages", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://importlib-resources.readthedocs.io/" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/python/importlib_resources" + } + ], + "name": "importlib-resources", + "purl": "pkg:pypi/importlib-resources@6.1.1", + "type": "library", + "version": "6.1.1" + }, + { + "bom-ref": "isoduration==20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Bug Reports", + "type": "issue-tracker", + "url": "https://github.com/bolsote/isoduration/issues" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "other", + "url": "https://github.com/bolsote/isoduration/blob/master/CHANGELOG" + }, + { + "comment": "from packaging metadata Project-URL: Repository", + "type": "vcs", + "url": "https://github.com/bolsote/isoduration" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/bolsote/isoduration" + } + ], + "licenses": [ + { + "license": { + "id": "ISC" + } + }, + { + "license": { + "name": "UNKNOWN" + } + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer==2.4", + "description": "Identify specific nodes in a JSON document (RFC 6901) ", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/stefankoegl/python-json-pointer" + } + ], + "licenses": [ + { + "license": { + "name": "Modified BSD License" + } + } + ], + "name": "jsonpointer", + "purl": "pkg:pypi/jsonpointer@2.4", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema==4.20.0", + "description": "An implementation of JSON Schema validation for Python", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://python-jsonschema.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/python-jsonschema/jsonschema/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/python-jsonschema/jsonschema" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "other", + "url": "https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/python-jsonschema/jsonschema" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "jsonschema", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "format" + } + ], + "purl": "pkg:pypi/jsonschema@4.20.0", + "type": "library", + "version": "4.20.0" + }, + { + "bom-ref": "jsonschema-specifications==2023.11.2", + "description": "The JSON Schema meta-schemas and vocabularies, exposed as a Registry", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://jsonschema-specifications.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/python-jsonschema/jsonschema-specifications/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/python-jsonschema/jsonschema-specifications" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-jsonschema-specifications?utm_source=pypi-jsonschema-specifications&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/python-jsonschema/jsonschema-specifications" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "jsonschema-specifications", + "purl": "pkg:pypi/jsonschema-specifications@2023.11.2", + "type": "library", + "version": "2023.11.2" + }, + { + "bom-ref": "license-expression==30.2.0", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/nexB/license-expression" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "license-expression", + "purl": "pkg:pypi/license-expression@30.2.0", + "type": "library", + "version": "30.2.0" + }, + { + "bom-ref": "lxml==4.9.4", + "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/lxml/lxml" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://lxml.de/" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "name": "lxml", + "purl": "pkg:pypi/lxml@4.9.4", + "type": "library", + "version": "4.9.4" + }, + { + "bom-ref": "packageurl-python==0.13.1", + "description": "A purl aka. Package URL parser and builder", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/package-url/packageurl-python" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python@0.13.1", + "type": "library", + "version": "0.13.1" + }, + { + "bom-ref": "pkgutil_resolve_name==1.3.10", + "description": "Resolve a name to an object.", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/graingert/pkgutil-resolve-name" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "pkgutil_resolve_name", + "purl": "pkg:pypi/pkgutil-resolve-name@1.3.10", + "type": "library", + "version": "1.3.10" + }, + { + "bom-ref": "py-serializable==0.16.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Bug Tracker", + "type": "issue-tracker", + "url": "https://github.com/madpah/serializable/issues" + }, + { + "comment": "from packaging metadata Project-URL: Repository", + "type": "vcs", + "url": "https://github.com/madpah/serializable" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/madpah/serializable" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "py-serializable", + "purl": "pkg:pypi/py-serializable@0.16.0", + "type": "library", + "version": "0.16.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://dateutil.readthedocs.io/en/stable/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/dateutil/dateutil" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/dateutil/dateutil" + } + ], + "licenses": [ + { + "license": { + "name": "Dual License" + } + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing==0.32.0", + "description": "JSON Referencing + Python", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://referencing.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/python-jsonschema/referencing/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/python-jsonschema/referencing" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-referencing?utm_source=pypi-referencing&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/python-jsonschema/referencing" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "referencing", + "purl": "pkg:pypi/referencing@0.32.0", + "type": "library", + "version": "0.32.0" + }, + { + "bom-ref": "rfc3339-validator==0.1.4", + "description": "A pure python RFC3339 validator", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/naimetti/rfc3339-validator" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "MIT license" + } + } + ], + "name": "rfc3339-validator", + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987==1.3.8", + "description": "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)", + "externalReferences": [ + { + "comment": "from packaging metadata: Download-URL", + "type": "distribution", + "url": "https://github.com/dgerber/rfc3987" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "http://pypi.python.org/pypi/rfc3987" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-3.0-or-later" + } + }, + { + "license": { + "name": "GNU GPLv3+" + } + } + ], + "name": "rfc3987", + "purl": "pkg:pypi/rfc3987@1.3.8", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py==0.15.2", + "description": "Python bindings to Rust's persistent data structures (rpds)", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://rpds.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/crate-py/rpds/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/crate-py/rpds" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-rpds-py?utm_source=pypi-rpds-py&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/crate-py/rpds" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "rpds-py", + "purl": "pkg:pypi/rpds-py@0.15.2", + "type": "library", + "version": "0.15.2" + }, + { + "bom-ref": "six==1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/benjaminp/six" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers==2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "http://www.grantjenks.com/docs/sortedcontainers/" + } + ], + "licenses": [ + { + "license": { + "name": "Apache 2.0" + } + } + ], + "name": "sortedcontainers", + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Chat", + "type": "chat", + "url": "https://gitter.im/python/typing" + }, + { + "comment": "from packaging metadata Project-URL: Issue tracker", + "type": "issue-tracker", + "url": "https://github.com/python/typeshed/issues" + }, + { + "comment": "from packaging metadata Project-URL: Changes", + "type": "other", + "url": "https://github.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/python-dateutil.md" + }, + { + "comment": "from packaging metadata Project-URL: GitHub", + "type": "vcs", + "url": "https://github.com/python/typeshed" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/python/typeshed" + } + ], + "licenses": [ + { + "license": { + "name": "Apache-2.0 license" + } + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template==1.3.0", + "description": "RFC 6570 URI Template Processor", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: homepage", + "type": "website", + "url": "https://gitlab.linss.com/open-source/python/uri-template" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "MIT License" + } + } + ], + "name": "uri-template", + "purl": "pkg:pypi/uri-template@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors==1.13", + "description": "A library for working with the color formats defined by HTML and CSS.", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: documentation", + "type": "documentation", + "url": "https://webcolors.readthedocs.io" + }, + { + "comment": "from packaging metadata Project-URL: homepage", + "type": "website", + "url": "https://github.com/ubernostrum/webcolors" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "name": "webcolors", + "purl": "pkg:pypi/webcolors@1.13", + "type": "library", + "version": "1.13" + }, + { + "bom-ref": "zipp==3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/jaraco/zipp" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil==2.8.2", + "types-python-dateutil==2.8.19.14" + ], + "ref": "arrow==1.3.0" + }, + { + "ref": "attrs==23.1.0" + }, + { + "ref": "boolean.py==4.0" + }, + { + "dependsOn": [ + "jsonschema==4.20.0", + "license-expression==30.2.0", + "lxml==4.9.4", + "packageurl-python==0.13.1", + "py-serializable==0.16.0", + "sortedcontainers==2.4.0" + ], + "ref": "cyclonedx-python-lib==6.0.0" + }, + { + "ref": "defusedxml==0.7.1" + }, + { + "ref": "fqdn==1.5.1" + }, + { + "ref": "idna==3.6" + }, + { + "dependsOn": [ + "zipp==3.17.0" + ], + "ref": "importlib-resources==6.1.1" + }, + { + "dependsOn": [ + "arrow==1.3.0" + ], + "ref": "isoduration==20.11.0" + }, + { + "ref": "jsonpointer==2.4" + }, + { + "dependsOn": [ + "importlib-resources==6.1.1", + "referencing==0.32.0" + ], + "ref": "jsonschema-specifications==2023.11.2" + }, + { + "dependsOn": [ + "attrs==23.1.0", + "fqdn==1.5.1", + "idna==3.6", + "importlib-resources==6.1.1", + "isoduration==20.11.0", + "jsonpointer==2.4", + "jsonschema-specifications==2023.11.2", + "referencing==0.32.0", + "rfc3339-validator==0.1.4", + "rfc3987==1.3.8", + "rpds-py==0.15.2", + "uri-template==1.3.0", + "webcolors==1.13" + ], + "ref": "jsonschema==4.20.0" + }, + { + "dependsOn": [ + "boolean.py==4.0" + ], + "ref": "license-expression==30.2.0" + }, + { + "ref": "lxml==4.9.4" + }, + { + "ref": "packageurl-python==0.13.1" + }, + { + "ref": "pkgutil_resolve_name==1.3.10" + }, + { + "dependsOn": [ + "defusedxml==0.7.1" + ], + "ref": "py-serializable==0.16.0" + }, + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "python-dateutil==2.8.2" + }, + { + "dependsOn": [ + "attrs==23.1.0", + "rpds-py==0.15.2" + ], + "ref": "referencing==0.32.0" + }, + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "rfc3339-validator==0.1.4" + }, + { + "ref": "rfc3987==1.3.8" + }, + { + "ref": "root-component" + }, + { + "ref": "rpds-py==0.15.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "sortedcontainers==2.4.0" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + }, + { + "ref": "uri-template==1.3.0" + }, + { + "ref": "webcolors==1.13" + }, + { + "ref": "zipp==3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_with-extras_1.3.xml.bin b/tests/_data/snapshots/environment/venv_with-extras_1.3.xml.bin new file mode 100644 index 00000000..baedf474 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-extras_1.3.xml.bin @@ -0,0 +1,779 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://arrow.readthedocs.io + from packaging metadata Project-URL: Documentation + + + https://github.com/arrow-py/arrow/issues + from packaging metadata Project-URL: Issues + + + https://github.com/arrow-py/arrow + from packaging metadata Project-URL: Source + + + + + attrs + 23.1.0 + Classes Without Boilerplate + + + MIT + + + pkg:pypi/attrs@23.1.0 + + + https://www.attrs.org/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-attrs/attrs/issues + from packaging metadata Project-URL: Bug Tracker + + + https://github.com/python-attrs/attrs + from packaging metadata Project-URL: Source Code + + + https://github.com/sponsors/hynek + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi + from packaging metadata Project-URL: Tidelift + + + https://www.attrs.org/en/stable/changelog.html + from packaging metadata Project-URL: Changelog + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + + + BSD-2-Clause + + + pkg:pypi/boolean.py@4.0 + + + https://github.com/bastikr/boolean.py + from packaging metadata: Home-page + + + + + cyclonedx-python-lib + 6.0.0 + Python library for CycloneDX + + + Apache-2.0 + + + pkg:pypi/cyclonedx-python-lib@6.0.0 + + + https://cyclonedx-python-library.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/CycloneDX/cyclonedx-python-lib/issues + from packaging metadata Project-URL: Bug Tracker + + + https://owasp.org/donate/?reponame=www-project-cyclonedx&title=OWASP+CycloneDX + from packaging metadata Project-URL: Funding + + + https://github.com/CycloneDX/cyclonedx-python-lib + from packaging metadata Project-URL: Repository + + + https://github.com/CycloneDX/cyclonedx-python-lib/#readme + from packaging metadata: Home-page + + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + + + Python-2.0 + + + PSFL + + + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.python.org/pypi/defusedxml + from packaging metadata: Download-URL + + + https://github.com/tiran/defusedxml + from packaging metadata: Home-page + + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + + + MPL 2.0 + + + pkg:pypi/fqdn@1.5.1 + + + https://github.com/ypcrts/fqdn + from packaging metadata: Home-page + + + + + idna + 3.6 + Internationalized Domain Names in Applications (IDNA) + pkg:pypi/idna@3.6 + + + https://github.com/kjd/idna/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/kjd/idna + from packaging metadata Project-URL: Source + + + https://github.com/kjd/idna/blob/master/HISTORY.rst + from packaging metadata Project-URL: Changelog + + + + + importlib-resources + 6.1.1 + Read resources from Python packages + pkg:pypi/importlib-resources@6.1.1 + + + https://importlib-resources.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python/importlib_resources + from packaging metadata: Home-page + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + + + ISC + + + UNKNOWN + + + pkg:pypi/isoduration@20.11.0 + + + https://github.com/bolsote/isoduration/issues + from packaging metadata Project-URL: Bug Reports + + + https://github.com/bolsote/isoduration/blob/master/CHANGELOG + from packaging metadata Project-URL: Changelog + + + https://github.com/bolsote/isoduration + from packaging metadata Project-URL: Repository + + + https://github.com/bolsote/isoduration + from packaging metadata: Home-page + + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + + + Modified BSD License + + + pkg:pypi/jsonpointer@2.4 + + + https://github.com/stefankoegl/python-json-pointer + from packaging metadata: Home-page + + + + + jsonschema + 4.20.0 + An implementation of JSON Schema validation for Python + + + MIT + + + pkg:pypi/jsonschema@4.20.0 + + + https://python-jsonschema.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/jsonschema/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/jsonschema + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst + from packaging metadata Project-URL: Changelog + + + https://github.com/python-jsonschema/jsonschema + from packaging metadata Project-URL: Homepage + + + + format + + + + jsonschema-specifications + 2023.11.2 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + + + MIT + + + pkg:pypi/jsonschema-specifications@2023.11.2 + + + https://jsonschema-specifications.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/jsonschema-specifications/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/jsonschema-specifications + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-jsonschema-specifications?utm_source=pypi-jsonschema-specifications&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/jsonschema-specifications + from packaging metadata Project-URL: Homepage + + + + + license-expression + 30.2.0 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + + + Apache-2.0 + + + pkg:pypi/license-expression@30.2.0 + + + https://github.com/nexB/license-expression + from packaging metadata: Home-page + + + + + lxml + 4.9.4 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + + + BSD-3-Clause + + + pkg:pypi/lxml@4.9.4 + + + https://github.com/lxml/lxml + from packaging metadata Project-URL: Source + + + https://lxml.de/ + from packaging metadata: Home-page + + + + + packageurl-python + 0.13.1 + A purl aka. Package URL parser and builder + + + MIT + + + pkg:pypi/packageurl-python@0.13.1 + + + https://github.com/package-url/packageurl-python + from packaging metadata: Home-page + + + + + pkgutil_resolve_name + 1.3.10 + Resolve a name to an object. + + + MIT + + + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://github.com/graingert/pkgutil-resolve-name + from packaging metadata: Home-page + + + + + py-serializable + 0.16.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + + + Apache-2.0 + + + pkg:pypi/py-serializable@0.16.0 + + + https://github.com/madpah/serializable/issues + from packaging metadata Project-URL: Bug Tracker + + + https://github.com/madpah/serializable + from packaging metadata Project-URL: Repository + + + https://github.com/madpah/serializable + from packaging metadata: Home-page + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + + + Dual License + + + pkg:pypi/python-dateutil@2.8.2 + + + https://dateutil.readthedocs.io/en/stable/ + from packaging metadata Project-URL: Documentation + + + https://github.com/dateutil/dateutil + from packaging metadata Project-URL: Source + + + https://github.com/dateutil/dateutil + from packaging metadata: Home-page + + + + + referencing + 0.32.0 + JSON Referencing + Python + + + MIT + + + pkg:pypi/referencing@0.32.0 + + + https://referencing.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/referencing/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/referencing + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-referencing?utm_source=pypi-referencing&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/referencing + from packaging metadata Project-URL: Homepage + + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + + + MIT + + + MIT license + + + pkg:pypi/rfc3339-validator@0.1.4 + + + https://github.com/naimetti/rfc3339-validator + from packaging metadata: Home-page + + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + + + GPL-3.0-or-later + + + GNU GPLv3+ + + + pkg:pypi/rfc3987@1.3.8 + + + https://github.com/dgerber/rfc3987 + from packaging metadata: Download-URL + + + http://pypi.python.org/pypi/rfc3987 + from packaging metadata: Home-page + + + + + rpds-py + 0.15.2 + Python bindings to Rust's persistent data structures (rpds) + + + MIT + + + pkg:pypi/rpds-py@0.15.2 + + + https://rpds.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/crate-py/rpds/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/crate-py/rpds + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-rpds-py?utm_source=pypi-rpds-py&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/crate-py/rpds + from packaging metadata Project-URL: Homepage + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + + + Apache 2.0 + + + pkg:pypi/sortedcontainers@2.4.0 + + + http://www.grantjenks.com/docs/sortedcontainers/ + from packaging metadata: Home-page + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + + + Apache-2.0 license + + + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://gitter.im/python/typing + from packaging metadata Project-URL: Chat + + + https://github.com/python/typeshed/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/python-dateutil.md + from packaging metadata Project-URL: Changes + + + https://github.com/python/typeshed + from packaging metadata Project-URL: GitHub + + + https://github.com/python/typeshed + from packaging metadata: Home-page + + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + + + MIT + + + MIT License + + + pkg:pypi/uri-template@1.3.0 + + + https://gitlab.linss.com/open-source/python/uri-template + from packaging metadata Project-URL: homepage + + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + + + BSD-3-Clause + + + pkg:pypi/webcolors@1.13 + + + https://webcolors.readthedocs.io + from packaging metadata Project-URL: documentation + + + https://github.com/ubernostrum/webcolors + from packaging metadata Project-URL: homepage + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + + + MIT + + + pkg:pypi/zipp@3.17.0 + + + https://github.com/jaraco/zipp + from packaging metadata: Home-page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_with-extras_1.4.json.bin b/tests/_data/snapshots/environment/venv_with-extras_1.4.json.bin new file mode 100644 index 00000000..c23c15e6 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-extras_1.4.json.bin @@ -0,0 +1,1049 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://arrow.readthedocs.io" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/arrow-py/arrow/issues" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/arrow-py/arrow" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs==23.1.0", + "description": "Classes Without Boilerplate", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://www.attrs.org/" + }, + { + "comment": "from packaging metadata Project-URL: Bug Tracker", + "type": "issue-tracker", + "url": "https://github.com/python-attrs/attrs/issues" + }, + { + "comment": "from packaging metadata Project-URL: Source Code", + "type": "other", + "url": "https://github.com/python-attrs/attrs" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/hynek" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "release-notes", + "url": "https://www.attrs.org/en/stable/changelog.html" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "attrs", + "purl": "pkg:pypi/attrs@23.1.0", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean.py==4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/bastikr/boolean.py" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-2-Clause" + } + } + ], + "name": "boolean.py", + "purl": "pkg:pypi/boolean.py@4.0", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib==6.0.0", + "description": "Python library for CycloneDX", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://cyclonedx-python-library.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Bug Tracker", + "type": "issue-tracker", + "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://owasp.org/donate/?reponame=www-project-cyclonedx&title=OWASP+CycloneDX" + }, + { + "comment": "from packaging metadata Project-URL: Repository", + "type": "vcs", + "url": "https://github.com/CycloneDX/cyclonedx-python-lib" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/CycloneDX/cyclonedx-python-lib/#readme" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "cyclonedx-python-lib", + "purl": "pkg:pypi/cyclonedx-python-lib@6.0.0", + "type": "library", + "version": "6.0.0" + }, + { + "bom-ref": "defusedxml==0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "externalReferences": [ + { + "comment": "from packaging metadata: Download-URL", + "type": "distribution", + "url": "https://pypi.python.org/pypi/defusedxml" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/tiran/defusedxml" + } + ], + "licenses": [ + { + "license": { + "id": "Python-2.0" + } + }, + { + "license": { + "name": "PSFL" + } + } + ], + "name": "defusedxml", + "purl": "pkg:pypi/defusedxml@0.7.1", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn==1.5.1", + "description": "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/ypcrts/fqdn" + } + ], + "licenses": [ + { + "license": { + "name": "MPL 2.0" + } + } + ], + "name": "fqdn", + "purl": "pkg:pypi/fqdn@1.5.1", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna==3.6", + "description": "Internationalized Domain Names in Applications (IDNA)", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Issue tracker", + "type": "issue-tracker", + "url": "https://github.com/kjd/idna/issues" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/kjd/idna" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "release-notes", + "url": "https://github.com/kjd/idna/blob/master/HISTORY.rst" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@3.6", + "type": "library", + "version": "3.6" + }, + { + "bom-ref": "importlib-resources==6.1.1", + "description": "Read resources from Python packages", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://importlib-resources.readthedocs.io/" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/python/importlib_resources" + } + ], + "name": "importlib-resources", + "purl": "pkg:pypi/importlib-resources@6.1.1", + "type": "library", + "version": "6.1.1" + }, + { + "bom-ref": "isoduration==20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Bug Reports", + "type": "issue-tracker", + "url": "https://github.com/bolsote/isoduration/issues" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "release-notes", + "url": "https://github.com/bolsote/isoduration/blob/master/CHANGELOG" + }, + { + "comment": "from packaging metadata Project-URL: Repository", + "type": "vcs", + "url": "https://github.com/bolsote/isoduration" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/bolsote/isoduration" + } + ], + "licenses": [ + { + "license": { + "id": "ISC" + } + }, + { + "license": { + "name": "UNKNOWN" + } + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer==2.4", + "description": "Identify specific nodes in a JSON document (RFC 6901) ", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/stefankoegl/python-json-pointer" + } + ], + "licenses": [ + { + "license": { + "name": "Modified BSD License" + } + } + ], + "name": "jsonpointer", + "purl": "pkg:pypi/jsonpointer@2.4", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema==4.20.0", + "description": "An implementation of JSON Schema validation for Python", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://python-jsonschema.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/python-jsonschema/jsonschema/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/python-jsonschema/jsonschema" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "release-notes", + "url": "https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/python-jsonschema/jsonschema" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "jsonschema", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "format" + } + ], + "purl": "pkg:pypi/jsonschema@4.20.0", + "type": "library", + "version": "4.20.0" + }, + { + "bom-ref": "jsonschema-specifications==2023.11.2", + "description": "The JSON Schema meta-schemas and vocabularies, exposed as a Registry", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://jsonschema-specifications.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/python-jsonschema/jsonschema-specifications/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/python-jsonschema/jsonschema-specifications" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-jsonschema-specifications?utm_source=pypi-jsonschema-specifications&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/python-jsonschema/jsonschema-specifications" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "jsonschema-specifications", + "purl": "pkg:pypi/jsonschema-specifications@2023.11.2", + "type": "library", + "version": "2023.11.2" + }, + { + "bom-ref": "license-expression==30.2.0", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/nexB/license-expression" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "license-expression", + "purl": "pkg:pypi/license-expression@30.2.0", + "type": "library", + "version": "30.2.0" + }, + { + "bom-ref": "lxml==4.9.4", + "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/lxml/lxml" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://lxml.de/" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "name": "lxml", + "purl": "pkg:pypi/lxml@4.9.4", + "type": "library", + "version": "4.9.4" + }, + { + "bom-ref": "packageurl-python==0.13.1", + "description": "A purl aka. Package URL parser and builder", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/package-url/packageurl-python" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python@0.13.1", + "type": "library", + "version": "0.13.1" + }, + { + "bom-ref": "pkgutil_resolve_name==1.3.10", + "description": "Resolve a name to an object.", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/graingert/pkgutil-resolve-name" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "pkgutil_resolve_name", + "purl": "pkg:pypi/pkgutil-resolve-name@1.3.10", + "type": "library", + "version": "1.3.10" + }, + { + "bom-ref": "py-serializable==0.16.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Bug Tracker", + "type": "issue-tracker", + "url": "https://github.com/madpah/serializable/issues" + }, + { + "comment": "from packaging metadata Project-URL: Repository", + "type": "vcs", + "url": "https://github.com/madpah/serializable" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/madpah/serializable" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "py-serializable", + "purl": "pkg:pypi/py-serializable@0.16.0", + "type": "library", + "version": "0.16.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://dateutil.readthedocs.io/en/stable/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/dateutil/dateutil" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/dateutil/dateutil" + } + ], + "licenses": [ + { + "license": { + "name": "Dual License" + } + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing==0.32.0", + "description": "JSON Referencing + Python", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://referencing.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/python-jsonschema/referencing/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/python-jsonschema/referencing" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-referencing?utm_source=pypi-referencing&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/python-jsonschema/referencing" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "referencing", + "purl": "pkg:pypi/referencing@0.32.0", + "type": "library", + "version": "0.32.0" + }, + { + "bom-ref": "rfc3339-validator==0.1.4", + "description": "A pure python RFC3339 validator", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/naimetti/rfc3339-validator" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "MIT license" + } + } + ], + "name": "rfc3339-validator", + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987==1.3.8", + "description": "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)", + "externalReferences": [ + { + "comment": "from packaging metadata: Download-URL", + "type": "distribution", + "url": "https://github.com/dgerber/rfc3987" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "http://pypi.python.org/pypi/rfc3987" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-3.0-or-later" + } + }, + { + "license": { + "name": "GNU GPLv3+" + } + } + ], + "name": "rfc3987", + "purl": "pkg:pypi/rfc3987@1.3.8", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py==0.15.2", + "description": "Python bindings to Rust's persistent data structures (rpds)", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://rpds.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/crate-py/rpds/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/crate-py/rpds" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-rpds-py?utm_source=pypi-rpds-py&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/crate-py/rpds" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "rpds-py", + "purl": "pkg:pypi/rpds-py@0.15.2", + "type": "library", + "version": "0.15.2" + }, + { + "bom-ref": "six==1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/benjaminp/six" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers==2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "http://www.grantjenks.com/docs/sortedcontainers/" + } + ], + "licenses": [ + { + "license": { + "name": "Apache 2.0" + } + } + ], + "name": "sortedcontainers", + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Chat", + "type": "chat", + "url": "https://gitter.im/python/typing" + }, + { + "comment": "from packaging metadata Project-URL: Issue tracker", + "type": "issue-tracker", + "url": "https://github.com/python/typeshed/issues" + }, + { + "comment": "from packaging metadata Project-URL: Changes", + "type": "release-notes", + "url": "https://github.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/python-dateutil.md" + }, + { + "comment": "from packaging metadata Project-URL: GitHub", + "type": "vcs", + "url": "https://github.com/python/typeshed" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/python/typeshed" + } + ], + "licenses": [ + { + "license": { + "name": "Apache-2.0 license" + } + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template==1.3.0", + "description": "RFC 6570 URI Template Processor", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: homepage", + "type": "website", + "url": "https://gitlab.linss.com/open-source/python/uri-template" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "MIT License" + } + } + ], + "name": "uri-template", + "purl": "pkg:pypi/uri-template@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors==1.13", + "description": "A library for working with the color formats defined by HTML and CSS.", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: documentation", + "type": "documentation", + "url": "https://webcolors.readthedocs.io" + }, + { + "comment": "from packaging metadata Project-URL: homepage", + "type": "website", + "url": "https://github.com/ubernostrum/webcolors" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "name": "webcolors", + "purl": "pkg:pypi/webcolors@1.13", + "type": "library", + "version": "1.13" + }, + { + "bom-ref": "zipp==3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/jaraco/zipp" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil==2.8.2", + "types-python-dateutil==2.8.19.14" + ], + "ref": "arrow==1.3.0" + }, + { + "ref": "attrs==23.1.0" + }, + { + "ref": "boolean.py==4.0" + }, + { + "dependsOn": [ + "jsonschema==4.20.0", + "license-expression==30.2.0", + "lxml==4.9.4", + "packageurl-python==0.13.1", + "py-serializable==0.16.0", + "sortedcontainers==2.4.0" + ], + "ref": "cyclonedx-python-lib==6.0.0" + }, + { + "ref": "defusedxml==0.7.1" + }, + { + "ref": "fqdn==1.5.1" + }, + { + "ref": "idna==3.6" + }, + { + "dependsOn": [ + "zipp==3.17.0" + ], + "ref": "importlib-resources==6.1.1" + }, + { + "dependsOn": [ + "arrow==1.3.0" + ], + "ref": "isoduration==20.11.0" + }, + { + "ref": "jsonpointer==2.4" + }, + { + "dependsOn": [ + "importlib-resources==6.1.1", + "referencing==0.32.0" + ], + "ref": "jsonschema-specifications==2023.11.2" + }, + { + "dependsOn": [ + "attrs==23.1.0", + "fqdn==1.5.1", + "idna==3.6", + "importlib-resources==6.1.1", + "isoduration==20.11.0", + "jsonpointer==2.4", + "jsonschema-specifications==2023.11.2", + "referencing==0.32.0", + "rfc3339-validator==0.1.4", + "rfc3987==1.3.8", + "rpds-py==0.15.2", + "uri-template==1.3.0", + "webcolors==1.13" + ], + "ref": "jsonschema==4.20.0" + }, + { + "dependsOn": [ + "boolean.py==4.0" + ], + "ref": "license-expression==30.2.0" + }, + { + "ref": "lxml==4.9.4" + }, + { + "ref": "packageurl-python==0.13.1" + }, + { + "ref": "pkgutil_resolve_name==1.3.10" + }, + { + "dependsOn": [ + "defusedxml==0.7.1" + ], + "ref": "py-serializable==0.16.0" + }, + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "python-dateutil==2.8.2" + }, + { + "dependsOn": [ + "attrs==23.1.0", + "rpds-py==0.15.2" + ], + "ref": "referencing==0.32.0" + }, + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "rfc3339-validator==0.1.4" + }, + { + "ref": "rfc3987==1.3.8" + }, + { + "ref": "root-component" + }, + { + "ref": "rpds-py==0.15.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "sortedcontainers==2.4.0" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + }, + { + "ref": "uri-template==1.3.0" + }, + { + "ref": "webcolors==1.13" + }, + { + "ref": "zipp==3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_with-extras_1.4.xml.bin b/tests/_data/snapshots/environment/venv_with-extras_1.4.xml.bin new file mode 100644 index 00000000..09d4a4ae --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-extras_1.4.xml.bin @@ -0,0 +1,806 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://arrow.readthedocs.io + from packaging metadata Project-URL: Documentation + + + https://github.com/arrow-py/arrow/issues + from packaging metadata Project-URL: Issues + + + https://github.com/arrow-py/arrow + from packaging metadata Project-URL: Source + + + + + attrs + 23.1.0 + Classes Without Boilerplate + + + MIT + + + pkg:pypi/attrs@23.1.0 + + + https://www.attrs.org/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-attrs/attrs/issues + from packaging metadata Project-URL: Bug Tracker + + + https://github.com/python-attrs/attrs + from packaging metadata Project-URL: Source Code + + + https://github.com/sponsors/hynek + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi + from packaging metadata Project-URL: Tidelift + + + https://www.attrs.org/en/stable/changelog.html + from packaging metadata Project-URL: Changelog + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + + + BSD-2-Clause + + + pkg:pypi/boolean.py@4.0 + + + https://github.com/bastikr/boolean.py + from packaging metadata: Home-page + + + + + cyclonedx-python-lib + 6.0.0 + Python library for CycloneDX + + + Apache-2.0 + + + pkg:pypi/cyclonedx-python-lib@6.0.0 + + + https://cyclonedx-python-library.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/CycloneDX/cyclonedx-python-lib/issues + from packaging metadata Project-URL: Bug Tracker + + + https://owasp.org/donate/?reponame=www-project-cyclonedx&title=OWASP+CycloneDX + from packaging metadata Project-URL: Funding + + + https://github.com/CycloneDX/cyclonedx-python-lib + from packaging metadata Project-URL: Repository + + + https://github.com/CycloneDX/cyclonedx-python-lib/#readme + from packaging metadata: Home-page + + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + + + Python-2.0 + + + PSFL + + + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.python.org/pypi/defusedxml + from packaging metadata: Download-URL + + + https://github.com/tiran/defusedxml + from packaging metadata: Home-page + + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + + + MPL 2.0 + + + pkg:pypi/fqdn@1.5.1 + + + https://github.com/ypcrts/fqdn + from packaging metadata: Home-page + + + + + idna + 3.6 + Internationalized Domain Names in Applications (IDNA) + pkg:pypi/idna@3.6 + + + https://github.com/kjd/idna/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/kjd/idna + from packaging metadata Project-URL: Source + + + https://github.com/kjd/idna/blob/master/HISTORY.rst + from packaging metadata Project-URL: Changelog + + + + + importlib-resources + 6.1.1 + Read resources from Python packages + pkg:pypi/importlib-resources@6.1.1 + + + https://importlib-resources.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python/importlib_resources + from packaging metadata: Home-page + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + + + ISC + + + UNKNOWN + + + pkg:pypi/isoduration@20.11.0 + + + https://github.com/bolsote/isoduration/issues + from packaging metadata Project-URL: Bug Reports + + + https://github.com/bolsote/isoduration/blob/master/CHANGELOG + from packaging metadata Project-URL: Changelog + + + https://github.com/bolsote/isoduration + from packaging metadata Project-URL: Repository + + + https://github.com/bolsote/isoduration + from packaging metadata: Home-page + + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + + + Modified BSD License + + + pkg:pypi/jsonpointer@2.4 + + + https://github.com/stefankoegl/python-json-pointer + from packaging metadata: Home-page + + + + + jsonschema + 4.20.0 + An implementation of JSON Schema validation for Python + + + MIT + + + pkg:pypi/jsonschema@4.20.0 + + + https://python-jsonschema.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/jsonschema/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/jsonschema + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst + from packaging metadata Project-URL: Changelog + + + https://github.com/python-jsonschema/jsonschema + from packaging metadata Project-URL: Homepage + + + + format + + + + jsonschema-specifications + 2023.11.2 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + + + MIT + + + pkg:pypi/jsonschema-specifications@2023.11.2 + + + https://jsonschema-specifications.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/jsonschema-specifications/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/jsonschema-specifications + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-jsonschema-specifications?utm_source=pypi-jsonschema-specifications&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/jsonschema-specifications + from packaging metadata Project-URL: Homepage + + + + + license-expression + 30.2.0 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + + + Apache-2.0 + + + pkg:pypi/license-expression@30.2.0 + + + https://github.com/nexB/license-expression + from packaging metadata: Home-page + + + + + lxml + 4.9.4 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + + + BSD-3-Clause + + + pkg:pypi/lxml@4.9.4 + + + https://github.com/lxml/lxml + from packaging metadata Project-URL: Source + + + https://lxml.de/ + from packaging metadata: Home-page + + + + + packageurl-python + 0.13.1 + A purl aka. Package URL parser and builder + + + MIT + + + pkg:pypi/packageurl-python@0.13.1 + + + https://github.com/package-url/packageurl-python + from packaging metadata: Home-page + + + + + pkgutil_resolve_name + 1.3.10 + Resolve a name to an object. + + + MIT + + + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://github.com/graingert/pkgutil-resolve-name + from packaging metadata: Home-page + + + + + py-serializable + 0.16.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + + + Apache-2.0 + + + pkg:pypi/py-serializable@0.16.0 + + + https://github.com/madpah/serializable/issues + from packaging metadata Project-URL: Bug Tracker + + + https://github.com/madpah/serializable + from packaging metadata Project-URL: Repository + + + https://github.com/madpah/serializable + from packaging metadata: Home-page + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + + + Dual License + + + pkg:pypi/python-dateutil@2.8.2 + + + https://dateutil.readthedocs.io/en/stable/ + from packaging metadata Project-URL: Documentation + + + https://github.com/dateutil/dateutil + from packaging metadata Project-URL: Source + + + https://github.com/dateutil/dateutil + from packaging metadata: Home-page + + + + + referencing + 0.32.0 + JSON Referencing + Python + + + MIT + + + pkg:pypi/referencing@0.32.0 + + + https://referencing.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/referencing/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/referencing + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-referencing?utm_source=pypi-referencing&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/referencing + from packaging metadata Project-URL: Homepage + + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + + + MIT + + + MIT license + + + pkg:pypi/rfc3339-validator@0.1.4 + + + https://github.com/naimetti/rfc3339-validator + from packaging metadata: Home-page + + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + + + GPL-3.0-or-later + + + GNU GPLv3+ + + + pkg:pypi/rfc3987@1.3.8 + + + https://github.com/dgerber/rfc3987 + from packaging metadata: Download-URL + + + http://pypi.python.org/pypi/rfc3987 + from packaging metadata: Home-page + + + + + rpds-py + 0.15.2 + Python bindings to Rust's persistent data structures (rpds) + + + MIT + + + pkg:pypi/rpds-py@0.15.2 + + + https://rpds.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/crate-py/rpds/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/crate-py/rpds + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-rpds-py?utm_source=pypi-rpds-py&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/crate-py/rpds + from packaging metadata Project-URL: Homepage + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + + + Apache 2.0 + + + pkg:pypi/sortedcontainers@2.4.0 + + + http://www.grantjenks.com/docs/sortedcontainers/ + from packaging metadata: Home-page + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + + + Apache-2.0 license + + + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://gitter.im/python/typing + from packaging metadata Project-URL: Chat + + + https://github.com/python/typeshed/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/python-dateutil.md + from packaging metadata Project-URL: Changes + + + https://github.com/python/typeshed + from packaging metadata Project-URL: GitHub + + + https://github.com/python/typeshed + from packaging metadata: Home-page + + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + + + MIT + + + MIT License + + + pkg:pypi/uri-template@1.3.0 + + + https://gitlab.linss.com/open-source/python/uri-template + from packaging metadata Project-URL: homepage + + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + + + BSD-3-Clause + + + pkg:pypi/webcolors@1.13 + + + https://webcolors.readthedocs.io + from packaging metadata Project-URL: documentation + + + https://github.com/ubernostrum/webcolors + from packaging metadata Project-URL: homepage + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + + + MIT + + + pkg:pypi/zipp@3.17.0 + + + https://github.com/jaraco/zipp + from packaging metadata: Home-page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_with-extras_1.5.json.bin b/tests/_data/snapshots/environment/venv_with-extras_1.5.json.bin new file mode 100644 index 00000000..0ab017d3 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-extras_1.5.json.bin @@ -0,0 +1,1049 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://arrow.readthedocs.io" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/arrow-py/arrow/issues" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/arrow-py/arrow" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs==23.1.0", + "description": "Classes Without Boilerplate", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://www.attrs.org/" + }, + { + "comment": "from packaging metadata Project-URL: Bug Tracker", + "type": "issue-tracker", + "url": "https://github.com/python-attrs/attrs/issues" + }, + { + "comment": "from packaging metadata Project-URL: Source Code", + "type": "other", + "url": "https://github.com/python-attrs/attrs" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/hynek" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "release-notes", + "url": "https://www.attrs.org/en/stable/changelog.html" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "attrs", + "purl": "pkg:pypi/attrs@23.1.0", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean.py==4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/bastikr/boolean.py" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-2-Clause" + } + } + ], + "name": "boolean.py", + "purl": "pkg:pypi/boolean.py@4.0", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib==6.0.0", + "description": "Python library for CycloneDX", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://cyclonedx-python-library.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Bug Tracker", + "type": "issue-tracker", + "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://owasp.org/donate/?reponame=www-project-cyclonedx&title=OWASP+CycloneDX" + }, + { + "comment": "from packaging metadata Project-URL: Repository", + "type": "vcs", + "url": "https://github.com/CycloneDX/cyclonedx-python-lib" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/CycloneDX/cyclonedx-python-lib/#readme" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "cyclonedx-python-lib", + "purl": "pkg:pypi/cyclonedx-python-lib@6.0.0", + "type": "library", + "version": "6.0.0" + }, + { + "bom-ref": "defusedxml==0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "externalReferences": [ + { + "comment": "from packaging metadata: Download-URL", + "type": "distribution", + "url": "https://pypi.python.org/pypi/defusedxml" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/tiran/defusedxml" + } + ], + "licenses": [ + { + "license": { + "id": "Python-2.0" + } + }, + { + "license": { + "name": "PSFL" + } + } + ], + "name": "defusedxml", + "purl": "pkg:pypi/defusedxml@0.7.1", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn==1.5.1", + "description": "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/ypcrts/fqdn" + } + ], + "licenses": [ + { + "license": { + "name": "MPL 2.0" + } + } + ], + "name": "fqdn", + "purl": "pkg:pypi/fqdn@1.5.1", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna==3.6", + "description": "Internationalized Domain Names in Applications (IDNA)", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Issue tracker", + "type": "issue-tracker", + "url": "https://github.com/kjd/idna/issues" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/kjd/idna" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "release-notes", + "url": "https://github.com/kjd/idna/blob/master/HISTORY.rst" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@3.6", + "type": "library", + "version": "3.6" + }, + { + "bom-ref": "importlib-resources==6.1.1", + "description": "Read resources from Python packages", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://importlib-resources.readthedocs.io/" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/python/importlib_resources" + } + ], + "name": "importlib-resources", + "purl": "pkg:pypi/importlib-resources@6.1.1", + "type": "library", + "version": "6.1.1" + }, + { + "bom-ref": "isoduration==20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Bug Reports", + "type": "issue-tracker", + "url": "https://github.com/bolsote/isoduration/issues" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "release-notes", + "url": "https://github.com/bolsote/isoduration/blob/master/CHANGELOG" + }, + { + "comment": "from packaging metadata Project-URL: Repository", + "type": "vcs", + "url": "https://github.com/bolsote/isoduration" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/bolsote/isoduration" + } + ], + "licenses": [ + { + "license": { + "id": "ISC" + } + }, + { + "license": { + "name": "UNKNOWN" + } + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer==2.4", + "description": "Identify specific nodes in a JSON document (RFC 6901) ", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/stefankoegl/python-json-pointer" + } + ], + "licenses": [ + { + "license": { + "name": "Modified BSD License" + } + } + ], + "name": "jsonpointer", + "purl": "pkg:pypi/jsonpointer@2.4", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema==4.20.0", + "description": "An implementation of JSON Schema validation for Python", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://python-jsonschema.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/python-jsonschema/jsonschema/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/python-jsonschema/jsonschema" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Changelog", + "type": "release-notes", + "url": "https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/python-jsonschema/jsonschema" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "jsonschema", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "format" + } + ], + "purl": "pkg:pypi/jsonschema@4.20.0", + "type": "library", + "version": "4.20.0" + }, + { + "bom-ref": "jsonschema-specifications==2023.11.2", + "description": "The JSON Schema meta-schemas and vocabularies, exposed as a Registry", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://jsonschema-specifications.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/python-jsonschema/jsonschema-specifications/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/python-jsonschema/jsonschema-specifications" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-jsonschema-specifications?utm_source=pypi-jsonschema-specifications&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/python-jsonschema/jsonschema-specifications" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "jsonschema-specifications", + "purl": "pkg:pypi/jsonschema-specifications@2023.11.2", + "type": "library", + "version": "2023.11.2" + }, + { + "bom-ref": "license-expression==30.2.0", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/nexB/license-expression" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "license-expression", + "purl": "pkg:pypi/license-expression@30.2.0", + "type": "library", + "version": "30.2.0" + }, + { + "bom-ref": "lxml==4.9.4", + "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/lxml/lxml" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://lxml.de/" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "name": "lxml", + "purl": "pkg:pypi/lxml@4.9.4", + "type": "library", + "version": "4.9.4" + }, + { + "bom-ref": "packageurl-python==0.13.1", + "description": "A purl aka. Package URL parser and builder", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/package-url/packageurl-python" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python@0.13.1", + "type": "library", + "version": "0.13.1" + }, + { + "bom-ref": "pkgutil_resolve_name==1.3.10", + "description": "Resolve a name to an object.", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/graingert/pkgutil-resolve-name" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "pkgutil_resolve_name", + "purl": "pkg:pypi/pkgutil-resolve-name@1.3.10", + "type": "library", + "version": "1.3.10" + }, + { + "bom-ref": "py-serializable==0.16.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Bug Tracker", + "type": "issue-tracker", + "url": "https://github.com/madpah/serializable/issues" + }, + { + "comment": "from packaging metadata Project-URL: Repository", + "type": "vcs", + "url": "https://github.com/madpah/serializable" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/madpah/serializable" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "py-serializable", + "purl": "pkg:pypi/py-serializable@0.16.0", + "type": "library", + "version": "0.16.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://dateutil.readthedocs.io/en/stable/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/dateutil/dateutil" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/dateutil/dateutil" + } + ], + "licenses": [ + { + "license": { + "name": "Dual License" + } + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing==0.32.0", + "description": "JSON Referencing + Python", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://referencing.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/python-jsonschema/referencing/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/python-jsonschema/referencing" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-referencing?utm_source=pypi-referencing&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/python-jsonschema/referencing" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "referencing", + "purl": "pkg:pypi/referencing@0.32.0", + "type": "library", + "version": "0.32.0" + }, + { + "bom-ref": "rfc3339-validator==0.1.4", + "description": "A pure python RFC3339 validator", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/naimetti/rfc3339-validator" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "MIT license" + } + } + ], + "name": "rfc3339-validator", + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987==1.3.8", + "description": "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)", + "externalReferences": [ + { + "comment": "from packaging metadata: Download-URL", + "type": "distribution", + "url": "https://github.com/dgerber/rfc3987" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "http://pypi.python.org/pypi/rfc3987" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-3.0-or-later" + } + }, + { + "license": { + "name": "GNU GPLv3+" + } + } + ], + "name": "rfc3987", + "purl": "pkg:pypi/rfc3987@1.3.8", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py==0.15.2", + "description": "Python bindings to Rust's persistent data structures (rpds)", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://rpds.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issues", + "type": "issue-tracker", + "url": "https://github.com/crate-py/rpds/issues/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/crate-py/rpds" + }, + { + "comment": "from packaging metadata Project-URL: Funding", + "type": "other", + "url": "https://github.com/sponsors/Julian" + }, + { + "comment": "from packaging metadata Project-URL: Tidelift", + "type": "other", + "url": "https://tidelift.com/subscription/pkg/pypi-rpds-py?utm_source=pypi-rpds-py&utm_medium=referral&utm_campaign=pypi-link" + }, + { + "comment": "from packaging metadata Project-URL: Homepage", + "type": "website", + "url": "https://github.com/crate-py/rpds" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "rpds-py", + "purl": "pkg:pypi/rpds-py@0.15.2", + "type": "library", + "version": "0.15.2" + }, + { + "bom-ref": "six==1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/benjaminp/six" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers==2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "http://www.grantjenks.com/docs/sortedcontainers/" + } + ], + "licenses": [ + { + "license": { + "name": "Apache 2.0" + } + } + ], + "name": "sortedcontainers", + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Chat", + "type": "chat", + "url": "https://gitter.im/python/typing" + }, + { + "comment": "from packaging metadata Project-URL: Issue tracker", + "type": "issue-tracker", + "url": "https://github.com/python/typeshed/issues" + }, + { + "comment": "from packaging metadata Project-URL: Changes", + "type": "release-notes", + "url": "https://github.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/python-dateutil.md" + }, + { + "comment": "from packaging metadata Project-URL: GitHub", + "type": "vcs", + "url": "https://github.com/python/typeshed" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/python/typeshed" + } + ], + "licenses": [ + { + "license": { + "name": "Apache-2.0 license" + } + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template==1.3.0", + "description": "RFC 6570 URI Template Processor", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: homepage", + "type": "website", + "url": "https://gitlab.linss.com/open-source/python/uri-template" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "MIT License" + } + } + ], + "name": "uri-template", + "purl": "pkg:pypi/uri-template@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors==1.13", + "description": "A library for working with the color formats defined by HTML and CSS.", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: documentation", + "type": "documentation", + "url": "https://webcolors.readthedocs.io" + }, + { + "comment": "from packaging metadata Project-URL: homepage", + "type": "website", + "url": "https://github.com/ubernostrum/webcolors" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "name": "webcolors", + "purl": "pkg:pypi/webcolors@1.13", + "type": "library", + "version": "1.13" + }, + { + "bom-ref": "zipp==3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/jaraco/zipp" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil==2.8.2", + "types-python-dateutil==2.8.19.14" + ], + "ref": "arrow==1.3.0" + }, + { + "ref": "attrs==23.1.0" + }, + { + "ref": "boolean.py==4.0" + }, + { + "dependsOn": [ + "jsonschema==4.20.0", + "license-expression==30.2.0", + "lxml==4.9.4", + "packageurl-python==0.13.1", + "py-serializable==0.16.0", + "sortedcontainers==2.4.0" + ], + "ref": "cyclonedx-python-lib==6.0.0" + }, + { + "ref": "defusedxml==0.7.1" + }, + { + "ref": "fqdn==1.5.1" + }, + { + "ref": "idna==3.6" + }, + { + "dependsOn": [ + "zipp==3.17.0" + ], + "ref": "importlib-resources==6.1.1" + }, + { + "dependsOn": [ + "arrow==1.3.0" + ], + "ref": "isoduration==20.11.0" + }, + { + "ref": "jsonpointer==2.4" + }, + { + "dependsOn": [ + "importlib-resources==6.1.1", + "referencing==0.32.0" + ], + "ref": "jsonschema-specifications==2023.11.2" + }, + { + "dependsOn": [ + "attrs==23.1.0", + "fqdn==1.5.1", + "idna==3.6", + "importlib-resources==6.1.1", + "isoduration==20.11.0", + "jsonpointer==2.4", + "jsonschema-specifications==2023.11.2", + "referencing==0.32.0", + "rfc3339-validator==0.1.4", + "rfc3987==1.3.8", + "rpds-py==0.15.2", + "uri-template==1.3.0", + "webcolors==1.13" + ], + "ref": "jsonschema==4.20.0" + }, + { + "dependsOn": [ + "boolean.py==4.0" + ], + "ref": "license-expression==30.2.0" + }, + { + "ref": "lxml==4.9.4" + }, + { + "ref": "packageurl-python==0.13.1" + }, + { + "ref": "pkgutil_resolve_name==1.3.10" + }, + { + "dependsOn": [ + "defusedxml==0.7.1" + ], + "ref": "py-serializable==0.16.0" + }, + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "python-dateutil==2.8.2" + }, + { + "dependsOn": [ + "attrs==23.1.0", + "rpds-py==0.15.2" + ], + "ref": "referencing==0.32.0" + }, + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "rfc3339-validator==0.1.4" + }, + { + "ref": "rfc3987==1.3.8" + }, + { + "ref": "root-component" + }, + { + "ref": "rpds-py==0.15.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "sortedcontainers==2.4.0" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + }, + { + "ref": "uri-template==1.3.0" + }, + { + "ref": "webcolors==1.13" + }, + { + "ref": "zipp==3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_with-extras_1.5.xml.bin b/tests/_data/snapshots/environment/venv_with-extras_1.5.xml.bin new file mode 100644 index 00000000..41ed6c7a --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-extras_1.5.xml.bin @@ -0,0 +1,806 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://arrow.readthedocs.io + from packaging metadata Project-URL: Documentation + + + https://github.com/arrow-py/arrow/issues + from packaging metadata Project-URL: Issues + + + https://github.com/arrow-py/arrow + from packaging metadata Project-URL: Source + + + + + attrs + 23.1.0 + Classes Without Boilerplate + + + MIT + + + pkg:pypi/attrs@23.1.0 + + + https://www.attrs.org/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-attrs/attrs/issues + from packaging metadata Project-URL: Bug Tracker + + + https://github.com/python-attrs/attrs + from packaging metadata Project-URL: Source Code + + + https://github.com/sponsors/hynek + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi + from packaging metadata Project-URL: Tidelift + + + https://www.attrs.org/en/stable/changelog.html + from packaging metadata Project-URL: Changelog + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + + + BSD-2-Clause + + + pkg:pypi/boolean.py@4.0 + + + https://github.com/bastikr/boolean.py + from packaging metadata: Home-page + + + + + cyclonedx-python-lib + 6.0.0 + Python library for CycloneDX + + + Apache-2.0 + + + pkg:pypi/cyclonedx-python-lib@6.0.0 + + + https://cyclonedx-python-library.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/CycloneDX/cyclonedx-python-lib/issues + from packaging metadata Project-URL: Bug Tracker + + + https://owasp.org/donate/?reponame=www-project-cyclonedx&title=OWASP+CycloneDX + from packaging metadata Project-URL: Funding + + + https://github.com/CycloneDX/cyclonedx-python-lib + from packaging metadata Project-URL: Repository + + + https://github.com/CycloneDX/cyclonedx-python-lib/#readme + from packaging metadata: Home-page + + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + + + Python-2.0 + + + PSFL + + + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.python.org/pypi/defusedxml + from packaging metadata: Download-URL + + + https://github.com/tiran/defusedxml + from packaging metadata: Home-page + + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + + + MPL 2.0 + + + pkg:pypi/fqdn@1.5.1 + + + https://github.com/ypcrts/fqdn + from packaging metadata: Home-page + + + + + idna + 3.6 + Internationalized Domain Names in Applications (IDNA) + pkg:pypi/idna@3.6 + + + https://github.com/kjd/idna/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/kjd/idna + from packaging metadata Project-URL: Source + + + https://github.com/kjd/idna/blob/master/HISTORY.rst + from packaging metadata Project-URL: Changelog + + + + + importlib-resources + 6.1.1 + Read resources from Python packages + pkg:pypi/importlib-resources@6.1.1 + + + https://importlib-resources.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python/importlib_resources + from packaging metadata: Home-page + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + + + ISC + + + UNKNOWN + + + pkg:pypi/isoduration@20.11.0 + + + https://github.com/bolsote/isoduration/issues + from packaging metadata Project-URL: Bug Reports + + + https://github.com/bolsote/isoduration/blob/master/CHANGELOG + from packaging metadata Project-URL: Changelog + + + https://github.com/bolsote/isoduration + from packaging metadata Project-URL: Repository + + + https://github.com/bolsote/isoduration + from packaging metadata: Home-page + + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + + + Modified BSD License + + + pkg:pypi/jsonpointer@2.4 + + + https://github.com/stefankoegl/python-json-pointer + from packaging metadata: Home-page + + + + + jsonschema + 4.20.0 + An implementation of JSON Schema validation for Python + + + MIT + + + pkg:pypi/jsonschema@4.20.0 + + + https://python-jsonschema.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/jsonschema/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/jsonschema + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst + from packaging metadata Project-URL: Changelog + + + https://github.com/python-jsonschema/jsonschema + from packaging metadata Project-URL: Homepage + + + + format + + + + jsonschema-specifications + 2023.11.2 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + + + MIT + + + pkg:pypi/jsonschema-specifications@2023.11.2 + + + https://jsonschema-specifications.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/jsonschema-specifications/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/jsonschema-specifications + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-jsonschema-specifications?utm_source=pypi-jsonschema-specifications&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/jsonschema-specifications + from packaging metadata Project-URL: Homepage + + + + + license-expression + 30.2.0 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + + + Apache-2.0 + + + pkg:pypi/license-expression@30.2.0 + + + https://github.com/nexB/license-expression + from packaging metadata: Home-page + + + + + lxml + 4.9.4 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + + + BSD-3-Clause + + + pkg:pypi/lxml@4.9.4 + + + https://github.com/lxml/lxml + from packaging metadata Project-URL: Source + + + https://lxml.de/ + from packaging metadata: Home-page + + + + + packageurl-python + 0.13.1 + A purl aka. Package URL parser and builder + + + MIT + + + pkg:pypi/packageurl-python@0.13.1 + + + https://github.com/package-url/packageurl-python + from packaging metadata: Home-page + + + + + pkgutil_resolve_name + 1.3.10 + Resolve a name to an object. + + + MIT + + + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://github.com/graingert/pkgutil-resolve-name + from packaging metadata: Home-page + + + + + py-serializable + 0.16.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + + + Apache-2.0 + + + pkg:pypi/py-serializable@0.16.0 + + + https://github.com/madpah/serializable/issues + from packaging metadata Project-URL: Bug Tracker + + + https://github.com/madpah/serializable + from packaging metadata Project-URL: Repository + + + https://github.com/madpah/serializable + from packaging metadata: Home-page + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + + + Dual License + + + pkg:pypi/python-dateutil@2.8.2 + + + https://dateutil.readthedocs.io/en/stable/ + from packaging metadata Project-URL: Documentation + + + https://github.com/dateutil/dateutil + from packaging metadata Project-URL: Source + + + https://github.com/dateutil/dateutil + from packaging metadata: Home-page + + + + + referencing + 0.32.0 + JSON Referencing + Python + + + MIT + + + pkg:pypi/referencing@0.32.0 + + + https://referencing.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/python-jsonschema/referencing/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/python-jsonschema/referencing + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-referencing?utm_source=pypi-referencing&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/python-jsonschema/referencing + from packaging metadata Project-URL: Homepage + + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + + + MIT + + + MIT license + + + pkg:pypi/rfc3339-validator@0.1.4 + + + https://github.com/naimetti/rfc3339-validator + from packaging metadata: Home-page + + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + + + GPL-3.0-or-later + + + GNU GPLv3+ + + + pkg:pypi/rfc3987@1.3.8 + + + https://github.com/dgerber/rfc3987 + from packaging metadata: Download-URL + + + http://pypi.python.org/pypi/rfc3987 + from packaging metadata: Home-page + + + + + rpds-py + 0.15.2 + Python bindings to Rust's persistent data structures (rpds) + + + MIT + + + pkg:pypi/rpds-py@0.15.2 + + + https://rpds.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/crate-py/rpds/issues/ + from packaging metadata Project-URL: Issues + + + https://github.com/crate-py/rpds + from packaging metadata Project-URL: Source + + + https://github.com/sponsors/Julian + from packaging metadata Project-URL: Funding + + + https://tidelift.com/subscription/pkg/pypi-rpds-py?utm_source=pypi-rpds-py&utm_medium=referral&utm_campaign=pypi-link + from packaging metadata Project-URL: Tidelift + + + https://github.com/crate-py/rpds + from packaging metadata Project-URL: Homepage + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + + + Apache 2.0 + + + pkg:pypi/sortedcontainers@2.4.0 + + + http://www.grantjenks.com/docs/sortedcontainers/ + from packaging metadata: Home-page + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + + + Apache-2.0 license + + + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://gitter.im/python/typing + from packaging metadata Project-URL: Chat + + + https://github.com/python/typeshed/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/python-dateutil.md + from packaging metadata Project-URL: Changes + + + https://github.com/python/typeshed + from packaging metadata Project-URL: GitHub + + + https://github.com/python/typeshed + from packaging metadata: Home-page + + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + + + MIT + + + MIT License + + + pkg:pypi/uri-template@1.3.0 + + + https://gitlab.linss.com/open-source/python/uri-template + from packaging metadata Project-URL: homepage + + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + + + BSD-3-Clause + + + pkg:pypi/webcolors@1.13 + + + https://webcolors.readthedocs.io + from packaging metadata Project-URL: documentation + + + https://github.com/ubernostrum/webcolors + from packaging metadata Project-URL: homepage + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + + + MIT + + + pkg:pypi/zipp@3.17.0 + + + https://github.com/jaraco/zipp + from packaging metadata: Home-page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.0.xml.bin b/tests/_data/snapshots/environment/venv_with-urls_1.0.xml.bin new file mode 100644 index 00000000..a260ce47 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-urls_1.0.xml.bin @@ -0,0 +1,26 @@ + + + + + packaging + 23.2 + Core utilities for Python packages + pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + false + + + urllib3 + 1.26.8 + HTTP library with thread-safe connection pooling, file post, and more. + pkg:pypi/urllib3@1.26.8?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + false + + + diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.1.xml.bin b/tests/_data/snapshots/environment/venv_with-urls_1.1.xml.bin new file mode 100644 index 00000000..9e80e69c --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-urls_1.1.xml.bin @@ -0,0 +1,79 @@ + + + + + packaging + 23.2 + Core utilities for Python packages + pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176 + + + https://packaging.pypa.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/pypa/packaging + from packaging metadata Project-URL: Source + + + https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176 + PackageSource: VCS 'git' + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl + PackageSource: Archive + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + urllib3 + 1.26.8 + HTTP library with thread-safe connection pooling, file post, and more. + + + MIT + + + pkg:pypi/urllib3@1.26.8?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + PackageSource: Archive + + + https://urllib3.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/urllib3/urllib3/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/urllib3/urllib3 + from packaging metadata Project-URL: Code + + + https://urllib3.readthedocs.io/ + from packaging metadata: Home-page + + + + + diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.2.json.bin b/tests/_data/snapshots/environment/venv_with-urls_1.2.json.bin new file mode 100644 index 00000000..13fef2f6 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-urls_1.2.json.bin @@ -0,0 +1,140 @@ +{ + "components": [ + { + "bom-ref": "packaging==23.2", + "description": "Core utilities for Python packages", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://packaging.pypa.io/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/pypa/packaging" + }, + { + "comment": "PackageSource: VCS 'git'", + "type": "vcs", + "url": "https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176" + } + ], + "name": "packaging", + "purl": "pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176", + "type": "library", + "version": "23.2" + }, + { + "bom-ref": "six==1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/benjaminp/six" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "urllib3==1.26.8", + "description": "HTTP library with thread-safe connection pooling, file post, and more.", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + }, + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://urllib3.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue tracker", + "type": "issue-tracker", + "url": "https://github.com/urllib3/urllib3/issues" + }, + { + "comment": "from packaging metadata Project-URL: Code", + "type": "other", + "url": "https://github.com/urllib3/urllib3" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://urllib3.readthedocs.io/" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.8?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library", + "version": "1.26.8" + } + ], + "dependencies": [ + { + "ref": "packaging==23.2" + }, + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "root-component" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "urllib3==1.26.8" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.2.xml.bin b/tests/_data/snapshots/environment/venv_with-urls_1.2.xml.bin new file mode 100644 index 00000000..603768d5 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-urls_1.2.xml.bin @@ -0,0 +1,106 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-urls + 0.1.0 + packages from direct urls + + + + + packaging + 23.2 + Core utilities for Python packages + pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176 + + + https://packaging.pypa.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/pypa/packaging + from packaging metadata Project-URL: Source + + + https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176 + PackageSource: VCS 'git' + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl + PackageSource: Archive + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + urllib3 + 1.26.8 + HTTP library with thread-safe connection pooling, file post, and more. + + + MIT + + + pkg:pypi/urllib3@1.26.8?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + PackageSource: Archive + + + https://urllib3.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/urllib3/urllib3/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/urllib3/urllib3 + from packaging metadata Project-URL: Code + + + https://urllib3.readthedocs.io/ + from packaging metadata: Home-page + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.3.json.bin b/tests/_data/snapshots/environment/venv_with-urls_1.3.json.bin new file mode 100644 index 00000000..37ed42b1 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-urls_1.3.json.bin @@ -0,0 +1,168 @@ +{ + "components": [ + { + "bom-ref": "packaging==23.2", + "description": "Core utilities for Python packages", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://packaging.pypa.io/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/pypa/packaging" + }, + { + "comment": "PackageSource: VCS 'git'", + "type": "vcs", + "url": "https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176" + } + ], + "name": "packaging", + "properties": [ + { + "name": "cdx:poetry:package:source:vcs:commit_id", + "value": "b3a5d7d68991c040615d5345bb55f61de53ba176" + }, + { + "name": "cdx:poetry:package:source:vcs:requested_revision", + "value": "23.2" + } + ], + "purl": "pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176", + "type": "library", + "version": "23.2" + }, + { + "bom-ref": "six==1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/benjaminp/six" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "urllib3==1.26.8", + "description": "HTTP library with thread-safe connection pooling, file post, and more.", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "335f26daa3f99cae180f477efaf8c45ccaab380e02fe54292e9b5e14b3b41977" + } + ], + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + }, + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://urllib3.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue tracker", + "type": "issue-tracker", + "url": "https://github.com/urllib3/urllib3/issues" + }, + { + "comment": "from packaging metadata Project-URL: Code", + "type": "other", + "url": "https://github.com/urllib3/urllib3" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://urllib3.readthedocs.io/" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.8?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library", + "version": "1.26.8" + } + ], + "dependencies": [ + { + "ref": "packaging==23.2" + }, + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "root-component" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "urllib3==1.26.8" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.3.xml.bin b/tests/_data/snapshots/environment/venv_with-urls_1.3.xml.bin new file mode 100644 index 00000000..76e947dc --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-urls_1.3.xml.bin @@ -0,0 +1,119 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + packaging + 23.2 + Core utilities for Python packages + pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176 + + + https://packaging.pypa.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/pypa/packaging + from packaging metadata Project-URL: Source + + + https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176 + PackageSource: VCS 'git' + + + + b3a5d7d68991c040615d5345bb55f61de53ba176 + 23.2 + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl + PackageSource: Archive + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + urllib3 + 1.26.8 + HTTP library with thread-safe connection pooling, file post, and more. + + + MIT + + + pkg:pypi/urllib3@1.26.8?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + PackageSource: Archive + + 335f26daa3f99cae180f477efaf8c45ccaab380e02fe54292e9b5e14b3b41977 + + + + https://urllib3.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/urllib3/urllib3/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/urllib3/urllib3 + from packaging metadata Project-URL: Code + + + https://urllib3.readthedocs.io/ + from packaging metadata: Home-page + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.4.json.bin b/tests/_data/snapshots/environment/venv_with-urls_1.4.json.bin new file mode 100644 index 00000000..dd7ac2ae --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-urls_1.4.json.bin @@ -0,0 +1,164 @@ +{ + "components": [ + { + "bom-ref": "packaging==23.2", + "description": "Core utilities for Python packages", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://packaging.pypa.io/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/pypa/packaging" + }, + { + "comment": "PackageSource: VCS 'git'", + "type": "vcs", + "url": "https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176" + } + ], + "name": "packaging", + "properties": [ + { + "name": "cdx:poetry:package:source:vcs:commit_id", + "value": "b3a5d7d68991c040615d5345bb55f61de53ba176" + }, + { + "name": "cdx:poetry:package:source:vcs:requested_revision", + "value": "23.2" + } + ], + "purl": "pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176", + "type": "library", + "version": "23.2" + }, + { + "bom-ref": "six==1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/benjaminp/six" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "urllib3==1.26.8", + "description": "HTTP library with thread-safe connection pooling, file post, and more.", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "335f26daa3f99cae180f477efaf8c45ccaab380e02fe54292e9b5e14b3b41977" + } + ], + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + }, + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://urllib3.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue tracker", + "type": "issue-tracker", + "url": "https://github.com/urllib3/urllib3/issues" + }, + { + "comment": "from packaging metadata Project-URL: Code", + "type": "other", + "url": "https://github.com/urllib3/urllib3" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://urllib3.readthedocs.io/" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.8?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library", + "version": "1.26.8" + } + ], + "dependencies": [ + { + "ref": "packaging==23.2" + }, + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "root-component" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "urllib3==1.26.8" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.4.xml.bin b/tests/_data/snapshots/environment/venv_with-urls_1.4.xml.bin new file mode 100644 index 00000000..a050a70a --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-urls_1.4.xml.bin @@ -0,0 +1,146 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + packaging + 23.2 + Core utilities for Python packages + pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176 + + + https://packaging.pypa.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/pypa/packaging + from packaging metadata Project-URL: Source + + + https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176 + PackageSource: VCS 'git' + + + + b3a5d7d68991c040615d5345bb55f61de53ba176 + 23.2 + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl + PackageSource: Archive + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + urllib3 + 1.26.8 + HTTP library with thread-safe connection pooling, file post, and more. + + + MIT + + + pkg:pypi/urllib3@1.26.8?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + PackageSource: Archive + + 335f26daa3f99cae180f477efaf8c45ccaab380e02fe54292e9b5e14b3b41977 + + + + https://urllib3.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/urllib3/urllib3/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/urllib3/urllib3 + from packaging metadata Project-URL: Code + + + https://urllib3.readthedocs.io/ + from packaging metadata: Home-page + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.5.json.bin b/tests/_data/snapshots/environment/venv_with-urls_1.5.json.bin new file mode 100644 index 00000000..cbeba0ac --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-urls_1.5.json.bin @@ -0,0 +1,164 @@ +{ + "components": [ + { + "bom-ref": "packaging==23.2", + "description": "Core utilities for Python packages", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://packaging.pypa.io/" + }, + { + "comment": "from packaging metadata Project-URL: Source", + "type": "other", + "url": "https://github.com/pypa/packaging" + }, + { + "comment": "PackageSource: VCS 'git'", + "type": "vcs", + "url": "https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176" + } + ], + "name": "packaging", + "properties": [ + { + "name": "cdx:poetry:package:source:vcs:commit_id", + "value": "b3a5d7d68991c040615d5345bb55f61de53ba176" + }, + { + "name": "cdx:poetry:package:source:vcs:requested_revision", + "value": "23.2" + } + ], + "purl": "pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176", + "type": "library", + "version": "23.2" + }, + { + "bom-ref": "six==1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/benjaminp/six" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "urllib3==1.26.8", + "description": "HTTP library with thread-safe connection pooling, file post, and more.", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "335f26daa3f99cae180f477efaf8c45ccaab380e02fe54292e9b5e14b3b41977" + } + ], + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + }, + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://urllib3.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue tracker", + "type": "issue-tracker", + "url": "https://github.com/urllib3/urllib3/issues" + }, + { + "comment": "from packaging metadata Project-URL: Code", + "type": "other", + "url": "https://github.com/urllib3/urllib3" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://urllib3.readthedocs.io/" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.8?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library", + "version": "1.26.8" + } + ], + "dependencies": [ + { + "ref": "packaging==23.2" + }, + { + "dependsOn": [ + "six==1.16.0" + ], + "ref": "root-component" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "urllib3==1.26.8" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.5.xml.bin b/tests/_data/snapshots/environment/venv_with-urls_1.5.xml.bin new file mode 100644 index 00000000..c962bfd9 --- /dev/null +++ b/tests/_data/snapshots/environment/venv_with-urls_1.5.xml.bin @@ -0,0 +1,146 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + packaging + 23.2 + Core utilities for Python packages + pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176 + + + https://packaging.pypa.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/pypa/packaging + from packaging metadata Project-URL: Source + + + https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176 + PackageSource: VCS 'git' + + + + b3a5d7d68991c040615d5345bb55f61de53ba176 + 23.2 + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + + + MIT + + + pkg:pypi/six@1.16.0 + + + https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl + PackageSource: Archive + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://github.com/benjaminp/six + from packaging metadata: Home-page + + + + + urllib3 + 1.26.8 + HTTP library with thread-safe connection pooling, file post, and more. + + + MIT + + + pkg:pypi/urllib3@1.26.8?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + PackageSource: Archive + + 335f26daa3f99cae180f477efaf8c45ccaab380e02fe54292e9b5e14b3b41977 + + + + https://urllib3.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/urllib3/urllib3/issues + from packaging metadata Project-URL: Issue tracker + + + https://github.com/urllib3/urllib3 + from packaging metadata Project-URL: Code + + + https://urllib3.readthedocs.io/ + from packaging metadata: Home-page + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_category-deps_1.0.xml.bin b/tests/_data/snapshots/pipenv/file_category-deps_1.0.xml.bin new file mode 100644 index 00000000..3c181bc6 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_category-deps_1.0.xml.bin @@ -0,0 +1,11 @@ + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + false + + + diff --git a/tests/_data/snapshots/pipenv/file_category-deps_1.1.xml.bin b/tests/_data/snapshots/pipenv/file_category-deps_1.1.xml.bin new file mode 100644 index 00000000..77e5b3e3 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_category-deps_1.1.xml.bin @@ -0,0 +1,16 @@ + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + + + + diff --git a/tests/_data/snapshots/pipenv/file_category-deps_1.2.json.bin b/tests/_data/snapshots/pipenv/file_category-deps_1.2.json.bin new file mode 100644 index 00000000..29db2b69 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_category-deps_1.2.json.bin @@ -0,0 +1,51 @@ +{ + "components": [ + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "dependencies organized in groups", + "name": "category-deps", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_category-deps_1.2.xml.bin b/tests/_data/snapshots/pipenv/file_category-deps_1.2.xml.bin new file mode 100644 index 00000000..8bb75f31 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_category-deps_1.2.xml.bin @@ -0,0 +1,39 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + category-deps + 0.1.0 + dependencies organized in groups + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_category-deps_1.3.json.bin b/tests/_data/snapshots/pipenv/file_category-deps_1.3.json.bin new file mode 100644 index 00000000..bf5f1400 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_category-deps_1.3.json.bin @@ -0,0 +1,73 @@ +{ + "components": [ + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "dependencies organized in groups", + "name": "category-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_category-deps_1.3.xml.bin b/tests/_data/snapshots/pipenv/file_category-deps_1.3.xml.bin new file mode 100644 index 00000000..66ddf3f3 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_category-deps_1.3.xml.bin @@ -0,0 +1,49 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + category-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_category-deps_1.4.json.bin b/tests/_data/snapshots/pipenv/file_category-deps_1.4.json.bin new file mode 100644 index 00000000..4ab1f8f5 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_category-deps_1.4.json.bin @@ -0,0 +1,69 @@ +{ + "components": [ + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "dependencies organized in groups", + "name": "category-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_category-deps_1.4.xml.bin b/tests/_data/snapshots/pipenv/file_category-deps_1.4.xml.bin new file mode 100644 index 00000000..f6c5bdc1 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_category-deps_1.4.xml.bin @@ -0,0 +1,76 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + category-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_category-deps_1.5.json.bin b/tests/_data/snapshots/pipenv/file_category-deps_1.5.json.bin new file mode 100644 index 00000000..7697d684 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_category-deps_1.5.json.bin @@ -0,0 +1,69 @@ +{ + "components": [ + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "dependencies organized in groups", + "name": "category-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_category-deps_1.5.xml.bin b/tests/_data/snapshots/pipenv/file_category-deps_1.5.xml.bin new file mode 100644 index 00000000..17c7825a --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_category-deps_1.5.xml.bin @@ -0,0 +1,76 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + category-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_default-and-dev_1.0.xml.bin b/tests/_data/snapshots/pipenv/file_default-and-dev_1.0.xml.bin new file mode 100644 index 00000000..57fe8bce --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_default-and-dev_1.0.xml.bin @@ -0,0 +1,17 @@ + + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + false + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + false + + + diff --git a/tests/_data/snapshots/pipenv/file_default-and-dev_1.1.xml.bin b/tests/_data/snapshots/pipenv/file_default-and-dev_1.1.xml.bin new file mode 100644 index 00000000..32343469 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_default-and-dev_1.1.xml.bin @@ -0,0 +1,27 @@ + + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + + + + diff --git a/tests/_data/snapshots/pipenv/file_default-and-dev_1.2.json.bin b/tests/_data/snapshots/pipenv/file_default-and-dev_1.2.json.bin new file mode 100644 index 00000000..0e111c17 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_default-and-dev_1.2.json.bin @@ -0,0 +1,68 @@ +{ + "components": [ + { + "bom-ref": "colorama==0.4.6", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "colorama==0.4.6" + }, + { + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "default and dev depenndencies", + "name": "default-and-dev", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_default-and-dev_1.2.xml.bin b/tests/_data/snapshots/pipenv/file_default-and-dev_1.2.xml.bin new file mode 100644 index 00000000..63499151 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_default-and-dev_1.2.xml.bin @@ -0,0 +1,51 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + default-and-dev + 0.1.0 + default and dev depenndencies + + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_default-and-dev_1.3.json.bin b/tests/_data/snapshots/pipenv/file_default-and-dev_1.3.json.bin new file mode 100644 index 00000000..af4a6d9c --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_default-and-dev_1.3.json.bin @@ -0,0 +1,106 @@ +{ + "components": [ + { + "bom-ref": "colorama==0.4.6", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + }, + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "colorama==0.4.6" + }, + { + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "default and dev depenndencies", + "name": "default-and-dev", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_default-and-dev_1.3.xml.bin b/tests/_data/snapshots/pipenv/file_default-and-dev_1.3.xml.bin new file mode 100644 index 00000000..166d4c3e --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_default-and-dev_1.3.xml.bin @@ -0,0 +1,68 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + default-and-dev + 0.1.0 + default and dev depenndencies + + + true + + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + + default + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_default-and-dev_1.4.json.bin b/tests/_data/snapshots/pipenv/file_default-and-dev_1.4.json.bin new file mode 100644 index 00000000..3b30cd66 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_default-and-dev_1.4.json.bin @@ -0,0 +1,102 @@ +{ + "components": [ + { + "bom-ref": "colorama==0.4.6", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + }, + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "colorama==0.4.6" + }, + { + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "default and dev depenndencies", + "name": "default-and-dev", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_default-and-dev_1.4.xml.bin b/tests/_data/snapshots/pipenv/file_default-and-dev_1.4.xml.bin new file mode 100644 index 00000000..f236015a --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_default-and-dev_1.4.xml.bin @@ -0,0 +1,95 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + default-and-dev + 0.1.0 + default and dev depenndencies + + + true + + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + + default + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_default-and-dev_1.5.json.bin b/tests/_data/snapshots/pipenv/file_default-and-dev_1.5.json.bin new file mode 100644 index 00000000..3cfb9c32 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_default-and-dev_1.5.json.bin @@ -0,0 +1,102 @@ +{ + "components": [ + { + "bom-ref": "colorama==0.4.6", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + }, + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "colorama==0.4.6" + }, + { + "ref": "root-component" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "default and dev depenndencies", + "name": "default-and-dev", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_default-and-dev_1.5.xml.bin b/tests/_data/snapshots/pipenv/file_default-and-dev_1.5.xml.bin new file mode 100644 index 00000000..4195089e --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_default-and-dev_1.5.xml.bin @@ -0,0 +1,95 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + default-and-dev + 0.1.0 + default and dev depenndencies + + + true + + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + + default + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_editable-self_1.0.xml.bin b/tests/_data/snapshots/pipenv/file_editable-self_1.0.xml.bin new file mode 100644 index 00000000..acb06612 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_editable-self_1.0.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/pipenv/file_editable-self_1.1.xml.bin b/tests/_data/snapshots/pipenv/file_editable-self_1.1.xml.bin new file mode 100644 index 00000000..640f73ff --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_editable-self_1.1.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/pipenv/file_editable-self_1.2.json.bin b/tests/_data/snapshots/pipenv/file_editable-self_1.2.json.bin new file mode 100644 index 00000000..acc0bc18 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_editable-self_1.2.json.bin @@ -0,0 +1,32 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "install the current project as an editable", + "name": "editable-self", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_editable-self_1.2.xml.bin b/tests/_data/snapshots/pipenv/file_editable-self_1.2.xml.bin new file mode 100644 index 00000000..914a56f6 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_editable-self_1.2.xml.bin @@ -0,0 +1,25 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + editable-self + 0.1.0 + install the current project as an editable + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_editable-self_1.3.json.bin b/tests/_data/snapshots/pipenv/file_editable-self_1.3.json.bin new file mode 100644 index 00000000..ff13d796 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_editable-self_1.3.json.bin @@ -0,0 +1,44 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "install the current project as an editable", + "name": "editable-self", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_editable-self_1.3.xml.bin b/tests/_data/snapshots/pipenv/file_editable-self_1.3.xml.bin new file mode 100644 index 00000000..f549a582 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_editable-self_1.3.xml.bin @@ -0,0 +1,31 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + editable-self + 0.1.0 + install the current project as an editable + + default + + + + true + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_editable-self_1.4.json.bin b/tests/_data/snapshots/pipenv/file_editable-self_1.4.json.bin new file mode 100644 index 00000000..1bd3f8a4 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_editable-self_1.4.json.bin @@ -0,0 +1,40 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "install the current project as an editable", + "name": "editable-self", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_editable-self_1.4.xml.bin b/tests/_data/snapshots/pipenv/file_editable-self_1.4.xml.bin new file mode 100644 index 00000000..1b93b263 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_editable-self_1.4.xml.bin @@ -0,0 +1,58 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + editable-self + 0.1.0 + install the current project as an editable + + default + + + + true + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_editable-self_1.5.json.bin b/tests/_data/snapshots/pipenv/file_editable-self_1.5.json.bin new file mode 100644 index 00000000..b587a645 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_editable-self_1.5.json.bin @@ -0,0 +1,40 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "install the current project as an editable", + "name": "editable-self", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_editable-self_1.5.xml.bin b/tests/_data/snapshots/pipenv/file_editable-self_1.5.xml.bin new file mode 100644 index 00000000..d10c0937 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_editable-self_1.5.xml.bin @@ -0,0 +1,58 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + editable-self + 0.1.0 + install the current project as an editable + + default + + + + true + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_local_1.0.xml.bin b/tests/_data/snapshots/pipenv/file_local_1.0.xml.bin new file mode 100644 index 00000000..718c0b43 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_local_1.0.xml.bin @@ -0,0 +1,20 @@ + + + + + package-a + + false + + + package-b + + false + + + package-c + + false + + + diff --git a/tests/_data/snapshots/pipenv/file_local_1.1.xml.bin b/tests/_data/snapshots/pipenv/file_local_1.1.xml.bin new file mode 100644 index 00000000..0fe51c16 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_local_1.1.xml.bin @@ -0,0 +1,35 @@ + + + + + package-a + + + + ../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + + + + package-b + + + + file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + + + + package-c + + + + ../../_helpers/local_pckages/c + from path + + + + + diff --git a/tests/_data/snapshots/pipenv/file_local_1.2.json.bin b/tests/_data/snapshots/pipenv/file_local_1.2.json.bin new file mode 100644 index 00000000..b2a62add --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_local_1.2.json.bin @@ -0,0 +1,82 @@ +{ + "components": [ + { + "bom-ref": "package-a", + "externalReferences": [ + { + "comment": "from file", + "type": "distribution", + "url": "../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "type": "library", + "version": "" + }, + { + "bom-ref": "package-b", + "externalReferences": [ + { + "comment": "from file", + "type": "distribution", + "url": "file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "type": "library", + "version": "" + }, + { + "bom-ref": "package-c", + "externalReferences": [ + { + "comment": "from path", + "type": "distribution", + "url": "../../_helpers/local_pckages/c" + } + ], + "name": "package-c", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "package-a" + }, + { + "ref": "package-b" + }, + { + "ref": "package-c" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_local_1.2.xml.bin b/tests/_data/snapshots/pipenv/file_local_1.2.xml.bin new file mode 100644 index 00000000..f520d6c9 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_local_1.2.xml.bin @@ -0,0 +1,60 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + local + 0.1.0 + packages from local paths + + + + + package-a + + + + ../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + + + + package-b + + + + file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + + + + package-c + + + + ../../_helpers/local_pckages/c + from path + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_local_1.3.json.bin b/tests/_data/snapshots/pipenv/file_local_1.3.json.bin new file mode 100644 index 00000000..2b17976e --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_local_1.3.json.bin @@ -0,0 +1,118 @@ +{ + "components": [ + { + "bom-ref": "package-a", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + } + ], + "type": "distribution", + "url": "../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "type": "library", + "version": "" + }, + { + "bom-ref": "package-b", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + } + ], + "type": "distribution", + "url": "file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "type": "library", + "version": "" + }, + { + "bom-ref": "package-c", + "externalReferences": [ + { + "comment": "from path", + "type": "distribution", + "url": "../../_helpers/local_pckages/c" + } + ], + "name": "package-c", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "package-a" + }, + { + "ref": "package-b" + }, + { + "ref": "package-c" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_local_1.3.xml.bin b/tests/_data/snapshots/pipenv/file_local_1.3.xml.bin new file mode 100644 index 00000000..990af727 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_local_1.3.xml.bin @@ -0,0 +1,78 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + + + + ../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + 3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592 + + + + + default + + + + package-b + + + + file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + 4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602 + + + + + default + + + + package-c + + + + ../../_helpers/local_pckages/c + from path + + + + default + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_local_1.4.json.bin b/tests/_data/snapshots/pipenv/file_local_1.4.json.bin new file mode 100644 index 00000000..ef125263 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_local_1.4.json.bin @@ -0,0 +1,111 @@ +{ + "components": [ + { + "bom-ref": "package-a", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + } + ], + "type": "distribution", + "url": "../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "type": "library" + }, + { + "bom-ref": "package-b", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + } + ], + "type": "distribution", + "url": "file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "type": "library" + }, + { + "bom-ref": "package-c", + "externalReferences": [ + { + "comment": "from path", + "type": "distribution", + "url": "../../_helpers/local_pckages/c" + } + ], + "name": "package-c", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "type": "library" + } + ], + "dependencies": [ + { + "ref": "package-a" + }, + { + "ref": "package-b" + }, + { + "ref": "package-c" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_local_1.4.xml.bin b/tests/_data/snapshots/pipenv/file_local_1.4.xml.bin new file mode 100644 index 00000000..50889d88 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_local_1.4.xml.bin @@ -0,0 +1,102 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + + + ../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + 3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592 + + + + + default + + + + package-b + + + file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + 4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602 + + + + + default + + + + package-c + + + ../../_helpers/local_pckages/c + from path + + + + default + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_local_1.5.json.bin b/tests/_data/snapshots/pipenv/file_local_1.5.json.bin new file mode 100644 index 00000000..43c61ebd --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_local_1.5.json.bin @@ -0,0 +1,111 @@ +{ + "components": [ + { + "bom-ref": "package-a", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + } + ], + "type": "distribution", + "url": "../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "type": "library" + }, + { + "bom-ref": "package-b", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + } + ], + "type": "distribution", + "url": "file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "type": "library" + }, + { + "bom-ref": "package-c", + "externalReferences": [ + { + "comment": "from path", + "type": "distribution", + "url": "../../_helpers/local_pckages/c" + } + ], + "name": "package-c", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "type": "library" + } + ], + "dependencies": [ + { + "ref": "package-a" + }, + { + "ref": "package-b" + }, + { + "ref": "package-c" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_local_1.5.xml.bin b/tests/_data/snapshots/pipenv/file_local_1.5.xml.bin new file mode 100644 index 00000000..71421f86 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_local_1.5.xml.bin @@ -0,0 +1,102 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + + + ../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + 3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592 + + + + + default + + + + package-b + + + file:../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + 4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602 + + + + + default + + + + package-c + + + ../../_helpers/local_pckages/c + from path + + + + default + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_no-deps_1.0.xml.bin b/tests/_data/snapshots/pipenv/file_no-deps_1.0.xml.bin new file mode 100644 index 00000000..acb06612 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_no-deps_1.0.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/pipenv/file_no-deps_1.1.xml.bin b/tests/_data/snapshots/pipenv/file_no-deps_1.1.xml.bin new file mode 100644 index 00000000..640f73ff --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_no-deps_1.1.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/pipenv/file_no-deps_1.2.json.bin b/tests/_data/snapshots/pipenv/file_no-deps_1.2.json.bin new file mode 100644 index 00000000..6de193b1 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_no-deps_1.2.json.bin @@ -0,0 +1,69 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, but no deps", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "no-deps", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_no-deps_1.2.xml.bin b/tests/_data/snapshots/pipenv/file_no-deps_1.2.xml.bin new file mode 100644 index 00000000..a982f421 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_no-deps_1.2.xml.bin @@ -0,0 +1,54 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + no-deps + 0.1.0 + packages with all meta, but no deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_no-deps_1.3.json.bin b/tests/_data/snapshots/pipenv/file_no-deps_1.3.json.bin new file mode 100644 index 00000000..4922946d --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_no-deps_1.3.json.bin @@ -0,0 +1,75 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, but no deps", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "no-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_no-deps_1.3.xml.bin b/tests/_data/snapshots/pipenv/file_no-deps_1.3.xml.bin new file mode 100644 index 00000000..f70c1e34 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_no-deps_1.3.xml.bin @@ -0,0 +1,57 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + no-deps + 0.1.0 + packages with all meta, but no deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_no-deps_1.4.json.bin b/tests/_data/snapshots/pipenv/file_no-deps_1.4.json.bin new file mode 100644 index 00000000..354ca1e5 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_no-deps_1.4.json.bin @@ -0,0 +1,71 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, but no deps", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "no-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_no-deps_1.4.xml.bin b/tests/_data/snapshots/pipenv/file_no-deps_1.4.xml.bin new file mode 100644 index 00000000..3a1fc66d --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_no-deps_1.4.xml.bin @@ -0,0 +1,84 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + no-deps + 0.1.0 + packages with all meta, but no deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_no-deps_1.5.json.bin b/tests/_data/snapshots/pipenv/file_no-deps_1.5.json.bin new file mode 100644 index 00000000..e246c19d --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_no-deps_1.5.json.bin @@ -0,0 +1,71 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages with all meta, but no deps", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "no-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_no-deps_1.5.xml.bin b/tests/_data/snapshots/pipenv/file_no-deps_1.5.xml.bin new file mode 100644 index 00000000..bf68b2e3 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_no-deps_1.5.xml.bin @@ -0,0 +1,84 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + no-deps + 0.1.0 + packages with all meta, but no deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_private-packages_1.0.xml.bin b/tests/_data/snapshots/pipenv/file_private-packages_1.0.xml.bin new file mode 100644 index 00000000..26921e83 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_private-packages_1.0.xml.bin @@ -0,0 +1,23 @@ + + + + + numpy + 1.26.2 + pkg:pypi/numpy@1.26.2 + false + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + false + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple + false + + + diff --git a/tests/_data/snapshots/pipenv/file_private-packages_1.1.xml.bin b/tests/_data/snapshots/pipenv/file_private-packages_1.1.xml.bin new file mode 100644 index 00000000..a0c73e3f --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_private-packages_1.1.xml.bin @@ -0,0 +1,38 @@ + + + + + numpy + 1.26.2 + pkg:pypi/numpy@1.26.2 + + + https://pypi.org/simple/numpy/ + from explicit index: pypi + + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/toml/ + from explicit index: pysrc1.acme.org + + + + + diff --git a/tests/_data/snapshots/pipenv/file_private-packages_1.2.json.bin b/tests/_data/snapshots/pipenv/file_private-packages_1.2.json.bin new file mode 100644 index 00000000..452601fc --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_private-packages_1.2.json.bin @@ -0,0 +1,85 @@ +{ + "components": [ + { + "bom-ref": "numpy==1.26.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/numpy/" + } + ], + "name": "numpy", + "purl": "pkg:pypi/numpy@1.26.2", + "type": "library", + "version": "1.26.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pysrc1.acme.org", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/toml/" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "numpy==1.26.2" + }, + { + "ref": "root-component" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_private-packages_1.2.xml.bin b/tests/_data/snapshots/pipenv/file_private-packages_1.2.xml.bin new file mode 100644 index 00000000..545c9a73 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_private-packages_1.2.xml.bin @@ -0,0 +1,63 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + + + numpy + 1.26.2 + pkg:pypi/numpy@1.26.2 + + + https://pypi.org/simple/numpy/ + from explicit index: pypi + + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/toml/ + from explicit index: pysrc1.acme.org + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_private-packages_1.3.json.bin b/tests/_data/snapshots/pipenv/file_private-packages_1.3.json.bin new file mode 100644 index 00000000..20c79314 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_private-packages_1.3.json.bin @@ -0,0 +1,139 @@ +{ + "components": [ + { + "bom-ref": "numpy==1.26.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b" + }, + { + "alg": "SHA-256", + "content": "f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/numpy/" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/numpy@1.26.2", + "type": "library", + "version": "1.26.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pysrc1.acme.org", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "numpy==1.26.2" + }, + { + "ref": "root-component" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_private-packages_1.3.xml.bin b/tests/_data/snapshots/pipenv/file_private-packages_1.3.xml.bin new file mode 100644 index 00000000..818da578 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_private-packages_1.3.xml.bin @@ -0,0 +1,87 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + true + + + + + numpy + 1.26.2 + pkg:pypi/numpy@1.26.2 + + + https://pypi.org/simple/numpy/ + from explicit index: pypi + + 96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b + f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea + + + + + default + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + default + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/toml/ + from explicit index: pysrc1.acme.org + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_private-packages_1.4.json.bin b/tests/_data/snapshots/pipenv/file_private-packages_1.4.json.bin new file mode 100644 index 00000000..ca448b73 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_private-packages_1.4.json.bin @@ -0,0 +1,135 @@ +{ + "components": [ + { + "bom-ref": "numpy==1.26.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b" + }, + { + "alg": "SHA-256", + "content": "f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/numpy/" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/numpy@1.26.2", + "type": "library", + "version": "1.26.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pysrc1.acme.org", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "numpy==1.26.2" + }, + { + "ref": "root-component" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_private-packages_1.4.xml.bin b/tests/_data/snapshots/pipenv/file_private-packages_1.4.xml.bin new file mode 100644 index 00000000..c2c5dbc8 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_private-packages_1.4.xml.bin @@ -0,0 +1,114 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + true + + + + + numpy + 1.26.2 + pkg:pypi/numpy@1.26.2 + + + https://pypi.org/simple/numpy/ + from explicit index: pypi + + 96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b + f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea + + + + + default + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + default + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/toml/ + from explicit index: pysrc1.acme.org + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_private-packages_1.5.json.bin b/tests/_data/snapshots/pipenv/file_private-packages_1.5.json.bin new file mode 100644 index 00000000..6f057c2b --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_private-packages_1.5.json.bin @@ -0,0 +1,135 @@ +{ + "components": [ + { + "bom-ref": "numpy==1.26.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b" + }, + { + "alg": "SHA-256", + "content": "f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/numpy/" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/numpy@1.26.2", + "type": "library", + "version": "1.26.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pysrc1.acme.org", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "numpy==1.26.2" + }, + { + "ref": "root-component" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_private-packages_1.5.xml.bin b/tests/_data/snapshots/pipenv/file_private-packages_1.5.xml.bin new file mode 100644 index 00000000..dc6b7407 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_private-packages_1.5.xml.bin @@ -0,0 +1,114 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + true + + + + + numpy + 1.26.2 + pkg:pypi/numpy@1.26.2 + + + https://pypi.org/simple/numpy/ + from explicit index: pypi + + 96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b + f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea + + + + + default + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + default + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/toml/ + from explicit index: pysrc1.acme.org + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.0.xml.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.0.xml.bin new file mode 100644 index 00000000..feca9cd7 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-extras_1.0.xml.bin @@ -0,0 +1,155 @@ + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + false + + + attrs + 23.1.0 + pkg:pypi/attrs@23.1.0 + false + + + boolean.py + 4.0 + pkg:pypi/boolean.py@4.0 + false + + + cyclonedx-python-lib + 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + false + + + defusedxml + 0.7.1 + pkg:pypi/defusedxml@0.7.1 + false + + + fqdn + 1.5.1 + pkg:pypi/fqdn@1.5.1 + false + + + idna + 3.6 + pkg:pypi/idna@3.6 + false + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + false + + + jsonpointer + 2.4 + pkg:pypi/jsonpointer@2.4 + false + + + jsonschema + 4.20.0 + pkg:pypi/jsonschema@4.20.0 + false + + + jsonschema-specifications + 2023.11.2 + pkg:pypi/jsonschema-specifications@2023.11.2 + false + + + license-expression + 30.2.0 + pkg:pypi/license-expression@30.2.0 + false + + + lxml + 4.9.3 + pkg:pypi/lxml@4.9.3 + false + + + packageurl-python + 0.11.2 + pkg:pypi/packageurl-python@0.11.2 + false + + + py-serializable + 0.15.0 + pkg:pypi/py-serializable@0.15.0 + false + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + false + + + referencing + 0.31.1 + pkg:pypi/referencing@0.31.1 + false + + + rfc3339-validator + 0.1.4 + pkg:pypi/rfc3339-validator@0.1.4 + false + + + rfc3987 + 1.3.8 + pkg:pypi/rfc3987@1.3.8 + false + + + rpds-py + 0.13.2 + pkg:pypi/rpds-py@0.13.2 + false + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + false + + + sortedcontainers + 2.4.0 + pkg:pypi/sortedcontainers@2.4.0 + false + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + uri-template + 1.3.0 + pkg:pypi/uri-template@1.3.0 + false + + + webcolors + 1.13 + pkg:pypi/webcolors@1.13 + false + + + diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.1.xml.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.1.xml.bin new file mode 100644 index 00000000..7d3c4504 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-extras_1.1.xml.bin @@ -0,0 +1,280 @@ + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + + + + attrs + 23.1.0 + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/ + from implicit index: pypi + + + + + boolean.py + 4.0 + pkg:pypi/boolean.py@4.0 + + + https://pypi.org/simple/boolean.py/ + from implicit index: pypi + + + + + cyclonedx-python-lib + 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + from implicit index: pypi + + + + + defusedxml + 0.7.1 + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.org/simple/defusedxml/ + from implicit index: pypi + + + + + fqdn + 1.5.1 + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/ + from implicit index: pypi + + + + + idna + 3.6 + pkg:pypi/idna@3.6 + + + https://pypi.org/simple/idna/ + from implicit index: pypi + + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from implicit index: pypi + + + + + jsonpointer + 2.4 + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/ + from implicit index: pypi + + + + + jsonschema + 4.20.0 + pkg:pypi/jsonschema@4.20.0 + + + https://pypi.org/simple/jsonschema/ + from implicit index: pypi + + + + + jsonschema-specifications + 2023.11.2 + pkg:pypi/jsonschema-specifications@2023.11.2 + + + https://pypi.org/simple/jsonschema-specifications/ + from implicit index: pypi + + + + + license-expression + 30.2.0 + pkg:pypi/license-expression@30.2.0 + + + https://pypi.org/simple/license-expression/ + from implicit index: pypi + + + + + lxml + 4.9.3 + pkg:pypi/lxml@4.9.3 + + + https://pypi.org/simple/lxml/ + from implicit index: pypi + + + + + packageurl-python + 0.11.2 + pkg:pypi/packageurl-python@0.11.2 + + + https://pypi.org/simple/packageurl-python/ + from implicit index: pypi + + + + + py-serializable + 0.15.0 + pkg:pypi/py-serializable@0.15.0 + + + https://pypi.org/simple/py-serializable/ + from implicit index: pypi + + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + + + + referencing + 0.31.1 + pkg:pypi/referencing@0.31.1 + + + https://pypi.org/simple/referencing/ + from implicit index: pypi + + + + + rfc3339-validator + 0.1.4 + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/ + from implicit index: pypi + + + + + rfc3987 + 1.3.8 + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/ + from implicit index: pypi + + + + + rpds-py + 0.13.2 + pkg:pypi/rpds-py@0.13.2 + + + https://pypi.org/simple/rpds-py/ + from implicit index: pypi + + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + + + + sortedcontainers + 2.4.0 + pkg:pypi/sortedcontainers@2.4.0 + + + https://pypi.org/simple/sortedcontainers/ + from implicit index: pypi + + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + + + + uri-template + 1.3.0 + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/ + from implicit index: pypi + + + + + webcolors + 1.13 + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/ + from implicit index: pypi + + + + + diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.2.json.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.2.json.bin new file mode 100644 index 00000000..99ec13a2 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-extras_1.2.json.bin @@ -0,0 +1,459 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs==23.1.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/attrs/" + } + ], + "name": "attrs", + "purl": "pkg:pypi/attrs@23.1.0", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean.py==4.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/boolean.py/" + } + ], + "name": "boolean.py", + "purl": "pkg:pypi/boolean.py@4.0", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib==5.1.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/" + } + ], + "name": "cyclonedx-python-lib", + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml==0.7.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/defusedxml/" + } + ], + "name": "defusedxml", + "purl": "pkg:pypi/defusedxml@0.7.1", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn==1.5.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/" + } + ], + "name": "fqdn", + "purl": "pkg:pypi/fqdn@1.5.1", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna==3.6", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@3.6", + "type": "library", + "version": "3.6" + }, + { + "bom-ref": "isoduration==20.11.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer==2.4", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/" + } + ], + "name": "jsonpointer", + "purl": "pkg:pypi/jsonpointer@2.4", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema==4.20.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema/" + } + ], + "name": "jsonschema", + "purl": "pkg:pypi/jsonschema@4.20.0", + "type": "library", + "version": "4.20.0" + }, + { + "bom-ref": "jsonschema-specifications==2023.11.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/" + } + ], + "name": "jsonschema-specifications", + "purl": "pkg:pypi/jsonschema-specifications@2023.11.2", + "type": "library", + "version": "2023.11.2" + }, + { + "bom-ref": "license-expression==30.2.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/license-expression/" + } + ], + "name": "license-expression", + "purl": "pkg:pypi/license-expression@30.2.0", + "type": "library", + "version": "30.2.0" + }, + { + "bom-ref": "lxml==4.9.3", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/" + } + ], + "name": "lxml", + "purl": "pkg:pypi/lxml@4.9.3", + "type": "library", + "version": "4.9.3" + }, + { + "bom-ref": "packageurl-python==0.11.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python@0.11.2", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "py-serializable==0.15.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/py-serializable/" + } + ], + "name": "py-serializable", + "purl": "pkg:pypi/py-serializable@0.15.0", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing==0.31.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/referencing/" + } + ], + "name": "referencing", + "purl": "pkg:pypi/referencing@0.31.1", + "type": "library", + "version": "0.31.1" + }, + { + "bom-ref": "rfc3339-validator==0.1.4", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/" + } + ], + "name": "rfc3339-validator", + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987==1.3.8", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/" + } + ], + "name": "rfc3987", + "purl": "pkg:pypi/rfc3987@1.3.8", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py==0.13.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/" + } + ], + "name": "rpds-py", + "purl": "pkg:pypi/rpds-py@0.13.2", + "type": "library", + "version": "0.13.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers==2.4.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/sortedcontainers/" + } + ], + "name": "sortedcontainers", + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/" + } + ], + "name": "uri-template", + "purl": "pkg:pypi/uri-template@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors==1.13", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/" + } + ], + "name": "webcolors", + "purl": "pkg:pypi/webcolors@1.13", + "type": "library", + "version": "1.13" + } + ], + "dependencies": [ + { + "ref": "arrow==1.3.0" + }, + { + "ref": "attrs==23.1.0" + }, + { + "ref": "boolean.py==4.0" + }, + { + "ref": "cyclonedx-python-lib==5.1.1" + }, + { + "ref": "defusedxml==0.7.1" + }, + { + "ref": "fqdn==1.5.1" + }, + { + "ref": "idna==3.6" + }, + { + "ref": "isoduration==20.11.0" + }, + { + "ref": "jsonpointer==2.4" + }, + { + "ref": "jsonschema-specifications==2023.11.2" + }, + { + "ref": "jsonschema==4.20.0" + }, + { + "ref": "license-expression==30.2.0" + }, + { + "ref": "lxml==4.9.3" + }, + { + "ref": "packageurl-python==0.11.2" + }, + { + "ref": "py-serializable==0.15.0" + }, + { + "ref": "python-dateutil==2.8.2" + }, + { + "ref": "referencing==0.31.1" + }, + { + "ref": "rfc3339-validator==0.1.4" + }, + { + "ref": "rfc3987==1.3.8" + }, + { + "ref": "root-component" + }, + { + "ref": "rpds-py==0.13.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "sortedcontainers==2.4.0" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + }, + { + "ref": "uri-template==1.3.0" + }, + { + "ref": "webcolors==1.13" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.2.xml.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.2.xml.bin new file mode 100644 index 00000000..22bbe3c0 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-extras_1.2.xml.bin @@ -0,0 +1,327 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + + + + attrs + 23.1.0 + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/ + from implicit index: pypi + + + + + boolean.py + 4.0 + pkg:pypi/boolean.py@4.0 + + + https://pypi.org/simple/boolean.py/ + from implicit index: pypi + + + + + cyclonedx-python-lib + 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + from implicit index: pypi + + + + + defusedxml + 0.7.1 + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.org/simple/defusedxml/ + from implicit index: pypi + + + + + fqdn + 1.5.1 + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/ + from implicit index: pypi + + + + + idna + 3.6 + pkg:pypi/idna@3.6 + + + https://pypi.org/simple/idna/ + from implicit index: pypi + + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from implicit index: pypi + + + + + jsonpointer + 2.4 + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/ + from implicit index: pypi + + + + + jsonschema + 4.20.0 + pkg:pypi/jsonschema@4.20.0 + + + https://pypi.org/simple/jsonschema/ + from implicit index: pypi + + + + + jsonschema-specifications + 2023.11.2 + pkg:pypi/jsonschema-specifications@2023.11.2 + + + https://pypi.org/simple/jsonschema-specifications/ + from implicit index: pypi + + + + + license-expression + 30.2.0 + pkg:pypi/license-expression@30.2.0 + + + https://pypi.org/simple/license-expression/ + from implicit index: pypi + + + + + lxml + 4.9.3 + pkg:pypi/lxml@4.9.3 + + + https://pypi.org/simple/lxml/ + from implicit index: pypi + + + + + packageurl-python + 0.11.2 + pkg:pypi/packageurl-python@0.11.2 + + + https://pypi.org/simple/packageurl-python/ + from implicit index: pypi + + + + + py-serializable + 0.15.0 + pkg:pypi/py-serializable@0.15.0 + + + https://pypi.org/simple/py-serializable/ + from implicit index: pypi + + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + + + + referencing + 0.31.1 + pkg:pypi/referencing@0.31.1 + + + https://pypi.org/simple/referencing/ + from implicit index: pypi + + + + + rfc3339-validator + 0.1.4 + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/ + from implicit index: pypi + + + + + rfc3987 + 1.3.8 + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/ + from implicit index: pypi + + + + + rpds-py + 0.13.2 + pkg:pypi/rpds-py@0.13.2 + + + https://pypi.org/simple/rpds-py/ + from implicit index: pypi + + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + + + + sortedcontainers + 2.4.0 + pkg:pypi/sortedcontainers@2.4.0 + + + https://pypi.org/simple/sortedcontainers/ + from implicit index: pypi + + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + + + + uri-template + 1.3.0 + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/ + from implicit index: pypi + + + + + webcolors + 1.13 + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/ + from implicit index: pypi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.3.json.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.3.json.bin new file mode 100644 index 00000000..d94a3448 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-extras_1.3.json.bin @@ -0,0 +1,1625 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + }, + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs==23.1.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04" + }, + { + "alg": "SHA-256", + "content": "6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/" + } + ], + "name": "attrs", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/attrs@23.1.0", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean.py==4.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4" + }, + { + "alg": "SHA-256", + "content": "2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/boolean.py/" + } + ], + "name": "boolean.py", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/boolean.py@4.0", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib==5.1.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6" + }, + { + "alg": "SHA-256", + "content": "2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/" + } + ], + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + }, + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml==0.7.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69" + }, + { + "alg": "SHA-256", + "content": "a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/defusedxml/" + } + ], + "name": "defusedxml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/defusedxml@0.7.1", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn==1.5.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f" + }, + { + "alg": "SHA-256", + "content": "3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/" + } + ], + "name": "fqdn", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/fqdn@1.5.1", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna==3.6", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca" + }, + { + "alg": "SHA-256", + "content": "c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/idna@3.6", + "type": "library", + "version": "3.6" + }, + { + "bom-ref": "isoduration==20.11.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + }, + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer==2.4", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a" + }, + { + "alg": "SHA-256", + "content": "585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/" + } + ], + "name": "jsonpointer", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/jsonpointer@2.4", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema==4.20.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa" + }, + { + "alg": "SHA-256", + "content": "ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema/" + } + ], + "name": "jsonschema", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + }, + { + "name": "cdx:python:package:required-extra", + "value": "format" + } + ], + "purl": "pkg:pypi/jsonschema@4.20.0", + "type": "library", + "version": "4.20.0" + }, + { + "bom-ref": "jsonschema-specifications==2023.11.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8" + }, + { + "alg": "SHA-256", + "content": "e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/" + } + ], + "name": "jsonschema-specifications", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/jsonschema-specifications@2023.11.2", + "type": "library", + "version": "2023.11.2" + }, + { + "bom-ref": "license-expression==30.2.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1a7dc2bb2d09cdc983d072e4f9adc787e107e09def84cbb3919baaaf4f8e6fa1" + }, + { + "alg": "SHA-256", + "content": "599928edd995c43fc335e0af342076144dc71cb858afa1ed9c1c30c4e81794f5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/license-expression/" + } + ], + "name": "license-expression", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/license-expression@30.2.0", + "type": "library", + "version": "30.2.0" + }, + { + "bom-ref": "lxml==4.9.3", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3" + }, + { + "alg": "SHA-256", + "content": "075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d" + }, + { + "alg": "SHA-256", + "content": "081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a" + }, + { + "alg": "SHA-256", + "content": "0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120" + }, + { + "alg": "SHA-256", + "content": "0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305" + }, + { + "alg": "SHA-256", + "content": "0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287" + }, + { + "alg": "SHA-256", + "content": "0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23" + }, + { + "alg": "SHA-256", + "content": "120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52" + }, + { + "alg": "SHA-256", + "content": "1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f" + }, + { + "alg": "SHA-256", + "content": "141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4" + }, + { + "alg": "SHA-256", + "content": "14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584" + }, + { + "alg": "SHA-256", + "content": "1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f" + }, + { + "alg": "SHA-256", + "content": "17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693" + }, + { + "alg": "SHA-256", + "content": "1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef" + }, + { + "alg": "SHA-256", + "content": "1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5" + }, + { + "alg": "SHA-256", + "content": "23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02" + }, + { + "alg": "SHA-256", + "content": "25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc" + }, + { + "alg": "SHA-256", + "content": "2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7" + }, + { + "alg": "SHA-256", + "content": "303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da" + }, + { + "alg": "SHA-256", + "content": "3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a" + }, + { + "alg": "SHA-256", + "content": "3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40" + }, + { + "alg": "SHA-256", + "content": "411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8" + }, + { + "alg": "SHA-256", + "content": "42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd" + }, + { + "alg": "SHA-256", + "content": "46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601" + }, + { + "alg": "SHA-256", + "content": "48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c" + }, + { + "alg": "SHA-256", + "content": "48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be" + }, + { + "alg": "SHA-256", + "content": "4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2" + }, + { + "alg": "SHA-256", + "content": "4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c" + }, + { + "alg": "SHA-256", + "content": "4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129" + }, + { + "alg": "SHA-256", + "content": "4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc" + }, + { + "alg": "SHA-256", + "content": "4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2" + }, + { + "alg": "SHA-256", + "content": "4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1" + }, + { + "alg": "SHA-256", + "content": "4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7" + }, + { + "alg": "SHA-256", + "content": "50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d" + }, + { + "alg": "SHA-256", + "content": "50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477" + }, + { + "alg": "SHA-256", + "content": "53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d" + }, + { + "alg": "SHA-256", + "content": "5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e" + }, + { + "alg": "SHA-256", + "content": "56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7" + }, + { + "alg": "SHA-256", + "content": "578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2" + }, + { + "alg": "SHA-256", + "content": "57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574" + }, + { + "alg": "SHA-256", + "content": "57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf" + }, + { + "alg": "SHA-256", + "content": "5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b" + }, + { + "alg": "SHA-256", + "content": "5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98" + }, + { + "alg": "SHA-256", + "content": "64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12" + }, + { + "alg": "SHA-256", + "content": "65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42" + }, + { + "alg": "SHA-256", + "content": "6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35" + }, + { + "alg": "SHA-256", + "content": "690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d" + }, + { + "alg": "SHA-256", + "content": "6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce" + }, + { + "alg": "SHA-256", + "content": "704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d" + }, + { + "alg": "SHA-256", + "content": "71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f" + }, + { + "alg": "SHA-256", + "content": "71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db" + }, + { + "alg": "SHA-256", + "content": "7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4" + }, + { + "alg": "SHA-256", + "content": "8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694" + }, + { + "alg": "SHA-256", + "content": "8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac" + }, + { + "alg": "SHA-256", + "content": "8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2" + }, + { + "alg": "SHA-256", + "content": "8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7" + }, + { + "alg": "SHA-256", + "content": "92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96" + }, + { + "alg": "SHA-256", + "content": "97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d" + }, + { + "alg": "SHA-256", + "content": "9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b" + }, + { + "alg": "SHA-256", + "content": "9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a" + }, + { + "alg": "SHA-256", + "content": "9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13" + }, + { + "alg": "SHA-256", + "content": "9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340" + }, + { + "alg": "SHA-256", + "content": "9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6" + }, + { + "alg": "SHA-256", + "content": "aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458" + }, + { + "alg": "SHA-256", + "content": "ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c" + }, + { + "alg": "SHA-256", + "content": "b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c" + }, + { + "alg": "SHA-256", + "content": "b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9" + }, + { + "alg": "SHA-256", + "content": "b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432" + }, + { + "alg": "SHA-256", + "content": "b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991" + }, + { + "alg": "SHA-256", + "content": "bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69" + }, + { + "alg": "SHA-256", + "content": "bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf" + }, + { + "alg": "SHA-256", + "content": "c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb" + }, + { + "alg": "SHA-256", + "content": "c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b" + }, + { + "alg": "SHA-256", + "content": "c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833" + }, + { + "alg": "SHA-256", + "content": "cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76" + }, + { + "alg": "SHA-256", + "content": "cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85" + }, + { + "alg": "SHA-256", + "content": "cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e" + }, + { + "alg": "SHA-256", + "content": "d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50" + }, + { + "alg": "SHA-256", + "content": "d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8" + }, + { + "alg": "SHA-256", + "content": "d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4" + }, + { + "alg": "SHA-256", + "content": "d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b" + }, + { + "alg": "SHA-256", + "content": "dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5" + }, + { + "alg": "SHA-256", + "content": "e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190" + }, + { + "alg": "SHA-256", + "content": "e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7" + }, + { + "alg": "SHA-256", + "content": "eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa" + }, + { + "alg": "SHA-256", + "content": "ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0" + }, + { + "alg": "SHA-256", + "content": "f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9" + }, + { + "alg": "SHA-256", + "content": "f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0" + }, + { + "alg": "SHA-256", + "content": "fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b" + }, + { + "alg": "SHA-256", + "content": "fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5" + }, + { + "alg": "SHA-256", + "content": "fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7" + }, + { + "alg": "SHA-256", + "content": "fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/" + } + ], + "name": "lxml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/lxml@4.9.3", + "type": "library", + "version": "4.9.3" + }, + { + "bom-ref": "packageurl-python==0.11.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471" + }, + { + "alg": "SHA-256", + "content": "799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/" + } + ], + "name": "packageurl-python", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/packageurl-python@0.11.2", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "py-serializable==0.15.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771" + }, + { + "alg": "SHA-256", + "content": "d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/py-serializable/" + } + ], + "name": "py-serializable", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/py-serializable@0.15.0", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + }, + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing==0.31.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec" + }, + { + "alg": "SHA-256", + "content": "c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/" + } + ], + "name": "referencing", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/referencing@0.31.1", + "type": "library", + "version": "0.31.1" + }, + { + "bom-ref": "rfc3339-validator==0.1.4", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b" + }, + { + "alg": "SHA-256", + "content": "24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/" + } + ], + "name": "rfc3339-validator", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987==1.3.8", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53" + }, + { + "alg": "SHA-256", + "content": "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/" + } + ], + "name": "rfc3987", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/rfc3987@1.3.8", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py==0.13.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276" + }, + { + "alg": "SHA-256", + "content": "12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f" + }, + { + "alg": "SHA-256", + "content": "15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60" + }, + { + "alg": "SHA-256", + "content": "188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0" + }, + { + "alg": "SHA-256", + "content": "1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d" + }, + { + "alg": "SHA-256", + "content": "244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3" + }, + { + "alg": "SHA-256", + "content": "25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2" + }, + { + "alg": "SHA-256", + "content": "25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9" + }, + { + "alg": "SHA-256", + "content": "29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb" + }, + { + "alg": "SHA-256", + "content": "2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b" + }, + { + "alg": "SHA-256", + "content": "2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a" + }, + { + "alg": "SHA-256", + "content": "2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d" + }, + { + "alg": "SHA-256", + "content": "2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1" + }, + { + "alg": "SHA-256", + "content": "31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7" + }, + { + "alg": "SHA-256", + "content": "35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9" + }, + { + "alg": "SHA-256", + "content": "38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4" + }, + { + "alg": "SHA-256", + "content": "38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53" + }, + { + "alg": "SHA-256", + "content": "3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea" + }, + { + "alg": "SHA-256", + "content": "3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66" + }, + { + "alg": "SHA-256", + "content": "3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190" + }, + { + "alg": "SHA-256", + "content": "46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3" + }, + { + "alg": "SHA-256", + "content": "4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12" + }, + { + "alg": "SHA-256", + "content": "4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824" + }, + { + "alg": "SHA-256", + "content": "4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27" + }, + { + "alg": "SHA-256", + "content": "4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e" + }, + { + "alg": "SHA-256", + "content": "4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8" + }, + { + "alg": "SHA-256", + "content": "51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8" + }, + { + "alg": "SHA-256", + "content": "530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914" + }, + { + "alg": "SHA-256", + "content": "5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211" + }, + { + "alg": "SHA-256", + "content": "5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab" + }, + { + "alg": "SHA-256", + "content": "5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468" + }, + { + "alg": "SHA-256", + "content": "5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3" + }, + { + "alg": "SHA-256", + "content": "5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff" + }, + { + "alg": "SHA-256", + "content": "5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c" + }, + { + "alg": "SHA-256", + "content": "603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d" + }, + { + "alg": "SHA-256", + "content": "61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e" + }, + { + "alg": "SHA-256", + "content": "61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a" + }, + { + "alg": "SHA-256", + "content": "65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e" + }, + { + "alg": "SHA-256", + "content": "67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a" + }, + { + "alg": "SHA-256", + "content": "6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0" + }, + { + "alg": "SHA-256", + "content": "6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1" + }, + { + "alg": "SHA-256", + "content": "6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3" + }, + { + "alg": "SHA-256", + "content": "729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42" + }, + { + "alg": "SHA-256", + "content": "751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452" + }, + { + "alg": "SHA-256", + "content": "76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198" + }, + { + "alg": "SHA-256", + "content": "79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa" + }, + { + "alg": "SHA-256", + "content": "7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b" + }, + { + "alg": "SHA-256", + "content": "7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4" + }, + { + "alg": "SHA-256", + "content": "80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1" + }, + { + "alg": "SHA-256", + "content": "87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad" + }, + { + "alg": "SHA-256", + "content": "881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c" + }, + { + "alg": "SHA-256", + "content": "8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381" + }, + { + "alg": "SHA-256", + "content": "8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0" + }, + { + "alg": "SHA-256", + "content": "8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2" + }, + { + "alg": "SHA-256", + "content": "96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3" + }, + { + "alg": "SHA-256", + "content": "96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31" + }, + { + "alg": "SHA-256", + "content": "97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74" + }, + { + "alg": "SHA-256", + "content": "9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6" + }, + { + "alg": "SHA-256", + "content": "9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff" + }, + { + "alg": "SHA-256", + "content": "a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b" + }, + { + "alg": "SHA-256", + "content": "aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca" + }, + { + "alg": "SHA-256", + "content": "ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd" + }, + { + "alg": "SHA-256", + "content": "ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a" + }, + { + "alg": "SHA-256", + "content": "aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568" + }, + { + "alg": "SHA-256", + "content": "b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1" + }, + { + "alg": "SHA-256", + "content": "b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c" + }, + { + "alg": "SHA-256", + "content": "b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad" + }, + { + "alg": "SHA-256", + "content": "b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7" + }, + { + "alg": "SHA-256", + "content": "b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d" + }, + { + "alg": "SHA-256", + "content": "b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658" + }, + { + "alg": "SHA-256", + "content": "bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1" + }, + { + "alg": "SHA-256", + "content": "bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64" + }, + { + "alg": "SHA-256", + "content": "bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815" + }, + { + "alg": "SHA-256", + "content": "c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1" + }, + { + "alg": "SHA-256", + "content": "c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac" + }, + { + "alg": "SHA-256", + "content": "c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07" + }, + { + "alg": "SHA-256", + "content": "c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e" + }, + { + "alg": "SHA-256", + "content": "c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee" + }, + { + "alg": "SHA-256", + "content": "d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45" + }, + { + "alg": "SHA-256", + "content": "d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc" + }, + { + "alg": "SHA-256", + "content": "d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41" + }, + { + "alg": "SHA-256", + "content": "d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2" + }, + { + "alg": "SHA-256", + "content": "d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083" + }, + { + "alg": "SHA-256", + "content": "d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e" + }, + { + "alg": "SHA-256", + "content": "db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266" + }, + { + "alg": "SHA-256", + "content": "ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141" + }, + { + "alg": "SHA-256", + "content": "e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b" + }, + { + "alg": "SHA-256", + "content": "e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933" + }, + { + "alg": "SHA-256", + "content": "e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21" + }, + { + "alg": "SHA-256", + "content": "eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0" + }, + { + "alg": "SHA-256", + "content": "ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7" + }, + { + "alg": "SHA-256", + "content": "ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc" + }, + { + "alg": "SHA-256", + "content": "efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba" + }, + { + "alg": "SHA-256", + "content": "f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a" + }, + { + "alg": "SHA-256", + "content": "f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57" + }, + { + "alg": "SHA-256", + "content": "f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2" + }, + { + "alg": "SHA-256", + "content": "f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007" + }, + { + "alg": "SHA-256", + "content": "f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f" + }, + { + "alg": "SHA-256", + "content": "fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/" + } + ], + "name": "rpds-py", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/rpds-py@0.13.2", + "type": "library", + "version": "0.13.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers==2.4.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88" + }, + { + "alg": "SHA-256", + "content": "a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/sortedcontainers/" + } + ], + "name": "sortedcontainers", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + }, + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7" + }, + { + "alg": "SHA-256", + "content": "a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/" + } + ], + "name": "uri-template", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/uri-template@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors==1.13", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf" + }, + { + "alg": "SHA-256", + "content": "c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/" + } + ], + "name": "webcolors", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/webcolors@1.13", + "type": "library", + "version": "1.13" + } + ], + "dependencies": [ + { + "ref": "arrow==1.3.0" + }, + { + "ref": "attrs==23.1.0" + }, + { + "ref": "boolean.py==4.0" + }, + { + "ref": "cyclonedx-python-lib==5.1.1" + }, + { + "ref": "defusedxml==0.7.1" + }, + { + "ref": "fqdn==1.5.1" + }, + { + "ref": "idna==3.6" + }, + { + "ref": "isoduration==20.11.0" + }, + { + "ref": "jsonpointer==2.4" + }, + { + "ref": "jsonschema-specifications==2023.11.2" + }, + { + "ref": "jsonschema==4.20.0" + }, + { + "ref": "license-expression==30.2.0" + }, + { + "ref": "lxml==4.9.3" + }, + { + "ref": "packageurl-python==0.11.2" + }, + { + "ref": "py-serializable==0.15.0" + }, + { + "ref": "python-dateutil==2.8.2" + }, + { + "ref": "referencing==0.31.1" + }, + { + "ref": "rfc3339-validator==0.1.4" + }, + { + "ref": "rfc3987==1.3.8" + }, + { + "ref": "root-component" + }, + { + "ref": "rpds-py==0.13.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "sortedcontainers==2.4.0" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + }, + { + "ref": "uri-template==1.3.0" + }, + { + "ref": "webcolors==1.13" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.3.xml.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.3.xml.bin new file mode 100644 index 00000000..15f27e1e --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-extras_1.3.xml.bin @@ -0,0 +1,695 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + default + + + + attrs + 23.1.0 + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/ + from implicit index: pypi + + 1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 + 6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 + + + + + default + + + + boolean.py + 4.0 + pkg:pypi/boolean.py@4.0 + + + https://pypi.org/simple/boolean.py/ + from implicit index: pypi + + 17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4 + 2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd + + + + + default + + + + cyclonedx-python-lib + 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + from implicit index: pypi + + 215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6 + 2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3 + + + + + default + json-validation + xml-validation + + + + defusedxml + 0.7.1 + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.org/simple/defusedxml/ + from implicit index: pypi + + 1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 + a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 + + + + + default + + + + fqdn + 1.5.1 + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/ + from implicit index: pypi + + 105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f + 3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014 + + + + + default + + + + idna + 3.6 + pkg:pypi/idna@3.6 + + + https://pypi.org/simple/idna/ + from implicit index: pypi + + 9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca + c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + + + + + default + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from implicit index: pypi + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + + default + + + + jsonpointer + 2.4 + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/ + from implicit index: pypi + + 15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a + 585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88 + + + + + default + + + + jsonschema + 4.20.0 + pkg:pypi/jsonschema@4.20.0 + + + https://pypi.org/simple/jsonschema/ + from implicit index: pypi + + 4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa + ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3 + + + + + default + format + + + + jsonschema-specifications + 2023.11.2 + pkg:pypi/jsonschema-specifications@2023.11.2 + + + https://pypi.org/simple/jsonschema-specifications/ + from implicit index: pypi + + 9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8 + e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93 + + + + + default + + + + license-expression + 30.2.0 + pkg:pypi/license-expression@30.2.0 + + + https://pypi.org/simple/license-expression/ + from implicit index: pypi + + 1a7dc2bb2d09cdc983d072e4f9adc787e107e09def84cbb3919baaaf4f8e6fa1 + 599928edd995c43fc335e0af342076144dc71cb858afa1ed9c1c30c4e81794f5 + + + + + default + + + + lxml + 4.9.3 + pkg:pypi/lxml@4.9.3 + + + https://pypi.org/simple/lxml/ + from implicit index: pypi + + 05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3 + 075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d + 081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a + 0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120 + 0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305 + 0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287 + 0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23 + 120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52 + 1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f + 141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4 + 14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584 + 1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f + 17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693 + 1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef + 1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5 + 23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02 + 25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc + 2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7 + 303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da + 3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a + 3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40 + 411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8 + 42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd + 46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601 + 48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c + 48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be + 4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2 + 4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c + 4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129 + 4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc + 4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2 + 4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1 + 4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7 + 50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d + 50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477 + 53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d + 5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e + 56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7 + 578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2 + 57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574 + 57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf + 5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b + 5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98 + 64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12 + 65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42 + 6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35 + 690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d + 6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce + 704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d + 71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f + 71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db + 7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4 + 8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694 + 8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac + 8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2 + 8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7 + 92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96 + 97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d + 9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b + 9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a + 9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13 + 9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340 + 9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6 + aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458 + ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c + b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c + b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9 + b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432 + b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991 + bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69 + bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf + c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb + c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b + c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833 + cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76 + cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85 + cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e + d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50 + d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8 + d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4 + d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b + dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5 + e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190 + e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7 + eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa + ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0 + f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9 + f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0 + fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b + fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5 + fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7 + fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4 + + + + + default + + + + packageurl-python + 0.11.2 + pkg:pypi/packageurl-python@0.11.2 + + + https://pypi.org/simple/packageurl-python/ + from implicit index: pypi + + 01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471 + 799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84 + + + + + default + + + + py-serializable + 0.15.0 + pkg:pypi/py-serializable@0.15.0 + + + https://pypi.org/simple/py-serializable/ + from implicit index: pypi + + 8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771 + d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2 + + + + + default + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + default + + + + referencing + 0.31.1 + pkg:pypi/referencing@0.31.1 + + + https://pypi.org/simple/referencing/ + from implicit index: pypi + + 81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec + c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d + + + + + default + + + + rfc3339-validator + 0.1.4 + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/ + from implicit index: pypi + + 138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b + 24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa + + + + + default + + + + rfc3987 + 1.3.8 + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/ + from implicit index: pypi + + 10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53 + d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733 + + + + + default + + + + rpds-py + 0.13.2 + pkg:pypi/rpds-py@0.13.2 + + + https://pypi.org/simple/rpds-py/ + from implicit index: pypi + + 06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276 + 12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f + 15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60 + 188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0 + 1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d + 244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3 + 25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2 + 25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9 + 29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb + 2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b + 2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a + 2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d + 2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1 + 31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7 + 35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9 + 38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4 + 38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53 + 3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea + 3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66 + 3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190 + 46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3 + 4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12 + 4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824 + 4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27 + 4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e + 4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8 + 51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8 + 530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914 + 5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211 + 5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab + 5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468 + 5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3 + 5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff + 5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c + 603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d + 61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e + 61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a + 65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e + 67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a + 6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0 + 6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1 + 6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3 + 729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42 + 751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452 + 76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198 + 79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa + 7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b + 7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4 + 80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1 + 87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad + 881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c + 8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381 + 8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0 + 8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2 + 96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3 + 96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31 + 97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74 + 9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6 + 9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff + a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b + aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca + ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd + ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a + aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568 + b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1 + b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c + b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad + b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7 + b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d + b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658 + bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1 + bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64 + bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815 + c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1 + c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac + c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07 + c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e + c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee + d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45 + d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc + d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41 + d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2 + d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083 + d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e + db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266 + ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141 + e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b + e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933 + e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21 + eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0 + ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7 + ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc + efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba + f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a + f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57 + f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2 + f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007 + f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f + fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f + + + + + default + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + default + + + + sortedcontainers + 2.4.0 + pkg:pypi/sortedcontainers@2.4.0 + + + https://pypi.org/simple/sortedcontainers/ + from implicit index: pypi + + 25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 + a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 + + + + + default + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + default + + + + uri-template + 1.3.0 + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/ + from implicit index: pypi + + 0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 + a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363 + + + + + default + + + + webcolors + 1.13 + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/ + from implicit index: pypi + + 29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf + c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a + + + + + default + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.4.json.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.4.json.bin new file mode 100644 index 00000000..641ff2d3 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-extras_1.4.json.bin @@ -0,0 +1,1621 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + }, + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs==23.1.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04" + }, + { + "alg": "SHA-256", + "content": "6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/" + } + ], + "name": "attrs", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/attrs@23.1.0", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean.py==4.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4" + }, + { + "alg": "SHA-256", + "content": "2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/boolean.py/" + } + ], + "name": "boolean.py", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/boolean.py@4.0", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib==5.1.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6" + }, + { + "alg": "SHA-256", + "content": "2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/" + } + ], + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + }, + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml==0.7.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69" + }, + { + "alg": "SHA-256", + "content": "a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/defusedxml/" + } + ], + "name": "defusedxml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/defusedxml@0.7.1", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn==1.5.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f" + }, + { + "alg": "SHA-256", + "content": "3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/" + } + ], + "name": "fqdn", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/fqdn@1.5.1", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna==3.6", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca" + }, + { + "alg": "SHA-256", + "content": "c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/idna@3.6", + "type": "library", + "version": "3.6" + }, + { + "bom-ref": "isoduration==20.11.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + }, + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer==2.4", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a" + }, + { + "alg": "SHA-256", + "content": "585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/" + } + ], + "name": "jsonpointer", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/jsonpointer@2.4", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema==4.20.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa" + }, + { + "alg": "SHA-256", + "content": "ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema/" + } + ], + "name": "jsonschema", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + }, + { + "name": "cdx:python:package:required-extra", + "value": "format" + } + ], + "purl": "pkg:pypi/jsonschema@4.20.0", + "type": "library", + "version": "4.20.0" + }, + { + "bom-ref": "jsonschema-specifications==2023.11.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8" + }, + { + "alg": "SHA-256", + "content": "e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/" + } + ], + "name": "jsonschema-specifications", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/jsonschema-specifications@2023.11.2", + "type": "library", + "version": "2023.11.2" + }, + { + "bom-ref": "license-expression==30.2.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1a7dc2bb2d09cdc983d072e4f9adc787e107e09def84cbb3919baaaf4f8e6fa1" + }, + { + "alg": "SHA-256", + "content": "599928edd995c43fc335e0af342076144dc71cb858afa1ed9c1c30c4e81794f5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/license-expression/" + } + ], + "name": "license-expression", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/license-expression@30.2.0", + "type": "library", + "version": "30.2.0" + }, + { + "bom-ref": "lxml==4.9.3", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3" + }, + { + "alg": "SHA-256", + "content": "075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d" + }, + { + "alg": "SHA-256", + "content": "081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a" + }, + { + "alg": "SHA-256", + "content": "0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120" + }, + { + "alg": "SHA-256", + "content": "0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305" + }, + { + "alg": "SHA-256", + "content": "0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287" + }, + { + "alg": "SHA-256", + "content": "0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23" + }, + { + "alg": "SHA-256", + "content": "120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52" + }, + { + "alg": "SHA-256", + "content": "1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f" + }, + { + "alg": "SHA-256", + "content": "141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4" + }, + { + "alg": "SHA-256", + "content": "14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584" + }, + { + "alg": "SHA-256", + "content": "1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f" + }, + { + "alg": "SHA-256", + "content": "17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693" + }, + { + "alg": "SHA-256", + "content": "1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef" + }, + { + "alg": "SHA-256", + "content": "1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5" + }, + { + "alg": "SHA-256", + "content": "23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02" + }, + { + "alg": "SHA-256", + "content": "25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc" + }, + { + "alg": "SHA-256", + "content": "2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7" + }, + { + "alg": "SHA-256", + "content": "303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da" + }, + { + "alg": "SHA-256", + "content": "3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a" + }, + { + "alg": "SHA-256", + "content": "3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40" + }, + { + "alg": "SHA-256", + "content": "411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8" + }, + { + "alg": "SHA-256", + "content": "42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd" + }, + { + "alg": "SHA-256", + "content": "46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601" + }, + { + "alg": "SHA-256", + "content": "48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c" + }, + { + "alg": "SHA-256", + "content": "48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be" + }, + { + "alg": "SHA-256", + "content": "4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2" + }, + { + "alg": "SHA-256", + "content": "4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c" + }, + { + "alg": "SHA-256", + "content": "4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129" + }, + { + "alg": "SHA-256", + "content": "4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc" + }, + { + "alg": "SHA-256", + "content": "4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2" + }, + { + "alg": "SHA-256", + "content": "4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1" + }, + { + "alg": "SHA-256", + "content": "4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7" + }, + { + "alg": "SHA-256", + "content": "50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d" + }, + { + "alg": "SHA-256", + "content": "50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477" + }, + { + "alg": "SHA-256", + "content": "53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d" + }, + { + "alg": "SHA-256", + "content": "5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e" + }, + { + "alg": "SHA-256", + "content": "56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7" + }, + { + "alg": "SHA-256", + "content": "578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2" + }, + { + "alg": "SHA-256", + "content": "57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574" + }, + { + "alg": "SHA-256", + "content": "57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf" + }, + { + "alg": "SHA-256", + "content": "5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b" + }, + { + "alg": "SHA-256", + "content": "5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98" + }, + { + "alg": "SHA-256", + "content": "64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12" + }, + { + "alg": "SHA-256", + "content": "65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42" + }, + { + "alg": "SHA-256", + "content": "6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35" + }, + { + "alg": "SHA-256", + "content": "690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d" + }, + { + "alg": "SHA-256", + "content": "6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce" + }, + { + "alg": "SHA-256", + "content": "704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d" + }, + { + "alg": "SHA-256", + "content": "71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f" + }, + { + "alg": "SHA-256", + "content": "71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db" + }, + { + "alg": "SHA-256", + "content": "7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4" + }, + { + "alg": "SHA-256", + "content": "8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694" + }, + { + "alg": "SHA-256", + "content": "8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac" + }, + { + "alg": "SHA-256", + "content": "8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2" + }, + { + "alg": "SHA-256", + "content": "8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7" + }, + { + "alg": "SHA-256", + "content": "92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96" + }, + { + "alg": "SHA-256", + "content": "97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d" + }, + { + "alg": "SHA-256", + "content": "9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b" + }, + { + "alg": "SHA-256", + "content": "9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a" + }, + { + "alg": "SHA-256", + "content": "9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13" + }, + { + "alg": "SHA-256", + "content": "9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340" + }, + { + "alg": "SHA-256", + "content": "9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6" + }, + { + "alg": "SHA-256", + "content": "aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458" + }, + { + "alg": "SHA-256", + "content": "ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c" + }, + { + "alg": "SHA-256", + "content": "b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c" + }, + { + "alg": "SHA-256", + "content": "b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9" + }, + { + "alg": "SHA-256", + "content": "b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432" + }, + { + "alg": "SHA-256", + "content": "b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991" + }, + { + "alg": "SHA-256", + "content": "bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69" + }, + { + "alg": "SHA-256", + "content": "bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf" + }, + { + "alg": "SHA-256", + "content": "c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb" + }, + { + "alg": "SHA-256", + "content": "c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b" + }, + { + "alg": "SHA-256", + "content": "c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833" + }, + { + "alg": "SHA-256", + "content": "cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76" + }, + { + "alg": "SHA-256", + "content": "cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85" + }, + { + "alg": "SHA-256", + "content": "cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e" + }, + { + "alg": "SHA-256", + "content": "d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50" + }, + { + "alg": "SHA-256", + "content": "d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8" + }, + { + "alg": "SHA-256", + "content": "d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4" + }, + { + "alg": "SHA-256", + "content": "d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b" + }, + { + "alg": "SHA-256", + "content": "dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5" + }, + { + "alg": "SHA-256", + "content": "e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190" + }, + { + "alg": "SHA-256", + "content": "e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7" + }, + { + "alg": "SHA-256", + "content": "eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa" + }, + { + "alg": "SHA-256", + "content": "ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0" + }, + { + "alg": "SHA-256", + "content": "f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9" + }, + { + "alg": "SHA-256", + "content": "f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0" + }, + { + "alg": "SHA-256", + "content": "fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b" + }, + { + "alg": "SHA-256", + "content": "fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5" + }, + { + "alg": "SHA-256", + "content": "fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7" + }, + { + "alg": "SHA-256", + "content": "fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/" + } + ], + "name": "lxml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/lxml@4.9.3", + "type": "library", + "version": "4.9.3" + }, + { + "bom-ref": "packageurl-python==0.11.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471" + }, + { + "alg": "SHA-256", + "content": "799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/" + } + ], + "name": "packageurl-python", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/packageurl-python@0.11.2", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "py-serializable==0.15.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771" + }, + { + "alg": "SHA-256", + "content": "d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/py-serializable/" + } + ], + "name": "py-serializable", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/py-serializable@0.15.0", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + }, + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing==0.31.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec" + }, + { + "alg": "SHA-256", + "content": "c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/" + } + ], + "name": "referencing", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/referencing@0.31.1", + "type": "library", + "version": "0.31.1" + }, + { + "bom-ref": "rfc3339-validator==0.1.4", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b" + }, + { + "alg": "SHA-256", + "content": "24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/" + } + ], + "name": "rfc3339-validator", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987==1.3.8", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53" + }, + { + "alg": "SHA-256", + "content": "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/" + } + ], + "name": "rfc3987", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/rfc3987@1.3.8", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py==0.13.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276" + }, + { + "alg": "SHA-256", + "content": "12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f" + }, + { + "alg": "SHA-256", + "content": "15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60" + }, + { + "alg": "SHA-256", + "content": "188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0" + }, + { + "alg": "SHA-256", + "content": "1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d" + }, + { + "alg": "SHA-256", + "content": "244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3" + }, + { + "alg": "SHA-256", + "content": "25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2" + }, + { + "alg": "SHA-256", + "content": "25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9" + }, + { + "alg": "SHA-256", + "content": "29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb" + }, + { + "alg": "SHA-256", + "content": "2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b" + }, + { + "alg": "SHA-256", + "content": "2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a" + }, + { + "alg": "SHA-256", + "content": "2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d" + }, + { + "alg": "SHA-256", + "content": "2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1" + }, + { + "alg": "SHA-256", + "content": "31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7" + }, + { + "alg": "SHA-256", + "content": "35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9" + }, + { + "alg": "SHA-256", + "content": "38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4" + }, + { + "alg": "SHA-256", + "content": "38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53" + }, + { + "alg": "SHA-256", + "content": "3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea" + }, + { + "alg": "SHA-256", + "content": "3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66" + }, + { + "alg": "SHA-256", + "content": "3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190" + }, + { + "alg": "SHA-256", + "content": "46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3" + }, + { + "alg": "SHA-256", + "content": "4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12" + }, + { + "alg": "SHA-256", + "content": "4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824" + }, + { + "alg": "SHA-256", + "content": "4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27" + }, + { + "alg": "SHA-256", + "content": "4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e" + }, + { + "alg": "SHA-256", + "content": "4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8" + }, + { + "alg": "SHA-256", + "content": "51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8" + }, + { + "alg": "SHA-256", + "content": "530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914" + }, + { + "alg": "SHA-256", + "content": "5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211" + }, + { + "alg": "SHA-256", + "content": "5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab" + }, + { + "alg": "SHA-256", + "content": "5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468" + }, + { + "alg": "SHA-256", + "content": "5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3" + }, + { + "alg": "SHA-256", + "content": "5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff" + }, + { + "alg": "SHA-256", + "content": "5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c" + }, + { + "alg": "SHA-256", + "content": "603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d" + }, + { + "alg": "SHA-256", + "content": "61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e" + }, + { + "alg": "SHA-256", + "content": "61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a" + }, + { + "alg": "SHA-256", + "content": "65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e" + }, + { + "alg": "SHA-256", + "content": "67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a" + }, + { + "alg": "SHA-256", + "content": "6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0" + }, + { + "alg": "SHA-256", + "content": "6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1" + }, + { + "alg": "SHA-256", + "content": "6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3" + }, + { + "alg": "SHA-256", + "content": "729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42" + }, + { + "alg": "SHA-256", + "content": "751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452" + }, + { + "alg": "SHA-256", + "content": "76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198" + }, + { + "alg": "SHA-256", + "content": "79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa" + }, + { + "alg": "SHA-256", + "content": "7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b" + }, + { + "alg": "SHA-256", + "content": "7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4" + }, + { + "alg": "SHA-256", + "content": "80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1" + }, + { + "alg": "SHA-256", + "content": "87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad" + }, + { + "alg": "SHA-256", + "content": "881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c" + }, + { + "alg": "SHA-256", + "content": "8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381" + }, + { + "alg": "SHA-256", + "content": "8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0" + }, + { + "alg": "SHA-256", + "content": "8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2" + }, + { + "alg": "SHA-256", + "content": "96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3" + }, + { + "alg": "SHA-256", + "content": "96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31" + }, + { + "alg": "SHA-256", + "content": "97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74" + }, + { + "alg": "SHA-256", + "content": "9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6" + }, + { + "alg": "SHA-256", + "content": "9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff" + }, + { + "alg": "SHA-256", + "content": "a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b" + }, + { + "alg": "SHA-256", + "content": "aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca" + }, + { + "alg": "SHA-256", + "content": "ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd" + }, + { + "alg": "SHA-256", + "content": "ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a" + }, + { + "alg": "SHA-256", + "content": "aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568" + }, + { + "alg": "SHA-256", + "content": "b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1" + }, + { + "alg": "SHA-256", + "content": "b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c" + }, + { + "alg": "SHA-256", + "content": "b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad" + }, + { + "alg": "SHA-256", + "content": "b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7" + }, + { + "alg": "SHA-256", + "content": "b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d" + }, + { + "alg": "SHA-256", + "content": "b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658" + }, + { + "alg": "SHA-256", + "content": "bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1" + }, + { + "alg": "SHA-256", + "content": "bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64" + }, + { + "alg": "SHA-256", + "content": "bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815" + }, + { + "alg": "SHA-256", + "content": "c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1" + }, + { + "alg": "SHA-256", + "content": "c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac" + }, + { + "alg": "SHA-256", + "content": "c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07" + }, + { + "alg": "SHA-256", + "content": "c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e" + }, + { + "alg": "SHA-256", + "content": "c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee" + }, + { + "alg": "SHA-256", + "content": "d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45" + }, + { + "alg": "SHA-256", + "content": "d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc" + }, + { + "alg": "SHA-256", + "content": "d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41" + }, + { + "alg": "SHA-256", + "content": "d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2" + }, + { + "alg": "SHA-256", + "content": "d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083" + }, + { + "alg": "SHA-256", + "content": "d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e" + }, + { + "alg": "SHA-256", + "content": "db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266" + }, + { + "alg": "SHA-256", + "content": "ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141" + }, + { + "alg": "SHA-256", + "content": "e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b" + }, + { + "alg": "SHA-256", + "content": "e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933" + }, + { + "alg": "SHA-256", + "content": "e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21" + }, + { + "alg": "SHA-256", + "content": "eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0" + }, + { + "alg": "SHA-256", + "content": "ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7" + }, + { + "alg": "SHA-256", + "content": "ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc" + }, + { + "alg": "SHA-256", + "content": "efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba" + }, + { + "alg": "SHA-256", + "content": "f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a" + }, + { + "alg": "SHA-256", + "content": "f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57" + }, + { + "alg": "SHA-256", + "content": "f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2" + }, + { + "alg": "SHA-256", + "content": "f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007" + }, + { + "alg": "SHA-256", + "content": "f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f" + }, + { + "alg": "SHA-256", + "content": "fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/" + } + ], + "name": "rpds-py", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/rpds-py@0.13.2", + "type": "library", + "version": "0.13.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers==2.4.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88" + }, + { + "alg": "SHA-256", + "content": "a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/sortedcontainers/" + } + ], + "name": "sortedcontainers", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + }, + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7" + }, + { + "alg": "SHA-256", + "content": "a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/" + } + ], + "name": "uri-template", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/uri-template@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors==1.13", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf" + }, + { + "alg": "SHA-256", + "content": "c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/" + } + ], + "name": "webcolors", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/webcolors@1.13", + "type": "library", + "version": "1.13" + } + ], + "dependencies": [ + { + "ref": "arrow==1.3.0" + }, + { + "ref": "attrs==23.1.0" + }, + { + "ref": "boolean.py==4.0" + }, + { + "ref": "cyclonedx-python-lib==5.1.1" + }, + { + "ref": "defusedxml==0.7.1" + }, + { + "ref": "fqdn==1.5.1" + }, + { + "ref": "idna==3.6" + }, + { + "ref": "isoduration==20.11.0" + }, + { + "ref": "jsonpointer==2.4" + }, + { + "ref": "jsonschema-specifications==2023.11.2" + }, + { + "ref": "jsonschema==4.20.0" + }, + { + "ref": "license-expression==30.2.0" + }, + { + "ref": "lxml==4.9.3" + }, + { + "ref": "packageurl-python==0.11.2" + }, + { + "ref": "py-serializable==0.15.0" + }, + { + "ref": "python-dateutil==2.8.2" + }, + { + "ref": "referencing==0.31.1" + }, + { + "ref": "rfc3339-validator==0.1.4" + }, + { + "ref": "rfc3987==1.3.8" + }, + { + "ref": "root-component" + }, + { + "ref": "rpds-py==0.13.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "sortedcontainers==2.4.0" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + }, + { + "ref": "uri-template==1.3.0" + }, + { + "ref": "webcolors==1.13" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.4.xml.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.4.xml.bin new file mode 100644 index 00000000..8f34c5e4 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-extras_1.4.xml.bin @@ -0,0 +1,722 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + default + + + + attrs + 23.1.0 + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/ + from implicit index: pypi + + 1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 + 6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 + + + + + default + + + + boolean.py + 4.0 + pkg:pypi/boolean.py@4.0 + + + https://pypi.org/simple/boolean.py/ + from implicit index: pypi + + 17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4 + 2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd + + + + + default + + + + cyclonedx-python-lib + 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + from implicit index: pypi + + 215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6 + 2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3 + + + + + default + json-validation + xml-validation + + + + defusedxml + 0.7.1 + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.org/simple/defusedxml/ + from implicit index: pypi + + 1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 + a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 + + + + + default + + + + fqdn + 1.5.1 + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/ + from implicit index: pypi + + 105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f + 3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014 + + + + + default + + + + idna + 3.6 + pkg:pypi/idna@3.6 + + + https://pypi.org/simple/idna/ + from implicit index: pypi + + 9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca + c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + + + + + default + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from implicit index: pypi + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + + default + + + + jsonpointer + 2.4 + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/ + from implicit index: pypi + + 15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a + 585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88 + + + + + default + + + + jsonschema + 4.20.0 + pkg:pypi/jsonschema@4.20.0 + + + https://pypi.org/simple/jsonschema/ + from implicit index: pypi + + 4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa + ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3 + + + + + default + format + + + + jsonschema-specifications + 2023.11.2 + pkg:pypi/jsonschema-specifications@2023.11.2 + + + https://pypi.org/simple/jsonschema-specifications/ + from implicit index: pypi + + 9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8 + e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93 + + + + + default + + + + license-expression + 30.2.0 + pkg:pypi/license-expression@30.2.0 + + + https://pypi.org/simple/license-expression/ + from implicit index: pypi + + 1a7dc2bb2d09cdc983d072e4f9adc787e107e09def84cbb3919baaaf4f8e6fa1 + 599928edd995c43fc335e0af342076144dc71cb858afa1ed9c1c30c4e81794f5 + + + + + default + + + + lxml + 4.9.3 + pkg:pypi/lxml@4.9.3 + + + https://pypi.org/simple/lxml/ + from implicit index: pypi + + 05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3 + 075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d + 081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a + 0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120 + 0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305 + 0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287 + 0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23 + 120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52 + 1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f + 141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4 + 14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584 + 1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f + 17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693 + 1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef + 1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5 + 23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02 + 25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc + 2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7 + 303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da + 3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a + 3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40 + 411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8 + 42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd + 46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601 + 48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c + 48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be + 4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2 + 4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c + 4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129 + 4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc + 4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2 + 4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1 + 4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7 + 50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d + 50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477 + 53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d + 5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e + 56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7 + 578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2 + 57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574 + 57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf + 5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b + 5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98 + 64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12 + 65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42 + 6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35 + 690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d + 6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce + 704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d + 71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f + 71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db + 7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4 + 8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694 + 8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac + 8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2 + 8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7 + 92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96 + 97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d + 9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b + 9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a + 9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13 + 9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340 + 9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6 + aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458 + ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c + b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c + b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9 + b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432 + b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991 + bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69 + bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf + c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb + c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b + c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833 + cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76 + cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85 + cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e + d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50 + d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8 + d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4 + d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b + dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5 + e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190 + e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7 + eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa + ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0 + f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9 + f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0 + fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b + fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5 + fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7 + fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4 + + + + + default + + + + packageurl-python + 0.11.2 + pkg:pypi/packageurl-python@0.11.2 + + + https://pypi.org/simple/packageurl-python/ + from implicit index: pypi + + 01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471 + 799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84 + + + + + default + + + + py-serializable + 0.15.0 + pkg:pypi/py-serializable@0.15.0 + + + https://pypi.org/simple/py-serializable/ + from implicit index: pypi + + 8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771 + d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2 + + + + + default + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + default + + + + referencing + 0.31.1 + pkg:pypi/referencing@0.31.1 + + + https://pypi.org/simple/referencing/ + from implicit index: pypi + + 81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec + c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d + + + + + default + + + + rfc3339-validator + 0.1.4 + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/ + from implicit index: pypi + + 138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b + 24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa + + + + + default + + + + rfc3987 + 1.3.8 + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/ + from implicit index: pypi + + 10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53 + d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733 + + + + + default + + + + rpds-py + 0.13.2 + pkg:pypi/rpds-py@0.13.2 + + + https://pypi.org/simple/rpds-py/ + from implicit index: pypi + + 06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276 + 12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f + 15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60 + 188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0 + 1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d + 244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3 + 25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2 + 25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9 + 29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb + 2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b + 2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a + 2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d + 2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1 + 31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7 + 35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9 + 38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4 + 38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53 + 3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea + 3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66 + 3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190 + 46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3 + 4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12 + 4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824 + 4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27 + 4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e + 4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8 + 51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8 + 530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914 + 5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211 + 5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab + 5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468 + 5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3 + 5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff + 5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c + 603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d + 61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e + 61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a + 65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e + 67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a + 6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0 + 6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1 + 6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3 + 729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42 + 751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452 + 76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198 + 79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa + 7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b + 7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4 + 80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1 + 87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad + 881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c + 8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381 + 8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0 + 8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2 + 96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3 + 96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31 + 97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74 + 9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6 + 9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff + a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b + aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca + ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd + ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a + aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568 + b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1 + b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c + b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad + b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7 + b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d + b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658 + bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1 + bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64 + bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815 + c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1 + c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac + c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07 + c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e + c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee + d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45 + d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc + d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41 + d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2 + d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083 + d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e + db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266 + ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141 + e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b + e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933 + e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21 + eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0 + ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7 + ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc + efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba + f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a + f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57 + f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2 + f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007 + f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f + fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f + + + + + default + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + default + + + + sortedcontainers + 2.4.0 + pkg:pypi/sortedcontainers@2.4.0 + + + https://pypi.org/simple/sortedcontainers/ + from implicit index: pypi + + 25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 + a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 + + + + + default + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + default + + + + uri-template + 1.3.0 + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/ + from implicit index: pypi + + 0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 + a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363 + + + + + default + + + + webcolors + 1.13 + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/ + from implicit index: pypi + + 29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf + c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a + + + + + default + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.5.json.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.5.json.bin new file mode 100644 index 00000000..9707f3a4 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-extras_1.5.json.bin @@ -0,0 +1,1621 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + }, + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs==23.1.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04" + }, + { + "alg": "SHA-256", + "content": "6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/" + } + ], + "name": "attrs", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/attrs@23.1.0", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean.py==4.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4" + }, + { + "alg": "SHA-256", + "content": "2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/boolean.py/" + } + ], + "name": "boolean.py", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/boolean.py@4.0", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib==5.1.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6" + }, + { + "alg": "SHA-256", + "content": "2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/" + } + ], + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + }, + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml==0.7.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69" + }, + { + "alg": "SHA-256", + "content": "a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/defusedxml/" + } + ], + "name": "defusedxml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/defusedxml@0.7.1", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn==1.5.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f" + }, + { + "alg": "SHA-256", + "content": "3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/" + } + ], + "name": "fqdn", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/fqdn@1.5.1", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna==3.6", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca" + }, + { + "alg": "SHA-256", + "content": "c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/idna@3.6", + "type": "library", + "version": "3.6" + }, + { + "bom-ref": "isoduration==20.11.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + }, + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer==2.4", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a" + }, + { + "alg": "SHA-256", + "content": "585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/" + } + ], + "name": "jsonpointer", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/jsonpointer@2.4", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema==4.20.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa" + }, + { + "alg": "SHA-256", + "content": "ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema/" + } + ], + "name": "jsonschema", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + }, + { + "name": "cdx:python:package:required-extra", + "value": "format" + } + ], + "purl": "pkg:pypi/jsonschema@4.20.0", + "type": "library", + "version": "4.20.0" + }, + { + "bom-ref": "jsonschema-specifications==2023.11.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8" + }, + { + "alg": "SHA-256", + "content": "e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/" + } + ], + "name": "jsonschema-specifications", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/jsonschema-specifications@2023.11.2", + "type": "library", + "version": "2023.11.2" + }, + { + "bom-ref": "license-expression==30.2.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1a7dc2bb2d09cdc983d072e4f9adc787e107e09def84cbb3919baaaf4f8e6fa1" + }, + { + "alg": "SHA-256", + "content": "599928edd995c43fc335e0af342076144dc71cb858afa1ed9c1c30c4e81794f5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/license-expression/" + } + ], + "name": "license-expression", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/license-expression@30.2.0", + "type": "library", + "version": "30.2.0" + }, + { + "bom-ref": "lxml==4.9.3", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3" + }, + { + "alg": "SHA-256", + "content": "075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d" + }, + { + "alg": "SHA-256", + "content": "081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a" + }, + { + "alg": "SHA-256", + "content": "0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120" + }, + { + "alg": "SHA-256", + "content": "0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305" + }, + { + "alg": "SHA-256", + "content": "0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287" + }, + { + "alg": "SHA-256", + "content": "0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23" + }, + { + "alg": "SHA-256", + "content": "120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52" + }, + { + "alg": "SHA-256", + "content": "1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f" + }, + { + "alg": "SHA-256", + "content": "141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4" + }, + { + "alg": "SHA-256", + "content": "14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584" + }, + { + "alg": "SHA-256", + "content": "1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f" + }, + { + "alg": "SHA-256", + "content": "17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693" + }, + { + "alg": "SHA-256", + "content": "1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef" + }, + { + "alg": "SHA-256", + "content": "1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5" + }, + { + "alg": "SHA-256", + "content": "23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02" + }, + { + "alg": "SHA-256", + "content": "25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc" + }, + { + "alg": "SHA-256", + "content": "2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7" + }, + { + "alg": "SHA-256", + "content": "303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da" + }, + { + "alg": "SHA-256", + "content": "3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a" + }, + { + "alg": "SHA-256", + "content": "3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40" + }, + { + "alg": "SHA-256", + "content": "411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8" + }, + { + "alg": "SHA-256", + "content": "42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd" + }, + { + "alg": "SHA-256", + "content": "46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601" + }, + { + "alg": "SHA-256", + "content": "48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c" + }, + { + "alg": "SHA-256", + "content": "48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be" + }, + { + "alg": "SHA-256", + "content": "4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2" + }, + { + "alg": "SHA-256", + "content": "4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c" + }, + { + "alg": "SHA-256", + "content": "4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129" + }, + { + "alg": "SHA-256", + "content": "4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc" + }, + { + "alg": "SHA-256", + "content": "4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2" + }, + { + "alg": "SHA-256", + "content": "4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1" + }, + { + "alg": "SHA-256", + "content": "4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7" + }, + { + "alg": "SHA-256", + "content": "50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d" + }, + { + "alg": "SHA-256", + "content": "50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477" + }, + { + "alg": "SHA-256", + "content": "53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d" + }, + { + "alg": "SHA-256", + "content": "5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e" + }, + { + "alg": "SHA-256", + "content": "56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7" + }, + { + "alg": "SHA-256", + "content": "578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2" + }, + { + "alg": "SHA-256", + "content": "57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574" + }, + { + "alg": "SHA-256", + "content": "57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf" + }, + { + "alg": "SHA-256", + "content": "5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b" + }, + { + "alg": "SHA-256", + "content": "5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98" + }, + { + "alg": "SHA-256", + "content": "64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12" + }, + { + "alg": "SHA-256", + "content": "65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42" + }, + { + "alg": "SHA-256", + "content": "6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35" + }, + { + "alg": "SHA-256", + "content": "690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d" + }, + { + "alg": "SHA-256", + "content": "6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce" + }, + { + "alg": "SHA-256", + "content": "704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d" + }, + { + "alg": "SHA-256", + "content": "71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f" + }, + { + "alg": "SHA-256", + "content": "71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db" + }, + { + "alg": "SHA-256", + "content": "7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4" + }, + { + "alg": "SHA-256", + "content": "8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694" + }, + { + "alg": "SHA-256", + "content": "8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac" + }, + { + "alg": "SHA-256", + "content": "8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2" + }, + { + "alg": "SHA-256", + "content": "8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7" + }, + { + "alg": "SHA-256", + "content": "92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96" + }, + { + "alg": "SHA-256", + "content": "97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d" + }, + { + "alg": "SHA-256", + "content": "9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b" + }, + { + "alg": "SHA-256", + "content": "9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a" + }, + { + "alg": "SHA-256", + "content": "9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13" + }, + { + "alg": "SHA-256", + "content": "9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340" + }, + { + "alg": "SHA-256", + "content": "9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6" + }, + { + "alg": "SHA-256", + "content": "aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458" + }, + { + "alg": "SHA-256", + "content": "ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c" + }, + { + "alg": "SHA-256", + "content": "b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c" + }, + { + "alg": "SHA-256", + "content": "b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9" + }, + { + "alg": "SHA-256", + "content": "b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432" + }, + { + "alg": "SHA-256", + "content": "b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991" + }, + { + "alg": "SHA-256", + "content": "bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69" + }, + { + "alg": "SHA-256", + "content": "bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf" + }, + { + "alg": "SHA-256", + "content": "c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb" + }, + { + "alg": "SHA-256", + "content": "c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b" + }, + { + "alg": "SHA-256", + "content": "c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833" + }, + { + "alg": "SHA-256", + "content": "cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76" + }, + { + "alg": "SHA-256", + "content": "cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85" + }, + { + "alg": "SHA-256", + "content": "cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e" + }, + { + "alg": "SHA-256", + "content": "d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50" + }, + { + "alg": "SHA-256", + "content": "d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8" + }, + { + "alg": "SHA-256", + "content": "d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4" + }, + { + "alg": "SHA-256", + "content": "d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b" + }, + { + "alg": "SHA-256", + "content": "dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5" + }, + { + "alg": "SHA-256", + "content": "e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190" + }, + { + "alg": "SHA-256", + "content": "e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7" + }, + { + "alg": "SHA-256", + "content": "eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa" + }, + { + "alg": "SHA-256", + "content": "ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0" + }, + { + "alg": "SHA-256", + "content": "f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9" + }, + { + "alg": "SHA-256", + "content": "f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0" + }, + { + "alg": "SHA-256", + "content": "fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b" + }, + { + "alg": "SHA-256", + "content": "fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5" + }, + { + "alg": "SHA-256", + "content": "fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7" + }, + { + "alg": "SHA-256", + "content": "fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/" + } + ], + "name": "lxml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/lxml@4.9.3", + "type": "library", + "version": "4.9.3" + }, + { + "bom-ref": "packageurl-python==0.11.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471" + }, + { + "alg": "SHA-256", + "content": "799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/" + } + ], + "name": "packageurl-python", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/packageurl-python@0.11.2", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "py-serializable==0.15.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771" + }, + { + "alg": "SHA-256", + "content": "d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/py-serializable/" + } + ], + "name": "py-serializable", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/py-serializable@0.15.0", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + }, + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing==0.31.1", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec" + }, + { + "alg": "SHA-256", + "content": "c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/" + } + ], + "name": "referencing", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/referencing@0.31.1", + "type": "library", + "version": "0.31.1" + }, + { + "bom-ref": "rfc3339-validator==0.1.4", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b" + }, + { + "alg": "SHA-256", + "content": "24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/" + } + ], + "name": "rfc3339-validator", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987==1.3.8", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53" + }, + { + "alg": "SHA-256", + "content": "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/" + } + ], + "name": "rfc3987", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/rfc3987@1.3.8", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py==0.13.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276" + }, + { + "alg": "SHA-256", + "content": "12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f" + }, + { + "alg": "SHA-256", + "content": "15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60" + }, + { + "alg": "SHA-256", + "content": "188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0" + }, + { + "alg": "SHA-256", + "content": "1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d" + }, + { + "alg": "SHA-256", + "content": "244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3" + }, + { + "alg": "SHA-256", + "content": "25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2" + }, + { + "alg": "SHA-256", + "content": "25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9" + }, + { + "alg": "SHA-256", + "content": "29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb" + }, + { + "alg": "SHA-256", + "content": "2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b" + }, + { + "alg": "SHA-256", + "content": "2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a" + }, + { + "alg": "SHA-256", + "content": "2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d" + }, + { + "alg": "SHA-256", + "content": "2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1" + }, + { + "alg": "SHA-256", + "content": "31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7" + }, + { + "alg": "SHA-256", + "content": "35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9" + }, + { + "alg": "SHA-256", + "content": "38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4" + }, + { + "alg": "SHA-256", + "content": "38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53" + }, + { + "alg": "SHA-256", + "content": "3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea" + }, + { + "alg": "SHA-256", + "content": "3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66" + }, + { + "alg": "SHA-256", + "content": "3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190" + }, + { + "alg": "SHA-256", + "content": "46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3" + }, + { + "alg": "SHA-256", + "content": "4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12" + }, + { + "alg": "SHA-256", + "content": "4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824" + }, + { + "alg": "SHA-256", + "content": "4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27" + }, + { + "alg": "SHA-256", + "content": "4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e" + }, + { + "alg": "SHA-256", + "content": "4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8" + }, + { + "alg": "SHA-256", + "content": "51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8" + }, + { + "alg": "SHA-256", + "content": "530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914" + }, + { + "alg": "SHA-256", + "content": "5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211" + }, + { + "alg": "SHA-256", + "content": "5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab" + }, + { + "alg": "SHA-256", + "content": "5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468" + }, + { + "alg": "SHA-256", + "content": "5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3" + }, + { + "alg": "SHA-256", + "content": "5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff" + }, + { + "alg": "SHA-256", + "content": "5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c" + }, + { + "alg": "SHA-256", + "content": "603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d" + }, + { + "alg": "SHA-256", + "content": "61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e" + }, + { + "alg": "SHA-256", + "content": "61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a" + }, + { + "alg": "SHA-256", + "content": "65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e" + }, + { + "alg": "SHA-256", + "content": "67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a" + }, + { + "alg": "SHA-256", + "content": "6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0" + }, + { + "alg": "SHA-256", + "content": "6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1" + }, + { + "alg": "SHA-256", + "content": "6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3" + }, + { + "alg": "SHA-256", + "content": "729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42" + }, + { + "alg": "SHA-256", + "content": "751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452" + }, + { + "alg": "SHA-256", + "content": "76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198" + }, + { + "alg": "SHA-256", + "content": "79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa" + }, + { + "alg": "SHA-256", + "content": "7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b" + }, + { + "alg": "SHA-256", + "content": "7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4" + }, + { + "alg": "SHA-256", + "content": "80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1" + }, + { + "alg": "SHA-256", + "content": "87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad" + }, + { + "alg": "SHA-256", + "content": "881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c" + }, + { + "alg": "SHA-256", + "content": "8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381" + }, + { + "alg": "SHA-256", + "content": "8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0" + }, + { + "alg": "SHA-256", + "content": "8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2" + }, + { + "alg": "SHA-256", + "content": "96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3" + }, + { + "alg": "SHA-256", + "content": "96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31" + }, + { + "alg": "SHA-256", + "content": "97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74" + }, + { + "alg": "SHA-256", + "content": "9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6" + }, + { + "alg": "SHA-256", + "content": "9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff" + }, + { + "alg": "SHA-256", + "content": "a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b" + }, + { + "alg": "SHA-256", + "content": "aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca" + }, + { + "alg": "SHA-256", + "content": "ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd" + }, + { + "alg": "SHA-256", + "content": "ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a" + }, + { + "alg": "SHA-256", + "content": "aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568" + }, + { + "alg": "SHA-256", + "content": "b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1" + }, + { + "alg": "SHA-256", + "content": "b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c" + }, + { + "alg": "SHA-256", + "content": "b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad" + }, + { + "alg": "SHA-256", + "content": "b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7" + }, + { + "alg": "SHA-256", + "content": "b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d" + }, + { + "alg": "SHA-256", + "content": "b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658" + }, + { + "alg": "SHA-256", + "content": "bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1" + }, + { + "alg": "SHA-256", + "content": "bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64" + }, + { + "alg": "SHA-256", + "content": "bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815" + }, + { + "alg": "SHA-256", + "content": "c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1" + }, + { + "alg": "SHA-256", + "content": "c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac" + }, + { + "alg": "SHA-256", + "content": "c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07" + }, + { + "alg": "SHA-256", + "content": "c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e" + }, + { + "alg": "SHA-256", + "content": "c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee" + }, + { + "alg": "SHA-256", + "content": "d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45" + }, + { + "alg": "SHA-256", + "content": "d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc" + }, + { + "alg": "SHA-256", + "content": "d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41" + }, + { + "alg": "SHA-256", + "content": "d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2" + }, + { + "alg": "SHA-256", + "content": "d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083" + }, + { + "alg": "SHA-256", + "content": "d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e" + }, + { + "alg": "SHA-256", + "content": "db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266" + }, + { + "alg": "SHA-256", + "content": "ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141" + }, + { + "alg": "SHA-256", + "content": "e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b" + }, + { + "alg": "SHA-256", + "content": "e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933" + }, + { + "alg": "SHA-256", + "content": "e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21" + }, + { + "alg": "SHA-256", + "content": "eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0" + }, + { + "alg": "SHA-256", + "content": "ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7" + }, + { + "alg": "SHA-256", + "content": "ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc" + }, + { + "alg": "SHA-256", + "content": "efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba" + }, + { + "alg": "SHA-256", + "content": "f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a" + }, + { + "alg": "SHA-256", + "content": "f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57" + }, + { + "alg": "SHA-256", + "content": "f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2" + }, + { + "alg": "SHA-256", + "content": "f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007" + }, + { + "alg": "SHA-256", + "content": "f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f" + }, + { + "alg": "SHA-256", + "content": "fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/" + } + ], + "name": "rpds-py", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/rpds-py@0.13.2", + "type": "library", + "version": "0.13.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers==2.4.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88" + }, + { + "alg": "SHA-256", + "content": "a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/sortedcontainers/" + } + ], + "name": "sortedcontainers", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + }, + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7" + }, + { + "alg": "SHA-256", + "content": "a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/" + } + ], + "name": "uri-template", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/uri-template@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors==1.13", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf" + }, + { + "alg": "SHA-256", + "content": "c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/" + } + ], + "name": "webcolors", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/webcolors@1.13", + "type": "library", + "version": "1.13" + } + ], + "dependencies": [ + { + "ref": "arrow==1.3.0" + }, + { + "ref": "attrs==23.1.0" + }, + { + "ref": "boolean.py==4.0" + }, + { + "ref": "cyclonedx-python-lib==5.1.1" + }, + { + "ref": "defusedxml==0.7.1" + }, + { + "ref": "fqdn==1.5.1" + }, + { + "ref": "idna==3.6" + }, + { + "ref": "isoduration==20.11.0" + }, + { + "ref": "jsonpointer==2.4" + }, + { + "ref": "jsonschema-specifications==2023.11.2" + }, + { + "ref": "jsonschema==4.20.0" + }, + { + "ref": "license-expression==30.2.0" + }, + { + "ref": "lxml==4.9.3" + }, + { + "ref": "packageurl-python==0.11.2" + }, + { + "ref": "py-serializable==0.15.0" + }, + { + "ref": "python-dateutil==2.8.2" + }, + { + "ref": "referencing==0.31.1" + }, + { + "ref": "rfc3339-validator==0.1.4" + }, + { + "ref": "rfc3987==1.3.8" + }, + { + "ref": "root-component" + }, + { + "ref": "rpds-py==0.13.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "sortedcontainers==2.4.0" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + }, + { + "ref": "uri-template==1.3.0" + }, + { + "ref": "webcolors==1.13" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.5.xml.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.5.xml.bin new file mode 100644 index 00000000..c37a0619 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-extras_1.5.xml.bin @@ -0,0 +1,722 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + default + + + + attrs + 23.1.0 + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/ + from implicit index: pypi + + 1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 + 6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 + + + + + default + + + + boolean.py + 4.0 + pkg:pypi/boolean.py@4.0 + + + https://pypi.org/simple/boolean.py/ + from implicit index: pypi + + 17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4 + 2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd + + + + + default + + + + cyclonedx-python-lib + 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + from implicit index: pypi + + 215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6 + 2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3 + + + + + default + json-validation + xml-validation + + + + defusedxml + 0.7.1 + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.org/simple/defusedxml/ + from implicit index: pypi + + 1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 + a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 + + + + + default + + + + fqdn + 1.5.1 + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/ + from implicit index: pypi + + 105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f + 3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014 + + + + + default + + + + idna + 3.6 + pkg:pypi/idna@3.6 + + + https://pypi.org/simple/idna/ + from implicit index: pypi + + 9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca + c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + + + + + default + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from implicit index: pypi + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + + default + + + + jsonpointer + 2.4 + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/ + from implicit index: pypi + + 15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a + 585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88 + + + + + default + + + + jsonschema + 4.20.0 + pkg:pypi/jsonschema@4.20.0 + + + https://pypi.org/simple/jsonschema/ + from implicit index: pypi + + 4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa + ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3 + + + + + default + format + + + + jsonschema-specifications + 2023.11.2 + pkg:pypi/jsonschema-specifications@2023.11.2 + + + https://pypi.org/simple/jsonschema-specifications/ + from implicit index: pypi + + 9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8 + e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93 + + + + + default + + + + license-expression + 30.2.0 + pkg:pypi/license-expression@30.2.0 + + + https://pypi.org/simple/license-expression/ + from implicit index: pypi + + 1a7dc2bb2d09cdc983d072e4f9adc787e107e09def84cbb3919baaaf4f8e6fa1 + 599928edd995c43fc335e0af342076144dc71cb858afa1ed9c1c30c4e81794f5 + + + + + default + + + + lxml + 4.9.3 + pkg:pypi/lxml@4.9.3 + + + https://pypi.org/simple/lxml/ + from implicit index: pypi + + 05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3 + 075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d + 081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a + 0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120 + 0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305 + 0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287 + 0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23 + 120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52 + 1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f + 141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4 + 14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584 + 1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f + 17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693 + 1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef + 1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5 + 23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02 + 25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc + 2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7 + 303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da + 3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a + 3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40 + 411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8 + 42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd + 46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601 + 48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c + 48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be + 4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2 + 4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c + 4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129 + 4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc + 4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2 + 4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1 + 4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7 + 50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d + 50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477 + 53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d + 5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e + 56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7 + 578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2 + 57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574 + 57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf + 5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b + 5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98 + 64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12 + 65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42 + 6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35 + 690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d + 6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce + 704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d + 71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f + 71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db + 7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4 + 8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694 + 8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac + 8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2 + 8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7 + 92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96 + 97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d + 9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b + 9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a + 9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13 + 9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340 + 9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6 + aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458 + ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c + b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c + b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9 + b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432 + b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991 + bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69 + bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf + c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb + c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b + c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833 + cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76 + cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85 + cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e + d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50 + d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8 + d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4 + d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b + dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5 + e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190 + e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7 + eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa + ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0 + f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9 + f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0 + fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b + fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5 + fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7 + fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4 + + + + + default + + + + packageurl-python + 0.11.2 + pkg:pypi/packageurl-python@0.11.2 + + + https://pypi.org/simple/packageurl-python/ + from implicit index: pypi + + 01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471 + 799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84 + + + + + default + + + + py-serializable + 0.15.0 + pkg:pypi/py-serializable@0.15.0 + + + https://pypi.org/simple/py-serializable/ + from implicit index: pypi + + 8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771 + d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2 + + + + + default + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + default + + + + referencing + 0.31.1 + pkg:pypi/referencing@0.31.1 + + + https://pypi.org/simple/referencing/ + from implicit index: pypi + + 81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec + c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d + + + + + default + + + + rfc3339-validator + 0.1.4 + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/ + from implicit index: pypi + + 138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b + 24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa + + + + + default + + + + rfc3987 + 1.3.8 + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/ + from implicit index: pypi + + 10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53 + d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733 + + + + + default + + + + rpds-py + 0.13.2 + pkg:pypi/rpds-py@0.13.2 + + + https://pypi.org/simple/rpds-py/ + from implicit index: pypi + + 06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276 + 12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f + 15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60 + 188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0 + 1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d + 244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3 + 25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2 + 25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9 + 29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb + 2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b + 2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a + 2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d + 2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1 + 31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7 + 35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9 + 38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4 + 38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53 + 3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea + 3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66 + 3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190 + 46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3 + 4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12 + 4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824 + 4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27 + 4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e + 4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8 + 51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8 + 530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914 + 5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211 + 5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab + 5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468 + 5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3 + 5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff + 5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c + 603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d + 61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e + 61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a + 65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e + 67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a + 6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0 + 6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1 + 6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3 + 729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42 + 751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452 + 76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198 + 79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa + 7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b + 7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4 + 80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1 + 87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad + 881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c + 8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381 + 8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0 + 8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2 + 96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3 + 96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31 + 97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74 + 9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6 + 9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff + a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b + aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca + ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd + ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a + aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568 + b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1 + b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c + b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad + b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7 + b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d + b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658 + bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1 + bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64 + bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815 + c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1 + c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac + c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07 + c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e + c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee + d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45 + d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc + d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41 + d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2 + d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083 + d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e + db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266 + ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141 + e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b + e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933 + e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21 + eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0 + ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7 + ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc + efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba + f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a + f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57 + f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2 + f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007 + f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f + fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f + + + + + default + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + default + + + + sortedcontainers + 2.4.0 + pkg:pypi/sortedcontainers@2.4.0 + + + https://pypi.org/simple/sortedcontainers/ + from implicit index: pypi + + 25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 + a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 + + + + + default + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + default + + + + uri-template + 1.3.0 + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/ + from implicit index: pypi + + 0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 + a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363 + + + + + default + + + + webcolors + 1.13 + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/ + from implicit index: pypi + + 29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf + c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a + + + + + default + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_with-urls_1.0.xml.bin b/tests/_data/snapshots/pipenv/file_with-urls_1.0.xml.bin new file mode 100644 index 00000000..33d1f6e3 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-urls_1.0.xml.bin @@ -0,0 +1,47 @@ + + + + + certifi + 2023.11.17 + pkg:pypi/certifi@2023.11.17 + false + + + charset-normalizer + 3.3.2 + pkg:pypi/charset-normalizer@3.3.2 + false + + + idna + 3.6 + pkg:pypi/idna@3.6 + false + + + pillow + + pkg:pypi/pillow?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + false + + + requests + + pkg:pypi/requests?vcs_url=git%2Bhttps://github.com/requests/requests.git%40a25fde6989f8df5c3d823bc9f2e2fc24aa71f375 + false + + + six + + pkg:pypi/six?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + false + + + urllib3 + + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + false + + + diff --git a/tests/_data/snapshots/pipenv/file_with-urls_1.1.xml.bin b/tests/_data/snapshots/pipenv/file_with-urls_1.1.xml.bin new file mode 100644 index 00000000..ae22e7e2 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-urls_1.1.xml.bin @@ -0,0 +1,82 @@ + + + + + certifi + 2023.11.17 + pkg:pypi/certifi@2023.11.17 + + + https://pypi.org/simple/certifi/ + from implicit index: pypi + + + + + charset-normalizer + 3.3.2 + pkg:pypi/charset-normalizer@3.3.2 + + + https://pypi.org/simple/charset-normalizer/ + from implicit index: pypi + + + + + idna + 3.6 + pkg:pypi/idna@3.6 + + + https://pypi.org/simple/idna/ + from implicit index: pypi + + + + + pillow + + pkg:pypi/pillow?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from git + + + + + requests + + pkg:pypi/requests?vcs_url=git%2Bhttps://github.com/requests/requests.git%40a25fde6989f8df5c3d823bc9f2e2fc24aa71f375 + + + git+https://github.com/requests/requests.git#a25fde6989f8df5c3d823bc9f2e2fc24aa71f375 + from git + + + + + six + + pkg:pypi/six?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from git + + + + + urllib3 + + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + from file + + + + + diff --git a/tests/_data/snapshots/pipenv/file_with-urls_1.2.json.bin b/tests/_data/snapshots/pipenv/file_with-urls_1.2.json.bin new file mode 100644 index 00000000..4ebda7c8 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-urls_1.2.json.bin @@ -0,0 +1,153 @@ +{ + "components": [ + { + "bom-ref": "certifi==2023.11.17", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2023.11.17", + "type": "library", + "version": "2023.11.17" + }, + { + "bom-ref": "charset-normalizer==3.3.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/charset-normalizer/" + } + ], + "name": "charset-normalizer", + "purl": "pkg:pypi/charset-normalizer@3.3.2", + "type": "library", + "version": "3.3.2" + }, + { + "bom-ref": "idna==3.6", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@3.6", + "type": "library", + "version": "3.6" + }, + { + "bom-ref": "pillow", + "externalReferences": [ + { + "comment": "from git", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "pillow", + "purl": "pkg:pypi/pillow?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "" + }, + { + "bom-ref": "requests", + "externalReferences": [ + { + "comment": "from git", + "type": "vcs", + "url": "git+https://github.com/requests/requests.git#a25fde6989f8df5c3d823bc9f2e2fc24aa71f375" + } + ], + "name": "requests", + "purl": "pkg:pypi/requests?vcs_url=git%2Bhttps://github.com/requests/requests.git%40a25fde6989f8df5c3d823bc9f2e2fc24aa71f375", + "type": "library", + "version": "" + }, + { + "bom-ref": "six", + "externalReferences": [ + { + "comment": "from git", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "purl": "pkg:pypi/six?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "" + }, + { + "bom-ref": "urllib3", + "externalReferences": [ + { + "comment": "from file", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "certifi==2023.11.17" + }, + { + "ref": "charset-normalizer==3.3.2" + }, + { + "ref": "idna==3.6" + }, + { + "ref": "pillow" + }, + { + "ref": "requests" + }, + { + "ref": "root-component" + }, + { + "ref": "six" + }, + { + "ref": "urllib3" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_with-urls_1.2.xml.bin b/tests/_data/snapshots/pipenv/file_with-urls_1.2.xml.bin new file mode 100644 index 00000000..b39ec028 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-urls_1.2.xml.bin @@ -0,0 +1,111 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-urls + 0.1.0 + packages from direct urls + + + + + certifi + 2023.11.17 + pkg:pypi/certifi@2023.11.17 + + + https://pypi.org/simple/certifi/ + from implicit index: pypi + + + + + charset-normalizer + 3.3.2 + pkg:pypi/charset-normalizer@3.3.2 + + + https://pypi.org/simple/charset-normalizer/ + from implicit index: pypi + + + + + idna + 3.6 + pkg:pypi/idna@3.6 + + + https://pypi.org/simple/idna/ + from implicit index: pypi + + + + + pillow + + pkg:pypi/pillow?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from git + + + + + requests + + pkg:pypi/requests?vcs_url=git%2Bhttps://github.com/requests/requests.git%40a25fde6989f8df5c3d823bc9f2e2fc24aa71f375 + + + git+https://github.com/requests/requests.git#a25fde6989f8df5c3d823bc9f2e2fc24aa71f375 + from git + + + + + six + + pkg:pypi/six?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from git + + + + + urllib3 + + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + from file + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_with-urls_1.3.json.bin b/tests/_data/snapshots/pipenv/file_with-urls_1.3.json.bin new file mode 100644 index 00000000..0329fdce --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-urls_1.3.json.bin @@ -0,0 +1,583 @@ +{ + "components": [ + { + "bom-ref": "certifi==2023.11.17", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1" + }, + { + "alg": "SHA-256", + "content": "e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/certifi@2023.11.17", + "type": "library", + "version": "2023.11.17" + }, + { + "bom-ref": "charset-normalizer==3.3.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027" + }, + { + "alg": "SHA-256", + "content": "06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087" + }, + { + "alg": "SHA-256", + "content": "0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786" + }, + { + "alg": "SHA-256", + "content": "0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8" + }, + { + "alg": "SHA-256", + "content": "10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09" + }, + { + "alg": "SHA-256", + "content": "122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185" + }, + { + "alg": "SHA-256", + "content": "1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574" + }, + { + "alg": "SHA-256", + "content": "1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e" + }, + { + "alg": "SHA-256", + "content": "1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519" + }, + { + "alg": "SHA-256", + "content": "2127566c664442652f024c837091890cb1942c30937add288223dc895793f898" + }, + { + "alg": "SHA-256", + "content": "22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269" + }, + { + "alg": "SHA-256", + "content": "25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3" + }, + { + "alg": "SHA-256", + "content": "2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f" + }, + { + "alg": "SHA-256", + "content": "3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6" + }, + { + "alg": "SHA-256", + "content": "34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8" + }, + { + "alg": "SHA-256", + "content": "37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a" + }, + { + "alg": "SHA-256", + "content": "3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73" + }, + { + "alg": "SHA-256", + "content": "3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc" + }, + { + "alg": "SHA-256", + "content": "42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714" + }, + { + "alg": "SHA-256", + "content": "45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2" + }, + { + "alg": "SHA-256", + "content": "4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc" + }, + { + "alg": "SHA-256", + "content": "4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce" + }, + { + "alg": "SHA-256", + "content": "4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d" + }, + { + "alg": "SHA-256", + "content": "549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e" + }, + { + "alg": "SHA-256", + "content": "55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6" + }, + { + "alg": "SHA-256", + "content": "572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269" + }, + { + "alg": "SHA-256", + "content": "573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96" + }, + { + "alg": "SHA-256", + "content": "5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d" + }, + { + "alg": "SHA-256", + "content": "6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a" + }, + { + "alg": "SHA-256", + "content": "65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4" + }, + { + "alg": "SHA-256", + "content": "663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77" + }, + { + "alg": "SHA-256", + "content": "6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d" + }, + { + "alg": "SHA-256", + "content": "68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0" + }, + { + "alg": "SHA-256", + "content": "6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed" + }, + { + "alg": "SHA-256", + "content": "6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068" + }, + { + "alg": "SHA-256", + "content": "6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac" + }, + { + "alg": "SHA-256", + "content": "6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25" + }, + { + "alg": "SHA-256", + "content": "753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8" + }, + { + "alg": "SHA-256", + "content": "7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab" + }, + { + "alg": "SHA-256", + "content": "7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26" + }, + { + "alg": "SHA-256", + "content": "7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2" + }, + { + "alg": "SHA-256", + "content": "802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db" + }, + { + "alg": "SHA-256", + "content": "80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f" + }, + { + "alg": "SHA-256", + "content": "8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5" + }, + { + "alg": "SHA-256", + "content": "86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99" + }, + { + "alg": "SHA-256", + "content": "87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c" + }, + { + "alg": "SHA-256", + "content": "8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d" + }, + { + "alg": "SHA-256", + "content": "8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811" + }, + { + "alg": "SHA-256", + "content": "8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa" + }, + { + "alg": "SHA-256", + "content": "8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a" + }, + { + "alg": "SHA-256", + "content": "9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03" + }, + { + "alg": "SHA-256", + "content": "90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b" + }, + { + "alg": "SHA-256", + "content": "923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04" + }, + { + "alg": "SHA-256", + "content": "95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c" + }, + { + "alg": "SHA-256", + "content": "96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001" + }, + { + "alg": "SHA-256", + "content": "9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458" + }, + { + "alg": "SHA-256", + "content": "a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389" + }, + { + "alg": "SHA-256", + "content": "a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99" + }, + { + "alg": "SHA-256", + "content": "a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985" + }, + { + "alg": "SHA-256", + "content": "a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537" + }, + { + "alg": "SHA-256", + "content": "ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238" + }, + { + "alg": "SHA-256", + "content": "aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f" + }, + { + "alg": "SHA-256", + "content": "b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d" + }, + { + "alg": "SHA-256", + "content": "b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796" + }, + { + "alg": "SHA-256", + "content": "b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a" + }, + { + "alg": "SHA-256", + "content": "b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143" + }, + { + "alg": "SHA-256", + "content": "bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8" + }, + { + "alg": "SHA-256", + "content": "beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c" + }, + { + "alg": "SHA-256", + "content": "c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5" + }, + { + "alg": "SHA-256", + "content": "c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5" + }, + { + "alg": "SHA-256", + "content": "c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711" + }, + { + "alg": "SHA-256", + "content": "c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4" + }, + { + "alg": "SHA-256", + "content": "cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6" + }, + { + "alg": "SHA-256", + "content": "d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c" + }, + { + "alg": "SHA-256", + "content": "d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7" + }, + { + "alg": "SHA-256", + "content": "db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4" + }, + { + "alg": "SHA-256", + "content": "ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b" + }, + { + "alg": "SHA-256", + "content": "deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae" + }, + { + "alg": "SHA-256", + "content": "e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12" + }, + { + "alg": "SHA-256", + "content": "e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c" + }, + { + "alg": "SHA-256", + "content": "e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae" + }, + { + "alg": "SHA-256", + "content": "eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8" + }, + { + "alg": "SHA-256", + "content": "eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887" + }, + { + "alg": "SHA-256", + "content": "eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b" + }, + { + "alg": "SHA-256", + "content": "efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4" + }, + { + "alg": "SHA-256", + "content": "f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f" + }, + { + "alg": "SHA-256", + "content": "f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5" + }, + { + "alg": "SHA-256", + "content": "fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33" + }, + { + "alg": "SHA-256", + "content": "fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519" + }, + { + "alg": "SHA-256", + "content": "ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/charset-normalizer/" + } + ], + "name": "charset-normalizer", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/charset-normalizer@3.3.2", + "type": "library", + "version": "3.3.2" + }, + { + "bom-ref": "idna==3.6", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca" + }, + { + "alg": "SHA-256", + "content": "c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/idna@3.6", + "type": "library", + "version": "3.6" + }, + { + "bom-ref": "pillow", + "externalReferences": [ + { + "comment": "from git", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "pillow", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/pillow?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "" + }, + { + "bom-ref": "requests", + "externalReferences": [ + { + "comment": "from git", + "type": "vcs", + "url": "git+https://github.com/requests/requests.git#a25fde6989f8df5c3d823bc9f2e2fc24aa71f375" + } + ], + "name": "requests", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/requests?vcs_url=git%2Bhttps://github.com/requests/requests.git%40a25fde6989f8df5c3d823bc9f2e2fc24aa71f375", + "type": "library", + "version": "" + }, + { + "bom-ref": "six", + "externalReferences": [ + { + "comment": "from git", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/six?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "" + }, + { + "bom-ref": "urllib3", + "externalReferences": [ + { + "comment": "from file", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + } + ], + "name": "urllib3", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "certifi==2023.11.17" + }, + { + "ref": "charset-normalizer==3.3.2" + }, + { + "ref": "idna==3.6" + }, + { + "ref": "pillow" + }, + { + "ref": "requests" + }, + { + "ref": "root-component" + }, + { + "ref": "six" + }, + { + "ref": "urllib3" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_with-urls_1.3.xml.bin b/tests/_data/snapshots/pipenv/file_with-urls_1.3.xml.bin new file mode 100644 index 00000000..eb868f4a --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-urls_1.3.xml.bin @@ -0,0 +1,235 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + certifi + 2023.11.17 + pkg:pypi/certifi@2023.11.17 + + + https://pypi.org/simple/certifi/ + from implicit index: pypi + + 9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 + e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474 + + + + + default + + + + charset-normalizer + 3.3.2 + pkg:pypi/charset-normalizer@3.3.2 + + + https://pypi.org/simple/charset-normalizer/ + from implicit index: pypi + + 06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 + 06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 + 0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 + 0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 + 10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 + 122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 + 1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 + 1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e + 1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 + 2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 + 22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 + 25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 + 2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f + 3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 + 34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 + 37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a + 3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 + 3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc + 42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 + 45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 + 4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc + 4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce + 4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d + 549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e + 55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 + 572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 + 573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 + 5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d + 6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a + 65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 + 663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 + 6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d + 68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 + 6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed + 6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 + 6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac + 6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 + 753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 + 7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab + 7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 + 7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 + 802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db + 80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f + 8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 + 86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 + 87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c + 8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d + 8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 + 8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa + 8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a + 9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 + 90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b + 923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 + 95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c + 96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 + 9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 + a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 + a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 + a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 + a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 + ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 + aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f + b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d + b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 + b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a + b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 + bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 + beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c + c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 + c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 + c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 + c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 + cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 + d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c + d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 + db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 + ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b + deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae + e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 + e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c + e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae + eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 + eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 + eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b + efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 + f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f + f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 + fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 + fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 + ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 + + + + + default + + + + idna + 3.6 + pkg:pypi/idna@3.6 + + + https://pypi.org/simple/idna/ + from implicit index: pypi + + 9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca + c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + + + + + default + + + + pillow + + pkg:pypi/pillow?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from git + + + + default + + + + requests + + pkg:pypi/requests?vcs_url=git%2Bhttps://github.com/requests/requests.git%40a25fde6989f8df5c3d823bc9f2e2fc24aa71f375 + + + git+https://github.com/requests/requests.git#a25fde6989f8df5c3d823bc9f2e2fc24aa71f375 + from git + + + + default + + + + six + + pkg:pypi/six?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from git + + + + default + + + + urllib3 + + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + from file + + + + default + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_with-urls_1.4.json.bin b/tests/_data/snapshots/pipenv/file_with-urls_1.4.json.bin new file mode 100644 index 00000000..3feac8eb --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-urls_1.4.json.bin @@ -0,0 +1,575 @@ +{ + "components": [ + { + "bom-ref": "certifi==2023.11.17", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1" + }, + { + "alg": "SHA-256", + "content": "e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/certifi@2023.11.17", + "type": "library", + "version": "2023.11.17" + }, + { + "bom-ref": "charset-normalizer==3.3.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027" + }, + { + "alg": "SHA-256", + "content": "06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087" + }, + { + "alg": "SHA-256", + "content": "0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786" + }, + { + "alg": "SHA-256", + "content": "0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8" + }, + { + "alg": "SHA-256", + "content": "10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09" + }, + { + "alg": "SHA-256", + "content": "122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185" + }, + { + "alg": "SHA-256", + "content": "1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574" + }, + { + "alg": "SHA-256", + "content": "1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e" + }, + { + "alg": "SHA-256", + "content": "1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519" + }, + { + "alg": "SHA-256", + "content": "2127566c664442652f024c837091890cb1942c30937add288223dc895793f898" + }, + { + "alg": "SHA-256", + "content": "22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269" + }, + { + "alg": "SHA-256", + "content": "25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3" + }, + { + "alg": "SHA-256", + "content": "2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f" + }, + { + "alg": "SHA-256", + "content": "3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6" + }, + { + "alg": "SHA-256", + "content": "34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8" + }, + { + "alg": "SHA-256", + "content": "37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a" + }, + { + "alg": "SHA-256", + "content": "3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73" + }, + { + "alg": "SHA-256", + "content": "3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc" + }, + { + "alg": "SHA-256", + "content": "42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714" + }, + { + "alg": "SHA-256", + "content": "45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2" + }, + { + "alg": "SHA-256", + "content": "4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc" + }, + { + "alg": "SHA-256", + "content": "4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce" + }, + { + "alg": "SHA-256", + "content": "4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d" + }, + { + "alg": "SHA-256", + "content": "549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e" + }, + { + "alg": "SHA-256", + "content": "55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6" + }, + { + "alg": "SHA-256", + "content": "572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269" + }, + { + "alg": "SHA-256", + "content": "573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96" + }, + { + "alg": "SHA-256", + "content": "5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d" + }, + { + "alg": "SHA-256", + "content": "6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a" + }, + { + "alg": "SHA-256", + "content": "65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4" + }, + { + "alg": "SHA-256", + "content": "663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77" + }, + { + "alg": "SHA-256", + "content": "6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d" + }, + { + "alg": "SHA-256", + "content": "68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0" + }, + { + "alg": "SHA-256", + "content": "6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed" + }, + { + "alg": "SHA-256", + "content": "6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068" + }, + { + "alg": "SHA-256", + "content": "6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac" + }, + { + "alg": "SHA-256", + "content": "6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25" + }, + { + "alg": "SHA-256", + "content": "753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8" + }, + { + "alg": "SHA-256", + "content": "7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab" + }, + { + "alg": "SHA-256", + "content": "7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26" + }, + { + "alg": "SHA-256", + "content": "7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2" + }, + { + "alg": "SHA-256", + "content": "802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db" + }, + { + "alg": "SHA-256", + "content": "80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f" + }, + { + "alg": "SHA-256", + "content": "8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5" + }, + { + "alg": "SHA-256", + "content": "86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99" + }, + { + "alg": "SHA-256", + "content": "87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c" + }, + { + "alg": "SHA-256", + "content": "8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d" + }, + { + "alg": "SHA-256", + "content": "8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811" + }, + { + "alg": "SHA-256", + "content": "8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa" + }, + { + "alg": "SHA-256", + "content": "8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a" + }, + { + "alg": "SHA-256", + "content": "9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03" + }, + { + "alg": "SHA-256", + "content": "90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b" + }, + { + "alg": "SHA-256", + "content": "923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04" + }, + { + "alg": "SHA-256", + "content": "95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c" + }, + { + "alg": "SHA-256", + "content": "96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001" + }, + { + "alg": "SHA-256", + "content": "9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458" + }, + { + "alg": "SHA-256", + "content": "a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389" + }, + { + "alg": "SHA-256", + "content": "a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99" + }, + { + "alg": "SHA-256", + "content": "a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985" + }, + { + "alg": "SHA-256", + "content": "a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537" + }, + { + "alg": "SHA-256", + "content": "ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238" + }, + { + "alg": "SHA-256", + "content": "aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f" + }, + { + "alg": "SHA-256", + "content": "b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d" + }, + { + "alg": "SHA-256", + "content": "b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796" + }, + { + "alg": "SHA-256", + "content": "b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a" + }, + { + "alg": "SHA-256", + "content": "b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143" + }, + { + "alg": "SHA-256", + "content": "bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8" + }, + { + "alg": "SHA-256", + "content": "beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c" + }, + { + "alg": "SHA-256", + "content": "c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5" + }, + { + "alg": "SHA-256", + "content": "c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5" + }, + { + "alg": "SHA-256", + "content": "c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711" + }, + { + "alg": "SHA-256", + "content": "c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4" + }, + { + "alg": "SHA-256", + "content": "cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6" + }, + { + "alg": "SHA-256", + "content": "d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c" + }, + { + "alg": "SHA-256", + "content": "d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7" + }, + { + "alg": "SHA-256", + "content": "db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4" + }, + { + "alg": "SHA-256", + "content": "ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b" + }, + { + "alg": "SHA-256", + "content": "deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae" + }, + { + "alg": "SHA-256", + "content": "e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12" + }, + { + "alg": "SHA-256", + "content": "e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c" + }, + { + "alg": "SHA-256", + "content": "e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae" + }, + { + "alg": "SHA-256", + "content": "eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8" + }, + { + "alg": "SHA-256", + "content": "eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887" + }, + { + "alg": "SHA-256", + "content": "eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b" + }, + { + "alg": "SHA-256", + "content": "efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4" + }, + { + "alg": "SHA-256", + "content": "f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f" + }, + { + "alg": "SHA-256", + "content": "f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5" + }, + { + "alg": "SHA-256", + "content": "fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33" + }, + { + "alg": "SHA-256", + "content": "fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519" + }, + { + "alg": "SHA-256", + "content": "ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/charset-normalizer/" + } + ], + "name": "charset-normalizer", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/charset-normalizer@3.3.2", + "type": "library", + "version": "3.3.2" + }, + { + "bom-ref": "idna==3.6", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca" + }, + { + "alg": "SHA-256", + "content": "c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/idna@3.6", + "type": "library", + "version": "3.6" + }, + { + "bom-ref": "pillow", + "externalReferences": [ + { + "comment": "from git", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "pillow", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/pillow?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library" + }, + { + "bom-ref": "requests", + "externalReferences": [ + { + "comment": "from git", + "type": "vcs", + "url": "git+https://github.com/requests/requests.git#a25fde6989f8df5c3d823bc9f2e2fc24aa71f375" + } + ], + "name": "requests", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/requests?vcs_url=git%2Bhttps://github.com/requests/requests.git%40a25fde6989f8df5c3d823bc9f2e2fc24aa71f375", + "type": "library" + }, + { + "bom-ref": "six", + "externalReferences": [ + { + "comment": "from git", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/six?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library" + }, + { + "bom-ref": "urllib3", + "externalReferences": [ + { + "comment": "from file", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + } + ], + "name": "urllib3", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "certifi==2023.11.17" + }, + { + "ref": "charset-normalizer==3.3.2" + }, + { + "ref": "idna==3.6" + }, + { + "ref": "pillow" + }, + { + "ref": "requests" + }, + { + "ref": "root-component" + }, + { + "ref": "six" + }, + { + "ref": "urllib3" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_with-urls_1.4.xml.bin b/tests/_data/snapshots/pipenv/file_with-urls_1.4.xml.bin new file mode 100644 index 00000000..074cc88c --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-urls_1.4.xml.bin @@ -0,0 +1,258 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + certifi + 2023.11.17 + pkg:pypi/certifi@2023.11.17 + + + https://pypi.org/simple/certifi/ + from implicit index: pypi + + 9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 + e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474 + + + + + default + + + + charset-normalizer + 3.3.2 + pkg:pypi/charset-normalizer@3.3.2 + + + https://pypi.org/simple/charset-normalizer/ + from implicit index: pypi + + 06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 + 06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 + 0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 + 0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 + 10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 + 122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 + 1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 + 1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e + 1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 + 2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 + 22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 + 25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 + 2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f + 3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 + 34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 + 37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a + 3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 + 3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc + 42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 + 45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 + 4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc + 4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce + 4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d + 549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e + 55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 + 572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 + 573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 + 5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d + 6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a + 65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 + 663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 + 6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d + 68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 + 6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed + 6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 + 6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac + 6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 + 753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 + 7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab + 7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 + 7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 + 802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db + 80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f + 8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 + 86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 + 87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c + 8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d + 8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 + 8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa + 8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a + 9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 + 90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b + 923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 + 95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c + 96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 + 9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 + a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 + a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 + a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 + a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 + ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 + aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f + b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d + b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 + b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a + b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 + bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 + beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c + c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 + c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 + c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 + c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 + cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 + d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c + d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 + db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 + ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b + deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae + e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 + e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c + e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae + eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 + eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 + eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b + efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 + f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f + f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 + fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 + fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 + ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 + + + + + default + + + + idna + 3.6 + pkg:pypi/idna@3.6 + + + https://pypi.org/simple/idna/ + from implicit index: pypi + + 9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca + c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + + + + + default + + + + pillow + pkg:pypi/pillow?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from git + + + + default + + + + requests + pkg:pypi/requests?vcs_url=git%2Bhttps://github.com/requests/requests.git%40a25fde6989f8df5c3d823bc9f2e2fc24aa71f375 + + + git+https://github.com/requests/requests.git#a25fde6989f8df5c3d823bc9f2e2fc24aa71f375 + from git + + + + default + + + + six + pkg:pypi/six?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from git + + + + default + + + + urllib3 + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + from file + + + + default + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/file_with-urls_1.5.json.bin b/tests/_data/snapshots/pipenv/file_with-urls_1.5.json.bin new file mode 100644 index 00000000..2ca69834 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-urls_1.5.json.bin @@ -0,0 +1,575 @@ +{ + "components": [ + { + "bom-ref": "certifi==2023.11.17", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1" + }, + { + "alg": "SHA-256", + "content": "e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/certifi@2023.11.17", + "type": "library", + "version": "2023.11.17" + }, + { + "bom-ref": "charset-normalizer==3.3.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027" + }, + { + "alg": "SHA-256", + "content": "06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087" + }, + { + "alg": "SHA-256", + "content": "0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786" + }, + { + "alg": "SHA-256", + "content": "0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8" + }, + { + "alg": "SHA-256", + "content": "10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09" + }, + { + "alg": "SHA-256", + "content": "122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185" + }, + { + "alg": "SHA-256", + "content": "1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574" + }, + { + "alg": "SHA-256", + "content": "1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e" + }, + { + "alg": "SHA-256", + "content": "1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519" + }, + { + "alg": "SHA-256", + "content": "2127566c664442652f024c837091890cb1942c30937add288223dc895793f898" + }, + { + "alg": "SHA-256", + "content": "22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269" + }, + { + "alg": "SHA-256", + "content": "25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3" + }, + { + "alg": "SHA-256", + "content": "2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f" + }, + { + "alg": "SHA-256", + "content": "3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6" + }, + { + "alg": "SHA-256", + "content": "34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8" + }, + { + "alg": "SHA-256", + "content": "37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a" + }, + { + "alg": "SHA-256", + "content": "3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73" + }, + { + "alg": "SHA-256", + "content": "3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc" + }, + { + "alg": "SHA-256", + "content": "42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714" + }, + { + "alg": "SHA-256", + "content": "45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2" + }, + { + "alg": "SHA-256", + "content": "4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc" + }, + { + "alg": "SHA-256", + "content": "4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce" + }, + { + "alg": "SHA-256", + "content": "4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d" + }, + { + "alg": "SHA-256", + "content": "549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e" + }, + { + "alg": "SHA-256", + "content": "55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6" + }, + { + "alg": "SHA-256", + "content": "572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269" + }, + { + "alg": "SHA-256", + "content": "573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96" + }, + { + "alg": "SHA-256", + "content": "5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d" + }, + { + "alg": "SHA-256", + "content": "6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a" + }, + { + "alg": "SHA-256", + "content": "65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4" + }, + { + "alg": "SHA-256", + "content": "663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77" + }, + { + "alg": "SHA-256", + "content": "6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d" + }, + { + "alg": "SHA-256", + "content": "68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0" + }, + { + "alg": "SHA-256", + "content": "6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed" + }, + { + "alg": "SHA-256", + "content": "6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068" + }, + { + "alg": "SHA-256", + "content": "6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac" + }, + { + "alg": "SHA-256", + "content": "6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25" + }, + { + "alg": "SHA-256", + "content": "753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8" + }, + { + "alg": "SHA-256", + "content": "7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab" + }, + { + "alg": "SHA-256", + "content": "7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26" + }, + { + "alg": "SHA-256", + "content": "7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2" + }, + { + "alg": "SHA-256", + "content": "802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db" + }, + { + "alg": "SHA-256", + "content": "80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f" + }, + { + "alg": "SHA-256", + "content": "8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5" + }, + { + "alg": "SHA-256", + "content": "86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99" + }, + { + "alg": "SHA-256", + "content": "87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c" + }, + { + "alg": "SHA-256", + "content": "8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d" + }, + { + "alg": "SHA-256", + "content": "8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811" + }, + { + "alg": "SHA-256", + "content": "8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa" + }, + { + "alg": "SHA-256", + "content": "8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a" + }, + { + "alg": "SHA-256", + "content": "9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03" + }, + { + "alg": "SHA-256", + "content": "90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b" + }, + { + "alg": "SHA-256", + "content": "923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04" + }, + { + "alg": "SHA-256", + "content": "95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c" + }, + { + "alg": "SHA-256", + "content": "96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001" + }, + { + "alg": "SHA-256", + "content": "9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458" + }, + { + "alg": "SHA-256", + "content": "a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389" + }, + { + "alg": "SHA-256", + "content": "a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99" + }, + { + "alg": "SHA-256", + "content": "a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985" + }, + { + "alg": "SHA-256", + "content": "a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537" + }, + { + "alg": "SHA-256", + "content": "ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238" + }, + { + "alg": "SHA-256", + "content": "aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f" + }, + { + "alg": "SHA-256", + "content": "b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d" + }, + { + "alg": "SHA-256", + "content": "b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796" + }, + { + "alg": "SHA-256", + "content": "b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a" + }, + { + "alg": "SHA-256", + "content": "b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143" + }, + { + "alg": "SHA-256", + "content": "bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8" + }, + { + "alg": "SHA-256", + "content": "beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c" + }, + { + "alg": "SHA-256", + "content": "c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5" + }, + { + "alg": "SHA-256", + "content": "c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5" + }, + { + "alg": "SHA-256", + "content": "c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711" + }, + { + "alg": "SHA-256", + "content": "c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4" + }, + { + "alg": "SHA-256", + "content": "cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6" + }, + { + "alg": "SHA-256", + "content": "d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c" + }, + { + "alg": "SHA-256", + "content": "d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7" + }, + { + "alg": "SHA-256", + "content": "db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4" + }, + { + "alg": "SHA-256", + "content": "ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b" + }, + { + "alg": "SHA-256", + "content": "deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae" + }, + { + "alg": "SHA-256", + "content": "e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12" + }, + { + "alg": "SHA-256", + "content": "e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c" + }, + { + "alg": "SHA-256", + "content": "e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae" + }, + { + "alg": "SHA-256", + "content": "eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8" + }, + { + "alg": "SHA-256", + "content": "eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887" + }, + { + "alg": "SHA-256", + "content": "eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b" + }, + { + "alg": "SHA-256", + "content": "efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4" + }, + { + "alg": "SHA-256", + "content": "f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f" + }, + { + "alg": "SHA-256", + "content": "f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5" + }, + { + "alg": "SHA-256", + "content": "fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33" + }, + { + "alg": "SHA-256", + "content": "fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519" + }, + { + "alg": "SHA-256", + "content": "ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/charset-normalizer/" + } + ], + "name": "charset-normalizer", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/charset-normalizer@3.3.2", + "type": "library", + "version": "3.3.2" + }, + { + "bom-ref": "idna==3.6", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca" + }, + { + "alg": "SHA-256", + "content": "c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/idna@3.6", + "type": "library", + "version": "3.6" + }, + { + "bom-ref": "pillow", + "externalReferences": [ + { + "comment": "from git", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "pillow", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/pillow?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library" + }, + { + "bom-ref": "requests", + "externalReferences": [ + { + "comment": "from git", + "type": "vcs", + "url": "git+https://github.com/requests/requests.git#a25fde6989f8df5c3d823bc9f2e2fc24aa71f375" + } + ], + "name": "requests", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/requests?vcs_url=git%2Bhttps://github.com/requests/requests.git%40a25fde6989f8df5c3d823bc9f2e2fc24aa71f375", + "type": "library" + }, + { + "bom-ref": "six", + "externalReferences": [ + { + "comment": "from git", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/six?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library" + }, + { + "bom-ref": "urllib3", + "externalReferences": [ + { + "comment": "from file", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + } + ], + "name": "urllib3", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "certifi==2023.11.17" + }, + { + "ref": "charset-normalizer==3.3.2" + }, + { + "ref": "idna==3.6" + }, + { + "ref": "pillow" + }, + { + "ref": "requests" + }, + { + "ref": "root-component" + }, + { + "ref": "six" + }, + { + "ref": "urllib3" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/file_with-urls_1.5.xml.bin b/tests/_data/snapshots/pipenv/file_with-urls_1.5.xml.bin new file mode 100644 index 00000000..b2c264d9 --- /dev/null +++ b/tests/_data/snapshots/pipenv/file_with-urls_1.5.xml.bin @@ -0,0 +1,258 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + certifi + 2023.11.17 + pkg:pypi/certifi@2023.11.17 + + + https://pypi.org/simple/certifi/ + from implicit index: pypi + + 9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 + e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474 + + + + + default + + + + charset-normalizer + 3.3.2 + pkg:pypi/charset-normalizer@3.3.2 + + + https://pypi.org/simple/charset-normalizer/ + from implicit index: pypi + + 06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 + 06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 + 0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 + 0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 + 10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 + 122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 + 1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 + 1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e + 1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 + 2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 + 22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 + 25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 + 2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f + 3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 + 34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 + 37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a + 3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 + 3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc + 42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 + 45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 + 4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc + 4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce + 4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d + 549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e + 55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 + 572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 + 573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 + 5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d + 6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a + 65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 + 663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 + 6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d + 68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 + 6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed + 6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 + 6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac + 6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 + 753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 + 7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab + 7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 + 7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 + 802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db + 80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f + 8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 + 86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 + 87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c + 8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d + 8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 + 8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa + 8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a + 9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 + 90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b + 923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 + 95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c + 96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 + 9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 + a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 + a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 + a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 + a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 + ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 + aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f + b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d + b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 + b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a + b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 + bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 + beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c + c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 + c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 + c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 + c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 + cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 + d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c + d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 + db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 + ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b + deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae + e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 + e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c + e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae + eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 + eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 + eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b + efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 + f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f + f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 + fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 + fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 + ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 + + + + + default + + + + idna + 3.6 + pkg:pypi/idna@3.6 + + + https://pypi.org/simple/idna/ + from implicit index: pypi + + 9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca + c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + + + + + default + + + + pillow + pkg:pypi/pillow?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from git + + + + default + + + + requests + pkg:pypi/requests?vcs_url=git%2Bhttps://github.com/requests/requests.git%40a25fde6989f8df5c3d823bc9f2e2fc24aa71f375 + + + git+https://github.com/requests/requests.git#a25fde6989f8df5c3d823bc9f2e2fc24aa71f375 + from git + + + + default + + + + six + pkg:pypi/six?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from git + + + + default + + + + urllib3 + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + from file + + + + default + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.0.xml.bin b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.0.xml.bin new file mode 100644 index 00000000..b82f51c6 --- /dev/null +++ b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.0.xml.bin @@ -0,0 +1,23 @@ + + + + + numpy + 1.26.2 + pkg:pypi/numpy@1.26.2?repository_url=https://pypy-mirror.testing.acme.org/simple + false + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + false + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple + false + + + diff --git a/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.1.xml.bin b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.1.xml.bin new file mode 100644 index 00000000..f115b772 --- /dev/null +++ b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.1.xml.bin @@ -0,0 +1,38 @@ + + + + + numpy + 1.26.2 + pkg:pypi/numpy@1.26.2?repository_url=https://pypy-mirror.testing.acme.org/simple + + + https://pypy-mirror.testing.acme.org/simple/numpy/ + from explicit index: pypi + + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypy-mirror.testing.acme.org/simple/six/ + from implicit index: pypi + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/toml/ + from explicit index: pysrc1.acme.org + + + + + diff --git a/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.2.json.bin b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.2.json.bin new file mode 100644 index 00000000..206ebb83 --- /dev/null +++ b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.2.json.bin @@ -0,0 +1,75 @@ +{ + "components": [ + { + "bom-ref": "numpy==1.26.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "type": "distribution", + "url": "https://pypy-mirror.testing.acme.org/simple/numpy/" + } + ], + "name": "numpy", + "purl": "pkg:pypi/numpy@1.26.2?repository_url=https://pypy-mirror.testing.acme.org/simple", + "type": "library", + "version": "1.26.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypy-mirror.testing.acme.org/simple/six/" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pysrc1.acme.org", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/toml/" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "numpy==1.26.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.2.xml.bin b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.2.xml.bin new file mode 100644 index 00000000..f107241c --- /dev/null +++ b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.2.xml.bin @@ -0,0 +1,57 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + numpy + 1.26.2 + pkg:pypi/numpy@1.26.2?repository_url=https://pypy-mirror.testing.acme.org/simple + + + https://pypy-mirror.testing.acme.org/simple/numpy/ + from explicit index: pypi + + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypy-mirror.testing.acme.org/simple/six/ + from implicit index: pypi + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/toml/ + from explicit index: pysrc1.acme.org + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.3.json.bin b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.3.json.bin new file mode 100644 index 00000000..e8443665 --- /dev/null +++ b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.3.json.bin @@ -0,0 +1,129 @@ +{ + "components": [ + { + "bom-ref": "numpy==1.26.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b" + }, + { + "alg": "SHA-256", + "content": "f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea" + } + ], + "type": "distribution", + "url": "https://pypy-mirror.testing.acme.org/simple/numpy/" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/numpy@1.26.2?repository_url=https://pypy-mirror.testing.acme.org/simple", + "type": "library", + "version": "1.26.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypy-mirror.testing.acme.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pysrc1.acme.org", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "numpy==1.26.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.3.xml.bin b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.3.xml.bin new file mode 100644 index 00000000..6fa2d94e --- /dev/null +++ b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.3.xml.bin @@ -0,0 +1,81 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + + + numpy + 1.26.2 + pkg:pypi/numpy@1.26.2?repository_url=https://pypy-mirror.testing.acme.org/simple + + + https://pypy-mirror.testing.acme.org/simple/numpy/ + from explicit index: pypi + + 96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b + f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea + + + + + default + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypy-mirror.testing.acme.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + default + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/toml/ + from explicit index: pysrc1.acme.org + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.4.json.bin b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.4.json.bin new file mode 100644 index 00000000..e33ce3cb --- /dev/null +++ b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.4.json.bin @@ -0,0 +1,125 @@ +{ + "components": [ + { + "bom-ref": "numpy==1.26.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b" + }, + { + "alg": "SHA-256", + "content": "f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea" + } + ], + "type": "distribution", + "url": "https://pypy-mirror.testing.acme.org/simple/numpy/" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/numpy@1.26.2?repository_url=https://pypy-mirror.testing.acme.org/simple", + "type": "library", + "version": "1.26.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypy-mirror.testing.acme.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pysrc1.acme.org", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "numpy==1.26.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.4.xml.bin b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.4.xml.bin new file mode 100644 index 00000000..c270f947 --- /dev/null +++ b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.4.xml.bin @@ -0,0 +1,108 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + numpy + 1.26.2 + pkg:pypi/numpy@1.26.2?repository_url=https://pypy-mirror.testing.acme.org/simple + + + https://pypy-mirror.testing.acme.org/simple/numpy/ + from explicit index: pypi + + 96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b + f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea + + + + + default + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypy-mirror.testing.acme.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + default + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/toml/ + from explicit index: pysrc1.acme.org + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.5.json.bin b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.5.json.bin new file mode 100644 index 00000000..a375099f --- /dev/null +++ b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.5.json.bin @@ -0,0 +1,125 @@ +{ + "components": [ + { + "bom-ref": "numpy==1.26.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b" + }, + { + "alg": "SHA-256", + "content": "f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea" + } + ], + "type": "distribution", + "url": "https://pypy-mirror.testing.acme.org/simple/numpy/" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/numpy@1.26.2?repository_url=https://pypy-mirror.testing.acme.org/simple", + "type": "library", + "version": "1.26.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypy-mirror.testing.acme.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pysrc1.acme.org", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "numpy==1.26.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.5.xml.bin b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.5.xml.bin new file mode 100644 index 00000000..d4f0361d --- /dev/null +++ b/tests/_data/snapshots/pipenv/pypi-mirror_private-packages_1.5.xml.bin @@ -0,0 +1,108 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + numpy + 1.26.2 + pkg:pypi/numpy@1.26.2?repository_url=https://pypy-mirror.testing.acme.org/simple + + + https://pypy-mirror.testing.acme.org/simple/numpy/ + from explicit index: pypi + + 96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b + f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea + + + + + default + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypy-mirror.testing.acme.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + default + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/toml/ + from explicit index: pysrc1.acme.org + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/some-categories_category-deps_1.0.xml.bin b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.0.xml.bin new file mode 100644 index 00000000..2606449f --- /dev/null +++ b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.0.xml.bin @@ -0,0 +1,53 @@ + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + false + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + false + + + ddt + 1.7.0 + pkg:pypi/ddt@1.7.0 + false + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + false + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + false + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + false + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + false + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + diff --git a/tests/_data/snapshots/pipenv/some-categories_category-deps_1.1.xml.bin b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.1.xml.bin new file mode 100644 index 00000000..a67ad6b2 --- /dev/null +++ b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.1.xml.bin @@ -0,0 +1,93 @@ + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + + + + ddt + 1.7.0 + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/ + from explicit index: pypi + + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from explicit index: pypi + + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + + + + diff --git a/tests/_data/snapshots/pipenv/some-categories_category-deps_1.2.json.bin b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.2.json.bin new file mode 100644 index 00000000..9f24c8d3 --- /dev/null +++ b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.2.json.bin @@ -0,0 +1,160 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama==0.4.6", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "ddt==1.7.0", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/ddt/" + } + ], + "name": "ddt", + "purl": "pkg:pypi/ddt@1.7.0", + "type": "library", + "version": "1.7.0" + }, + { + "bom-ref": "isoduration==20.11.0", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "ref": "arrow==1.3.0" + }, + { + "ref": "colorama==0.4.6" + }, + { + "ref": "ddt==1.7.0" + }, + { + "ref": "isoduration==20.11.0" + }, + { + "ref": "python-dateutil==2.8.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + } + ], + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/some-categories_category-deps_1.2.xml.bin b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.2.xml.bin new file mode 100644 index 00000000..6e2744f7 --- /dev/null +++ b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.2.xml.bin @@ -0,0 +1,117 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + + + + ddt + 1.7.0 + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/ + from explicit index: pypi + + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from explicit index: pypi + + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/some-categories_category-deps_1.3.json.bin b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.3.json.bin new file mode 100644 index 00000000..d6e23efd --- /dev/null +++ b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.3.json.bin @@ -0,0 +1,298 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + }, + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama==0.4.6", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + }, + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "categoryB" + }, + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "ddt==1.7.0", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114" + }, + { + "alg": "SHA-256", + "content": "d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/" + } + ], + "name": "ddt", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/ddt@1.7.0", + "type": "library", + "version": "1.7.0" + }, + { + "bom-ref": "isoduration==20.11.0", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + }, + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + }, + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + }, + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "ref": "arrow==1.3.0" + }, + { + "ref": "colorama==0.4.6" + }, + { + "ref": "ddt==1.7.0" + }, + { + "ref": "isoduration==20.11.0" + }, + { + "ref": "python-dateutil==2.8.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/some-categories_category-deps_1.3.xml.bin b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.3.xml.bin new file mode 100644 index 00000000..784cefbd --- /dev/null +++ b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.3.xml.bin @@ -0,0 +1,177 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + groupA + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + + categoryB + groupA + + + + ddt + 1.7.0 + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/ + from explicit index: pypi + + a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114 + d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df + + + + + develop + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from explicit index: pypi + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + + groupA + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + groupA + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + groupA + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + groupA + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/some-categories_category-deps_1.4.json.bin b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.4.json.bin new file mode 100644 index 00000000..a78ebf22 --- /dev/null +++ b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.4.json.bin @@ -0,0 +1,294 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + }, + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama==0.4.6", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + }, + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "categoryB" + }, + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "ddt==1.7.0", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114" + }, + { + "alg": "SHA-256", + "content": "d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/" + } + ], + "name": "ddt", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/ddt@1.7.0", + "type": "library", + "version": "1.7.0" + }, + { + "bom-ref": "isoduration==20.11.0", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + }, + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + }, + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + }, + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "ref": "arrow==1.3.0" + }, + { + "ref": "colorama==0.4.6" + }, + { + "ref": "ddt==1.7.0" + }, + { + "ref": "isoduration==20.11.0" + }, + { + "ref": "python-dateutil==2.8.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/some-categories_category-deps_1.4.xml.bin b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.4.xml.bin new file mode 100644 index 00000000..5648fc50 --- /dev/null +++ b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.4.xml.bin @@ -0,0 +1,204 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + groupA + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + + categoryB + groupA + + + + ddt + 1.7.0 + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/ + from explicit index: pypi + + a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114 + d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df + + + + + develop + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from explicit index: pypi + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + + groupA + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + groupA + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + groupA + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + groupA + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/some-categories_category-deps_1.5.json.bin b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.5.json.bin new file mode 100644 index 00000000..7d64ee96 --- /dev/null +++ b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.5.json.bin @@ -0,0 +1,294 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + }, + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama==0.4.6", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + }, + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "categoryB" + }, + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "ddt==1.7.0", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114" + }, + { + "alg": "SHA-256", + "content": "d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/" + } + ], + "name": "ddt", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/ddt@1.7.0", + "type": "library", + "version": "1.7.0" + }, + { + "bom-ref": "isoduration==20.11.0", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + }, + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + }, + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + }, + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "groupA" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "ref": "arrow==1.3.0" + }, + { + "ref": "colorama==0.4.6" + }, + { + "ref": "ddt==1.7.0" + }, + { + "ref": "isoduration==20.11.0" + }, + { + "ref": "python-dateutil==2.8.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/some-categories_category-deps_1.5.xml.bin b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.5.xml.bin new file mode 100644 index 00000000..5e96fad6 --- /dev/null +++ b/tests/_data/snapshots/pipenv/some-categories_category-deps_1.5.xml.bin @@ -0,0 +1,204 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + groupA + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + + categoryB + groupA + + + + ddt + 1.7.0 + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/ + from explicit index: pypi + + a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114 + d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df + + + + + develop + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from explicit index: pypi + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + + groupA + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + groupA + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + groupA + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + groupA + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.0.xml.bin b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.0.xml.bin new file mode 100644 index 00000000..ab965ead --- /dev/null +++ b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.0.xml.bin @@ -0,0 +1,47 @@ + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + false + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + false + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + false + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + false + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + false + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + false + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + diff --git a/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.1.xml.bin b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.1.xml.bin new file mode 100644 index 00000000..aa16d39d --- /dev/null +++ b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.1.xml.bin @@ -0,0 +1,82 @@ + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from explicit index: pypi + + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + + + + diff --git a/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.2.json.bin b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.2.json.bin new file mode 100644 index 00000000..affd82b1 --- /dev/null +++ b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.2.json.bin @@ -0,0 +1,143 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama==0.4.6", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration==20.11.0", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "ref": "arrow==1.3.0" + }, + { + "ref": "colorama==0.4.6" + }, + { + "ref": "isoduration==20.11.0" + }, + { + "ref": "python-dateutil==2.8.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + } + ], + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.2.xml.bin b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.2.xml.bin new file mode 100644 index 00000000..dc016405 --- /dev/null +++ b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.2.xml.bin @@ -0,0 +1,105 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from explicit index: pypi + + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.3.json.bin b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.3.json.bin new file mode 100644 index 00000000..209e8cb1 --- /dev/null +++ b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.3.json.bin @@ -0,0 +1,261 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + }, + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama==0.4.6", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + }, + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration==20.11.0", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + }, + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + }, + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + }, + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "ref": "arrow==1.3.0" + }, + { + "ref": "colorama==0.4.6" + }, + { + "ref": "isoduration==20.11.0" + }, + { + "ref": "python-dateutil==2.8.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.3.xml.bin b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.3.xml.bin new file mode 100644 index 00000000..be7b125e --- /dev/null +++ b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.3.xml.bin @@ -0,0 +1,157 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + develop + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + + default + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from explicit index: pypi + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + + develop + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + develop + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + develop + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + develop + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.4.json.bin b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.4.json.bin new file mode 100644 index 00000000..e0b64e60 --- /dev/null +++ b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.4.json.bin @@ -0,0 +1,257 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + }, + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama==0.4.6", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + }, + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration==20.11.0", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + }, + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + }, + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + }, + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "ref": "arrow==1.3.0" + }, + { + "ref": "colorama==0.4.6" + }, + { + "ref": "isoduration==20.11.0" + }, + { + "ref": "python-dateutil==2.8.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.4.xml.bin b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.4.xml.bin new file mode 100644 index 00000000..a9b333bb --- /dev/null +++ b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.4.xml.bin @@ -0,0 +1,184 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + develop + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + + default + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from explicit index: pypi + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + + develop + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + develop + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + develop + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + develop + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.5.json.bin b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.5.json.bin new file mode 100644 index 00000000..908c84e2 --- /dev/null +++ b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.5.json.bin @@ -0,0 +1,257 @@ +{ + "components": [ + { + "bom-ref": "arrow==1.3.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + }, + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama==0.4.6", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + }, + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration==20.11.0", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + }, + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil==2.8.2", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + }, + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six==1.16.0", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + }, + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml==0.10.2", + "externalReferences": [ + { + "comment": "from explicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + }, + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "default" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil==2.8.19.14", + "externalReferences": [ + { + "comment": "from implicit index: pypi", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + }, + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:pipenv:category", + "value": "develop" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "ref": "arrow==1.3.0" + }, + { + "ref": "colorama==0.4.6" + }, + { + "ref": "isoduration==20.11.0" + }, + { + "ref": "python-dateutil==2.8.2" + }, + { + "ref": "six==1.16.0" + }, + { + "ref": "toml==0.10.2" + }, + { + "ref": "types-python-dateutil==2.8.19.14" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.5.xml.bin b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.5.xml.bin new file mode 100644 index 00000000..2ed5b691 --- /dev/null +++ b/tests/_data/snapshots/pipenv/with-dev_default-and-dev_1.5.xml.bin @@ -0,0 +1,184 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + arrow + 1.3.0 + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/ + from implicit index: pypi + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + develop + + + + colorama + 0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + from explicit index: pypi + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + + default + + + + isoduration + 20.11.0 + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/ + from explicit index: pypi + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + + develop + + + + python-dateutil + 2.8.2 + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/ + from implicit index: pypi + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + develop + + + + six + 1.16.0 + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/ + from implicit index: pypi + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + + develop + + + + toml + 0.10.2 + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/ + from explicit index: pypi + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + default + + + + types-python-dateutil + 2.8.19.14 + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/ + from implicit index: pypi + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + develop + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/group-deps_lock11_1.0.xml.bin b/tests/_data/snapshots/poetry/group-deps_lock11_1.0.xml.bin new file mode 100644 index 00000000..23e848da --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock11_1.0.xml.bin @@ -0,0 +1,54 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + false + + + ddt + 1.7.0 + Data-Driven/Decorated Tests + pkg:pypi/ddt@1.7.0 + false + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + false + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + false + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + false + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + diff --git a/tests/_data/snapshots/poetry/group-deps_lock11_1.1.xml.bin b/tests/_data/snapshots/poetry/group-deps_lock11_1.1.xml.bin new file mode 100644 index 00000000..54b4daf6 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock11_1.1.xml.bin @@ -0,0 +1,117 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + ddt + 1.7.0 + Data-Driven/Decorated Tests + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/group-deps_lock11_1.2.json.bin b/tests/_data/snapshots/poetry/group-deps_lock11_1.2.json.bin new file mode 100644 index 00000000..c38d1503 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock11_1.2.json.bin @@ -0,0 +1,210 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "ddt@1.7.0", + "description": "Data-Driven/Decorated Tests", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz" + } + ], + "name": "ddt", + "purl": "pkg:pypi/ddt@1.7.0", + "type": "library", + "version": "1.7.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "ddt@1.7.0" + }, + { + "dependsOn": [ + "ddt@1.7.0", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/group-deps_lock11_1.2.xml.bin b/tests/_data/snapshots/poetry/group-deps_lock11_1.2.xml.bin new file mode 100644 index 00000000..f10cb0d6 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock11_1.2.xml.bin @@ -0,0 +1,157 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + ddt + 1.7.0 + Data-Driven/Decorated Tests + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/group-deps_lock11_1.3.json.bin b/tests/_data/snapshots/poetry/group-deps_lock11_1.3.json.bin new file mode 100644 index 00000000..157f748d --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock11_1.3.json.bin @@ -0,0 +1,346 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "ddt@1.7.0", + "description": "Data-Driven/Decorated Tests", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz" + } + ], + "name": "ddt", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/ddt@1.7.0", + "type": "library", + "version": "1.7.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + }, + { + "name": "cdx:poetry:group", + "value": "groupB" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "ddt@1.7.0" + }, + { + "dependsOn": [ + "ddt@1.7.0", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/group-deps_lock11_1.3.xml.bin b/tests/_data/snapshots/poetry/group-deps_lock11_1.3.xml.bin new file mode 100644 index 00000000..2847e441 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock11_1.3.xml.bin @@ -0,0 +1,224 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + dev + + + + ddt + 1.7.0 + Data-Driven/Decorated Tests + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl + from legacy-api + + a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114 + + + + https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz + from legacy-api + + d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df + + + + + dev + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + groupB + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + dev + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/group-deps_lock11_1.4.json.bin b/tests/_data/snapshots/poetry/group-deps_lock11_1.4.json.bin new file mode 100644 index 00000000..969e50b9 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock11_1.4.json.bin @@ -0,0 +1,342 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "ddt@1.7.0", + "description": "Data-Driven/Decorated Tests", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz" + } + ], + "name": "ddt", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/ddt@1.7.0", + "type": "library", + "version": "1.7.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + }, + { + "name": "cdx:poetry:group", + "value": "groupB" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "ddt@1.7.0" + }, + { + "dependsOn": [ + "ddt@1.7.0", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/group-deps_lock11_1.4.xml.bin b/tests/_data/snapshots/poetry/group-deps_lock11_1.4.xml.bin new file mode 100644 index 00000000..f3a04fd6 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock11_1.4.xml.bin @@ -0,0 +1,251 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + dev + + + + ddt + 1.7.0 + Data-Driven/Decorated Tests + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl + from legacy-api + + a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114 + + + + https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz + from legacy-api + + d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df + + + + + dev + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + groupB + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + dev + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/group-deps_lock11_1.5.json.bin b/tests/_data/snapshots/poetry/group-deps_lock11_1.5.json.bin new file mode 100644 index 00000000..20114425 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock11_1.5.json.bin @@ -0,0 +1,342 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "ddt@1.7.0", + "description": "Data-Driven/Decorated Tests", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz" + } + ], + "name": "ddt", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/ddt@1.7.0", + "type": "library", + "version": "1.7.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + }, + { + "name": "cdx:poetry:group", + "value": "groupB" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "ddt@1.7.0" + }, + { + "dependsOn": [ + "ddt@1.7.0", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/group-deps_lock11_1.5.xml.bin b/tests/_data/snapshots/poetry/group-deps_lock11_1.5.xml.bin new file mode 100644 index 00000000..bc128733 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock11_1.5.xml.bin @@ -0,0 +1,251 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + dev + + + + ddt + 1.7.0 + Data-Driven/Decorated Tests + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl + from legacy-api + + a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114 + + + + https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz + from legacy-api + + d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df + + + + + dev + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + groupB + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + dev + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/group-deps_lock20_1.0.xml.bin b/tests/_data/snapshots/poetry/group-deps_lock20_1.0.xml.bin new file mode 100644 index 00000000..23e848da --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock20_1.0.xml.bin @@ -0,0 +1,54 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + false + + + ddt + 1.7.0 + Data-Driven/Decorated Tests + pkg:pypi/ddt@1.7.0 + false + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + false + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + false + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + false + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + diff --git a/tests/_data/snapshots/poetry/group-deps_lock20_1.1.xml.bin b/tests/_data/snapshots/poetry/group-deps_lock20_1.1.xml.bin new file mode 100644 index 00000000..54b4daf6 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock20_1.1.xml.bin @@ -0,0 +1,117 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + ddt + 1.7.0 + Data-Driven/Decorated Tests + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/group-deps_lock20_1.2.json.bin b/tests/_data/snapshots/poetry/group-deps_lock20_1.2.json.bin new file mode 100644 index 00000000..c38d1503 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock20_1.2.json.bin @@ -0,0 +1,210 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "ddt@1.7.0", + "description": "Data-Driven/Decorated Tests", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz" + } + ], + "name": "ddt", + "purl": "pkg:pypi/ddt@1.7.0", + "type": "library", + "version": "1.7.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "ddt@1.7.0" + }, + { + "dependsOn": [ + "ddt@1.7.0", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/group-deps_lock20_1.2.xml.bin b/tests/_data/snapshots/poetry/group-deps_lock20_1.2.xml.bin new file mode 100644 index 00000000..f10cb0d6 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock20_1.2.xml.bin @@ -0,0 +1,157 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + ddt + 1.7.0 + Data-Driven/Decorated Tests + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/group-deps_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/group-deps_lock20_1.3.json.bin new file mode 100644 index 00000000..1788c354 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock20_1.3.json.bin @@ -0,0 +1,318 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "ddt@1.7.0", + "description": "Data-Driven/Decorated Tests", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz" + } + ], + "name": "ddt", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/ddt@1.7.0", + "type": "library", + "version": "1.7.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "groupB" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "ddt@1.7.0" + }, + { + "dependsOn": [ + "ddt@1.7.0", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/group-deps_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/group-deps_lock20_1.3.xml.bin new file mode 100644 index 00000000..329d1719 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock20_1.3.xml.bin @@ -0,0 +1,211 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + ddt + 1.7.0 + Data-Driven/Decorated Tests + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl + from legacy-api + + a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114 + + + + https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz + from legacy-api + + d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df + + + + + dev + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + groupB + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/group-deps_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/group-deps_lock20_1.4.json.bin new file mode 100644 index 00000000..ddcaaea4 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock20_1.4.json.bin @@ -0,0 +1,314 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "ddt@1.7.0", + "description": "Data-Driven/Decorated Tests", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz" + } + ], + "name": "ddt", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/ddt@1.7.0", + "type": "library", + "version": "1.7.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "groupB" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "ddt@1.7.0" + }, + { + "dependsOn": [ + "ddt@1.7.0", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/group-deps_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/group-deps_lock20_1.4.xml.bin new file mode 100644 index 00000000..466dab8f --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock20_1.4.xml.bin @@ -0,0 +1,238 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + ddt + 1.7.0 + Data-Driven/Decorated Tests + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl + from legacy-api + + a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114 + + + + https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz + from legacy-api + + d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df + + + + + dev + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + groupB + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/group-deps_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/group-deps_lock20_1.5.json.bin new file mode 100644 index 00000000..275831e7 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock20_1.5.json.bin @@ -0,0 +1,314 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "ddt@1.7.0", + "description": "Data-Driven/Decorated Tests", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz" + } + ], + "name": "ddt", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/ddt@1.7.0", + "type": "library", + "version": "1.7.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "groupB" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "ddt@1.7.0" + }, + { + "dependsOn": [ + "ddt@1.7.0", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/group-deps_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/group-deps_lock20_1.5.xml.bin new file mode 100644 index 00000000..39623a12 --- /dev/null +++ b/tests/_data/snapshots/poetry/group-deps_lock20_1.5.xml.bin @@ -0,0 +1,238 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + ddt + 1.7.0 + Data-Driven/Decorated Tests + pkg:pypi/ddt@1.7.0 + + + https://pypi.org/simple/ddt/#ddt-1.7.0-py2.py3-none-any.whl + from legacy-api + + a0719acde99dd32767cff64e653ef99c01ad5b042ff265f2ebecd28796ffd114 + + + + https://pypi.org/simple/ddt/#ddt-1.7.0.tar.gz + from legacy-api + + d178d115abf25a1b8327e94f85a03ef09b1d7b0ca256f6203284b024f2fc70df + + + + + dev + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + groupB + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock10_1.0.xml.bin b/tests/_data/snapshots/poetry/local_lock10_1.0.xml.bin new file mode 100644 index 00000000..ba1579cb --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock10_1.0.xml.bin @@ -0,0 +1,17 @@ + + + + + package-a + 23.42 + some package A + false + + + package-b + 23.42 + some package B + false + + + diff --git a/tests/_data/snapshots/poetry/local_lock10_1.1.xml.bin b/tests/_data/snapshots/poetry/local_lock10_1.1.xml.bin new file mode 100644 index 00000000..1ad4c028 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock10_1.1.xml.bin @@ -0,0 +1,27 @@ + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock10_1.2.json.bin b/tests/_data/snapshots/poetry/local_lock10_1.2.json.bin new file mode 100644 index 00000000..d954129e --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock10_1.2.json.bin @@ -0,0 +1,72 @@ +{ + "components": [ + { + "bom-ref": "package-a@23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "from file", + "type": "distribution", + "url": "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b@23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "from file", + "type": "distribution", + "url": "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "dependsOn": [ + "package-a@23.42", + "package-b@23.42" + ], + "ref": "local" + }, + { + "ref": "package-a@23.42" + }, + { + "ref": "package-b@23.42" + } + ], + "metadata": { + "component": { + "bom-ref": "local", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/local_lock10_1.2.xml.bin b/tests/_data/snapshots/poetry/local_lock10_1.2.xml.bin new file mode 100644 index 00000000..6969edfd --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock10_1.2.xml.bin @@ -0,0 +1,54 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + local + 0.1.0 + packages from local paths + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock10_1.3.json.bin b/tests/_data/snapshots/poetry/local_lock10_1.3.json.bin new file mode 100644 index 00000000..24bb7ed6 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock10_1.3.json.bin @@ -0,0 +1,102 @@ +{ + "components": [ + { + "bom-ref": "package-a@23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b@23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "dependsOn": [ + "package-a@23.42", + "package-b@23.42" + ], + "ref": "local" + }, + { + "ref": "package-a@23.42" + }, + { + "ref": "package-b@23.42" + } + ], + "metadata": { + "component": { + "bom-ref": "local", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/local_lock10_1.3.xml.bin b/tests/_data/snapshots/poetry/local_lock10_1.3.xml.bin new file mode 100644 index 00000000..fa42bfa1 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock10_1.3.xml.bin @@ -0,0 +1,69 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + 3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592 + + + + + main + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + 4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602 + + + + + main + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock10_1.4.json.bin b/tests/_data/snapshots/poetry/local_lock10_1.4.json.bin new file mode 100644 index 00000000..eb087833 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock10_1.4.json.bin @@ -0,0 +1,98 @@ +{ + "components": [ + { + "bom-ref": "package-a@23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b@23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "dependsOn": [ + "package-a@23.42", + "package-b@23.42" + ], + "ref": "local" + }, + { + "ref": "package-a@23.42" + }, + { + "ref": "package-b@23.42" + } + ], + "metadata": { + "component": { + "bom-ref": "local", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/local_lock10_1.4.xml.bin b/tests/_data/snapshots/poetry/local_lock10_1.4.xml.bin new file mode 100644 index 00000000..c67240de --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock10_1.4.xml.bin @@ -0,0 +1,96 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + 3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592 + + + + + main + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + 4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602 + + + + + main + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock10_1.5.json.bin b/tests/_data/snapshots/poetry/local_lock10_1.5.json.bin new file mode 100644 index 00000000..7f3deba0 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock10_1.5.json.bin @@ -0,0 +1,98 @@ +{ + "components": [ + { + "bom-ref": "package-a@23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b@23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "dependsOn": [ + "package-a@23.42", + "package-b@23.42" + ], + "ref": "local" + }, + { + "ref": "package-a@23.42" + }, + { + "ref": "package-b@23.42" + } + ], + "metadata": { + "component": { + "bom-ref": "local", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/local_lock10_1.5.xml.bin b/tests/_data/snapshots/poetry/local_lock10_1.5.xml.bin new file mode 100644 index 00000000..7a494b2a --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock10_1.5.xml.bin @@ -0,0 +1,96 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + 3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592 + + + + + main + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + 4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602 + + + + + main + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock11_1.0.xml.bin b/tests/_data/snapshots/poetry/local_lock11_1.0.xml.bin new file mode 100644 index 00000000..13deb487 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock11_1.0.xml.bin @@ -0,0 +1,23 @@ + + + + + package-a + 23.42 + some package A + false + + + package-b + 23.42 + some package B + false + + + package-c + 23.42 + some package C + false + + + diff --git a/tests/_data/snapshots/poetry/local_lock11_1.1.xml.bin b/tests/_data/snapshots/poetry/local_lock11_1.1.xml.bin new file mode 100644 index 00000000..973910a9 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock11_1.1.xml.bin @@ -0,0 +1,38 @@ + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + + + + package-c + 23.42 + some package C + + + ../../../_helpers/local_pckages/c + from directory + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock11_1.2.json.bin b/tests/_data/snapshots/poetry/local_lock11_1.2.json.bin new file mode 100644 index 00000000..b7e0f77a --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock11_1.2.json.bin @@ -0,0 +1,90 @@ +{ + "components": [ + { + "bom-ref": "package-a@23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "from file", + "type": "distribution", + "url": "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b@23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "from file", + "type": "distribution", + "url": "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c@23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "from directory", + "type": "distribution", + "url": "../../../_helpers/local_pckages/c" + } + ], + "name": "package-c", + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "dependsOn": [ + "package-a@23.42", + "package-b@23.42", + "package-c@23.42" + ], + "ref": "local" + }, + { + "ref": "package-a@23.42" + }, + { + "ref": "package-b@23.42" + }, + { + "ref": "package-c@23.42" + } + ], + "metadata": { + "component": { + "bom-ref": "local", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/local_lock11_1.2.xml.bin b/tests/_data/snapshots/poetry/local_lock11_1.2.xml.bin new file mode 100644 index 00000000..afbd5901 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock11_1.2.xml.bin @@ -0,0 +1,67 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + local + 0.1.0 + packages from local paths + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + + + + package-c + 23.42 + some package C + + + ../../../_helpers/local_pckages/c + from directory + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock11_1.3.json.bin b/tests/_data/snapshots/poetry/local_lock11_1.3.json.bin new file mode 100644 index 00000000..c2131420 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock11_1.3.json.bin @@ -0,0 +1,126 @@ +{ + "components": [ + { + "bom-ref": "package-a@23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b@23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c@23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "from directory", + "type": "distribution", + "url": "../../../_helpers/local_pckages/c" + } + ], + "name": "package-c", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "dependsOn": [ + "package-a@23.42", + "package-b@23.42", + "package-c@23.42" + ], + "ref": "local" + }, + { + "ref": "package-a@23.42" + }, + { + "ref": "package-b@23.42" + }, + { + "ref": "package-c@23.42" + } + ], + "metadata": { + "component": { + "bom-ref": "local", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/local_lock11_1.3.xml.bin b/tests/_data/snapshots/poetry/local_lock11_1.3.xml.bin new file mode 100644 index 00000000..a5b780c9 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock11_1.3.xml.bin @@ -0,0 +1,85 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + 3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592 + + + + + main + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + 4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602 + + + + + main + + + + package-c + 23.42 + some package C + + + ../../../_helpers/local_pckages/c + from directory + + + + main + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock11_1.4.json.bin b/tests/_data/snapshots/poetry/local_lock11_1.4.json.bin new file mode 100644 index 00000000..2b7e6452 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock11_1.4.json.bin @@ -0,0 +1,122 @@ +{ + "components": [ + { + "bom-ref": "package-a@23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b@23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c@23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "from directory", + "type": "distribution", + "url": "../../../_helpers/local_pckages/c" + } + ], + "name": "package-c", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "dependsOn": [ + "package-a@23.42", + "package-b@23.42", + "package-c@23.42" + ], + "ref": "local" + }, + { + "ref": "package-a@23.42" + }, + { + "ref": "package-b@23.42" + }, + { + "ref": "package-c@23.42" + } + ], + "metadata": { + "component": { + "bom-ref": "local", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/local_lock11_1.4.xml.bin b/tests/_data/snapshots/poetry/local_lock11_1.4.xml.bin new file mode 100644 index 00000000..b8e940d9 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock11_1.4.xml.bin @@ -0,0 +1,112 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + 3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592 + + + + + main + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + 4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602 + + + + + main + + + + package-c + 23.42 + some package C + + + ../../../_helpers/local_pckages/c + from directory + + + + main + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock11_1.5.json.bin b/tests/_data/snapshots/poetry/local_lock11_1.5.json.bin new file mode 100644 index 00000000..0a0a832e --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock11_1.5.json.bin @@ -0,0 +1,122 @@ +{ + "components": [ + { + "bom-ref": "package-a@23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b@23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c@23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "from directory", + "type": "distribution", + "url": "../../../_helpers/local_pckages/c" + } + ], + "name": "package-c", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "dependsOn": [ + "package-a@23.42", + "package-b@23.42", + "package-c@23.42" + ], + "ref": "local" + }, + { + "ref": "package-a@23.42" + }, + { + "ref": "package-b@23.42" + }, + { + "ref": "package-c@23.42" + } + ], + "metadata": { + "component": { + "bom-ref": "local", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/local_lock11_1.5.xml.bin b/tests/_data/snapshots/poetry/local_lock11_1.5.xml.bin new file mode 100644 index 00000000..f8d20acc --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock11_1.5.xml.bin @@ -0,0 +1,112 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + 3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592 + + + + + main + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + 4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602 + + + + + main + + + + package-c + 23.42 + some package C + + + ../../../_helpers/local_pckages/c + from directory + + + + main + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock20_1.0.xml.bin b/tests/_data/snapshots/poetry/local_lock20_1.0.xml.bin new file mode 100644 index 00000000..13deb487 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock20_1.0.xml.bin @@ -0,0 +1,23 @@ + + + + + package-a + 23.42 + some package A + false + + + package-b + 23.42 + some package B + false + + + package-c + 23.42 + some package C + false + + + diff --git a/tests/_data/snapshots/poetry/local_lock20_1.1.xml.bin b/tests/_data/snapshots/poetry/local_lock20_1.1.xml.bin new file mode 100644 index 00000000..973910a9 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock20_1.1.xml.bin @@ -0,0 +1,38 @@ + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + + + + package-c + 23.42 + some package C + + + ../../../_helpers/local_pckages/c + from directory + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock20_1.2.json.bin b/tests/_data/snapshots/poetry/local_lock20_1.2.json.bin new file mode 100644 index 00000000..b7e0f77a --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock20_1.2.json.bin @@ -0,0 +1,90 @@ +{ + "components": [ + { + "bom-ref": "package-a@23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "from file", + "type": "distribution", + "url": "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b@23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "from file", + "type": "distribution", + "url": "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c@23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "from directory", + "type": "distribution", + "url": "../../../_helpers/local_pckages/c" + } + ], + "name": "package-c", + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "dependsOn": [ + "package-a@23.42", + "package-b@23.42", + "package-c@23.42" + ], + "ref": "local" + }, + { + "ref": "package-a@23.42" + }, + { + "ref": "package-b@23.42" + }, + { + "ref": "package-c@23.42" + } + ], + "metadata": { + "component": { + "bom-ref": "local", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/local_lock20_1.2.xml.bin b/tests/_data/snapshots/poetry/local_lock20_1.2.xml.bin new file mode 100644 index 00000000..afbd5901 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock20_1.2.xml.bin @@ -0,0 +1,67 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + local + 0.1.0 + packages from local paths + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + + + + package-c + 23.42 + some package C + + + ../../../_helpers/local_pckages/c + from directory + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/local_lock20_1.3.json.bin new file mode 100644 index 00000000..c2131420 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock20_1.3.json.bin @@ -0,0 +1,126 @@ +{ + "components": [ + { + "bom-ref": "package-a@23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b@23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c@23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "from directory", + "type": "distribution", + "url": "../../../_helpers/local_pckages/c" + } + ], + "name": "package-c", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "dependsOn": [ + "package-a@23.42", + "package-b@23.42", + "package-c@23.42" + ], + "ref": "local" + }, + { + "ref": "package-a@23.42" + }, + { + "ref": "package-b@23.42" + }, + { + "ref": "package-c@23.42" + } + ], + "metadata": { + "component": { + "bom-ref": "local", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/local_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/local_lock20_1.3.xml.bin new file mode 100644 index 00000000..a5b780c9 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock20_1.3.xml.bin @@ -0,0 +1,85 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + 3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592 + + + + + main + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + 4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602 + + + + + main + + + + package-c + 23.42 + some package C + + + ../../../_helpers/local_pckages/c + from directory + + + + main + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/local_lock20_1.4.json.bin new file mode 100644 index 00000000..2b7e6452 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock20_1.4.json.bin @@ -0,0 +1,122 @@ +{ + "components": [ + { + "bom-ref": "package-a@23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b@23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c@23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "from directory", + "type": "distribution", + "url": "../../../_helpers/local_pckages/c" + } + ], + "name": "package-c", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "dependsOn": [ + "package-a@23.42", + "package-b@23.42", + "package-c@23.42" + ], + "ref": "local" + }, + { + "ref": "package-a@23.42" + }, + { + "ref": "package-b@23.42" + }, + { + "ref": "package-c@23.42" + } + ], + "metadata": { + "component": { + "bom-ref": "local", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/local_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/local_lock20_1.4.xml.bin new file mode 100644 index 00000000..b8e940d9 --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock20_1.4.xml.bin @@ -0,0 +1,112 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + 3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592 + + + + + main + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + 4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602 + + + + + main + + + + package-c + 23.42 + some package C + + + ../../../_helpers/local_pckages/c + from directory + + + + main + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/local_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/local_lock20_1.5.json.bin new file mode 100644 index 00000000..0a0a832e --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock20_1.5.json.bin @@ -0,0 +1,122 @@ +{ + "components": [ + { + "bom-ref": "package-a@23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz" + } + ], + "name": "package-a", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b@23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "from file", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602" + } + ], + "type": "distribution", + "url": "../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "name": "package-b", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c@23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "from directory", + "type": "distribution", + "url": "../../../_helpers/local_pckages/c" + } + ], + "name": "package-c", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "dependsOn": [ + "package-a@23.42", + "package-b@23.42", + "package-c@23.42" + ], + "ref": "local" + }, + { + "ref": "package-a@23.42" + }, + { + "ref": "package-b@23.42" + }, + { + "ref": "package-c@23.42" + } + ], + "metadata": { + "component": { + "bom-ref": "local", + "description": "packages from local paths", + "name": "local", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/local_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/local_lock20_1.5.xml.bin new file mode 100644 index 00000000..f8d20acc --- /dev/null +++ b/tests/_data/snapshots/poetry/local_lock20_1.5.xml.bin @@ -0,0 +1,112 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + local + 0.1.0 + packages from local paths + + + true + + + + + package-a + 23.42 + some package A + + + ../../../_helpers/local_pckages/a/dist/package-a-23.42.tar.gz + from file + + 3869fe3f4a6cca5b203b2e2cd8858c834f651e1b0fa76d5c0232e36472199592 + + + + + main + + + + package-b + 23.42 + some package B + + + ../../../_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + from file + + 4aacda53fa274f5ff7eed71a9916904ffb3a11b05dc5ca529d7ddb78ae2dc602 + + + + + main + + + + package-c + 23.42 + some package C + + + ../../../_helpers/local_pckages/c + from directory + + + + main + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock10_1.0.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.0.xml.bin new file mode 100644 index 00000000..09a1966e --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.0.xml.bin @@ -0,0 +1,54 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + false + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + false + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + false + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + false + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + false + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock10_1.1.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.1.xml.bin new file mode 100644 index 00000000..db75f11e --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.1.xml.bin @@ -0,0 +1,87 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock10_1.2.json.bin b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.2.json.bin new file mode 100644 index 00000000..18bd3d78 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.2.json.bin @@ -0,0 +1,174 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "main-and-dev" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "main-and-dev", + "description": "main and dev depenndencies", + "name": "main-and-dev", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock10_1.2.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.2.xml.bin new file mode 100644 index 00000000..828f87d4 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.2.xml.bin @@ -0,0 +1,127 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + main-and-dev + 0.1.0 + main and dev depenndencies + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock10_1.3.json.bin b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.3.json.bin new file mode 100644 index 00000000..d739394d --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.3.json.bin @@ -0,0 +1,270 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "main-and-dev" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "main-and-dev", + "description": "main and dev depenndencies", + "name": "main-and-dev", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock10_1.3.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.3.xml.bin new file mode 100644 index 00000000..58185519 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.3.xml.bin @@ -0,0 +1,175 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + main-and-dev + 0.1.0 + main and dev depenndencies + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + dev + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + dev + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + dev + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock10_1.4.json.bin b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.4.json.bin new file mode 100644 index 00000000..743b82d3 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.4.json.bin @@ -0,0 +1,266 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "main-and-dev" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "main-and-dev", + "description": "main and dev depenndencies", + "name": "main-and-dev", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock10_1.4.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.4.xml.bin new file mode 100644 index 00000000..881953d3 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.4.xml.bin @@ -0,0 +1,202 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + main-and-dev + 0.1.0 + main and dev depenndencies + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + dev + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + dev + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + dev + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock10_1.5.json.bin b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.5.json.bin new file mode 100644 index 00000000..5b288776 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.5.json.bin @@ -0,0 +1,266 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "main-and-dev" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "main-and-dev", + "description": "main and dev depenndencies", + "name": "main-and-dev", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock10_1.5.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.5.xml.bin new file mode 100644 index 00000000..469f4989 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock10_1.5.xml.bin @@ -0,0 +1,202 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + main-and-dev + 0.1.0 + main and dev depenndencies + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + dev + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + dev + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + dev + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock11_1.0.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.0.xml.bin new file mode 100644 index 00000000..09a1966e --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.0.xml.bin @@ -0,0 +1,54 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + false + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + false + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + false + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + false + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + false + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock11_1.1.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.1.xml.bin new file mode 100644 index 00000000..49274208 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.1.xml.bin @@ -0,0 +1,117 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock11_1.2.json.bin b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.2.json.bin new file mode 100644 index 00000000..f5070a62 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.2.json.bin @@ -0,0 +1,210 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "main-and-dev" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "main-and-dev", + "description": "main and dev depenndencies", + "name": "main-and-dev", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock11_1.2.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.2.xml.bin new file mode 100644 index 00000000..2283fa1e --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.2.xml.bin @@ -0,0 +1,157 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + main-and-dev + 0.1.0 + main and dev depenndencies + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock11_1.3.json.bin b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.3.json.bin new file mode 100644 index 00000000..0cdad807 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.3.json.bin @@ -0,0 +1,342 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "main-and-dev" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "main-and-dev", + "description": "main and dev depenndencies", + "name": "main-and-dev", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock11_1.3.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.3.xml.bin new file mode 100644 index 00000000..fe208c82 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.3.xml.bin @@ -0,0 +1,223 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + main-and-dev + 0.1.0 + main and dev depenndencies + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + dev + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + dev + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock11_1.4.json.bin b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.4.json.bin new file mode 100644 index 00000000..44cfe868 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.4.json.bin @@ -0,0 +1,338 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "main-and-dev" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "main-and-dev", + "description": "main and dev depenndencies", + "name": "main-and-dev", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock11_1.4.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.4.xml.bin new file mode 100644 index 00000000..398ee4cf --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.4.xml.bin @@ -0,0 +1,250 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + main-and-dev + 0.1.0 + main and dev depenndencies + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + dev + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + dev + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock11_1.5.json.bin b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.5.json.bin new file mode 100644 index 00000000..2544d863 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.5.json.bin @@ -0,0 +1,338 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "main-and-dev" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "main-and-dev", + "description": "main and dev depenndencies", + "name": "main-and-dev", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock11_1.5.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.5.xml.bin new file mode 100644 index 00000000..42fb3d7d --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock11_1.5.xml.bin @@ -0,0 +1,250 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + main-and-dev + 0.1.0 + main and dev depenndencies + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + dev + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + dev + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock20_1.0.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.0.xml.bin new file mode 100644 index 00000000..09a1966e --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.0.xml.bin @@ -0,0 +1,54 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + false + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + false + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + false + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + false + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + false + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock20_1.1.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.1.xml.bin new file mode 100644 index 00000000..49274208 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.1.xml.bin @@ -0,0 +1,117 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock20_1.2.json.bin b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.2.json.bin new file mode 100644 index 00000000..f5070a62 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.2.json.bin @@ -0,0 +1,210 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "main-and-dev" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "main-and-dev", + "description": "main and dev depenndencies", + "name": "main-and-dev", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock20_1.2.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.2.xml.bin new file mode 100644 index 00000000..2283fa1e --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.2.xml.bin @@ -0,0 +1,157 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + main-and-dev + 0.1.0 + main and dev depenndencies + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.3.json.bin new file mode 100644 index 00000000..df5a5cca --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.3.json.bin @@ -0,0 +1,318 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "main-and-dev" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "main-and-dev", + "description": "main and dev depenndencies", + "name": "main-and-dev", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.3.xml.bin new file mode 100644 index 00000000..c487f600 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.3.xml.bin @@ -0,0 +1,211 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + main-and-dev + 0.1.0 + main and dev depenndencies + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.4.json.bin new file mode 100644 index 00000000..64905c9f --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.4.json.bin @@ -0,0 +1,314 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "main-and-dev" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "main-and-dev", + "description": "main and dev depenndencies", + "name": "main-and-dev", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.4.xml.bin new file mode 100644 index 00000000..4a30b994 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.4.xml.bin @@ -0,0 +1,238 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + main-and-dev + 0.1.0 + main and dev depenndencies + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.5.json.bin new file mode 100644 index 00000000..f6c1cd2f --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.5.json.bin @@ -0,0 +1,314 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "main-and-dev" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "main-and-dev", + "description": "main and dev depenndencies", + "name": "main-and-dev", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/main-and-dev_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.5.xml.bin new file mode 100644 index 00000000..6c156072 --- /dev/null +++ b/tests/_data/snapshots/poetry/main-and-dev_lock20_1.5.xml.bin @@ -0,0 +1,238 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + main-and-dev + 0.1.0 + main and dev depenndencies + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/no-deps_lock20_1.0.xml.bin b/tests/_data/snapshots/poetry/no-deps_lock20_1.0.xml.bin new file mode 100644 index 00000000..acb06612 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-deps_lock20_1.0.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/poetry/no-deps_lock20_1.1.xml.bin b/tests/_data/snapshots/poetry/no-deps_lock20_1.1.xml.bin new file mode 100644 index 00000000..640f73ff --- /dev/null +++ b/tests/_data/snapshots/poetry/no-deps_lock20_1.1.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/poetry/no-deps_lock20_1.2.json.bin b/tests/_data/snapshots/poetry/no-deps_lock20_1.2.json.bin new file mode 100644 index 00000000..9a294beb --- /dev/null +++ b/tests/_data/snapshots/poetry/no-deps_lock20_1.2.json.bin @@ -0,0 +1,69 @@ +{ + "dependencies": [ + { + "ref": "no-deps" + } + ], + "metadata": { + "component": { + "bom-ref": "no-deps", + "description": "packages with all meta, but no deps", + "externalReferences": [ + { + "comment": "from poetry: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from poetry url: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from poetry url: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from poetry url: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from poetry: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from poetry: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "no-deps", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/no-deps_lock20_1.2.xml.bin b/tests/_data/snapshots/poetry/no-deps_lock20_1.2.xml.bin new file mode 100644 index 00000000..cfe88429 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-deps_lock20_1.2.xml.bin @@ -0,0 +1,54 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + no-deps + 0.1.0 + packages with all meta, but no deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from poetry: documentation + + + https://oss.acme.org/my-project/bugs/ + from poetry url: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from poetry url: Funding + + + https://oss.acme.org/my-project/changelog/ + from poetry url: Change log + + + https://oss.acme.org/my-project.git + from poetry: repository + + + https://oss.acme.org/my-project/ + from poetry: homepage + + + + + + + + diff --git a/tests/_data/snapshots/poetry/no-deps_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/no-deps_lock20_1.3.json.bin new file mode 100644 index 00000000..ab0aff6c --- /dev/null +++ b/tests/_data/snapshots/poetry/no-deps_lock20_1.3.json.bin @@ -0,0 +1,75 @@ +{ + "dependencies": [ + { + "ref": "no-deps" + } + ], + "metadata": { + "component": { + "bom-ref": "no-deps", + "description": "packages with all meta, but no deps", + "externalReferences": [ + { + "comment": "from poetry: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from poetry url: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from poetry url: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from poetry url: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from poetry: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from poetry: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "no-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/no-deps_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/no-deps_lock20_1.3.xml.bin new file mode 100644 index 00000000..e02223d7 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-deps_lock20_1.3.xml.bin @@ -0,0 +1,57 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + no-deps + 0.1.0 + packages with all meta, but no deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from poetry: documentation + + + https://oss.acme.org/my-project/bugs/ + from poetry url: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from poetry url: Funding + + + https://oss.acme.org/my-project/changelog/ + from poetry url: Change log + + + https://oss.acme.org/my-project.git + from poetry: repository + + + https://oss.acme.org/my-project/ + from poetry: homepage + + + + + true + + + + + + diff --git a/tests/_data/snapshots/poetry/no-deps_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/no-deps_lock20_1.4.json.bin new file mode 100644 index 00000000..24180782 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-deps_lock20_1.4.json.bin @@ -0,0 +1,71 @@ +{ + "dependencies": [ + { + "ref": "no-deps" + } + ], + "metadata": { + "component": { + "bom-ref": "no-deps", + "description": "packages with all meta, but no deps", + "externalReferences": [ + { + "comment": "from poetry: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from poetry url: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from poetry url: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from poetry url: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from poetry: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from poetry: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "no-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/no-deps_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/no-deps_lock20_1.4.xml.bin new file mode 100644 index 00000000..4da28db5 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-deps_lock20_1.4.xml.bin @@ -0,0 +1,84 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + no-deps + 0.1.0 + packages with all meta, but no deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from poetry: documentation + + + https://oss.acme.org/my-project/bugs/ + from poetry url: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from poetry url: Funding + + + https://oss.acme.org/my-project/changelog/ + from poetry url: Change log + + + https://oss.acme.org/my-project.git + from poetry: repository + + + https://oss.acme.org/my-project/ + from poetry: homepage + + + + + true + + + + + + diff --git a/tests/_data/snapshots/poetry/no-deps_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/no-deps_lock20_1.5.json.bin new file mode 100644 index 00000000..4e765a34 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-deps_lock20_1.5.json.bin @@ -0,0 +1,71 @@ +{ + "dependencies": [ + { + "ref": "no-deps" + } + ], + "metadata": { + "component": { + "bom-ref": "no-deps", + "description": "packages with all meta, but no deps", + "externalReferences": [ + { + "comment": "from poetry: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from poetry url: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from poetry url: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from poetry url: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from poetry: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from poetry: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "no-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/no-deps_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/no-deps_lock20_1.5.xml.bin new file mode 100644 index 00000000..d329d28f --- /dev/null +++ b/tests/_data/snapshots/poetry/no-deps_lock20_1.5.xml.bin @@ -0,0 +1,84 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + no-deps + 0.1.0 + packages with all meta, but no deps + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from poetry: documentation + + + https://oss.acme.org/my-project/bugs/ + from poetry url: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from poetry url: Funding + + + https://oss.acme.org/my-project/changelog/ + from poetry url: Change log + + + https://oss.acme.org/my-project.git + from poetry: repository + + + https://oss.acme.org/my-project/ + from poetry: homepage + + + + + true + + + + + + diff --git a/tests/_data/snapshots/poetry/no-dev_lock11_1.0.xml.bin b/tests/_data/snapshots/poetry/no-dev_lock11_1.0.xml.bin new file mode 100644 index 00000000..2316393a --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock11_1.0.xml.bin @@ -0,0 +1,12 @@ + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + false + + + diff --git a/tests/_data/snapshots/poetry/no-dev_lock11_1.1.xml.bin b/tests/_data/snapshots/poetry/no-dev_lock11_1.1.xml.bin new file mode 100644 index 00000000..bbbd21b3 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock11_1.1.xml.bin @@ -0,0 +1,21 @@ + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/no-dev_lock11_1.2.json.bin b/tests/_data/snapshots/poetry/no-dev_lock11_1.2.json.bin new file mode 100644 index 00000000..c4ed24b7 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock11_1.2.json.bin @@ -0,0 +1,60 @@ +{ + "components": [ + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "ref": "toml@0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/no-dev_lock11_1.2.xml.bin b/tests/_data/snapshots/poetry/no-dev_lock11_1.2.xml.bin new file mode 100644 index 00000000..50e031a6 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock11_1.2.xml.bin @@ -0,0 +1,46 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/no-dev_lock11_1.3.json.bin b/tests/_data/snapshots/poetry/no-dev_lock11_1.3.json.bin new file mode 100644 index 00000000..ab8c21a2 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock11_1.3.json.bin @@ -0,0 +1,84 @@ +{ + "components": [ + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "ref": "toml@0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/no-dev_lock11_1.3.xml.bin b/tests/_data/snapshots/poetry/no-dev_lock11_1.3.xml.bin new file mode 100644 index 00000000..546a4a19 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock11_1.3.xml.bin @@ -0,0 +1,58 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/no-dev_lock11_1.4.json.bin b/tests/_data/snapshots/poetry/no-dev_lock11_1.4.json.bin new file mode 100644 index 00000000..35e48f2f --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock11_1.4.json.bin @@ -0,0 +1,80 @@ +{ + "components": [ + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "ref": "toml@0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/no-dev_lock11_1.4.xml.bin b/tests/_data/snapshots/poetry/no-dev_lock11_1.4.xml.bin new file mode 100644 index 00000000..888872f2 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock11_1.4.xml.bin @@ -0,0 +1,85 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/no-dev_lock11_1.5.json.bin b/tests/_data/snapshots/poetry/no-dev_lock11_1.5.json.bin new file mode 100644 index 00000000..3a00590e --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock11_1.5.json.bin @@ -0,0 +1,80 @@ +{ + "components": [ + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "ref": "toml@0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/no-dev_lock11_1.5.xml.bin b/tests/_data/snapshots/poetry/no-dev_lock11_1.5.xml.bin new file mode 100644 index 00000000..7c578aee --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock11_1.5.xml.bin @@ -0,0 +1,85 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/no-dev_lock20_1.0.xml.bin b/tests/_data/snapshots/poetry/no-dev_lock20_1.0.xml.bin new file mode 100644 index 00000000..2316393a --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock20_1.0.xml.bin @@ -0,0 +1,12 @@ + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + false + + + diff --git a/tests/_data/snapshots/poetry/no-dev_lock20_1.1.xml.bin b/tests/_data/snapshots/poetry/no-dev_lock20_1.1.xml.bin new file mode 100644 index 00000000..bbbd21b3 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock20_1.1.xml.bin @@ -0,0 +1,21 @@ + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/no-dev_lock20_1.2.json.bin b/tests/_data/snapshots/poetry/no-dev_lock20_1.2.json.bin new file mode 100644 index 00000000..c4ed24b7 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock20_1.2.json.bin @@ -0,0 +1,60 @@ +{ + "components": [ + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "ref": "toml@0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/no-dev_lock20_1.2.xml.bin b/tests/_data/snapshots/poetry/no-dev_lock20_1.2.xml.bin new file mode 100644 index 00000000..50e031a6 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock20_1.2.xml.bin @@ -0,0 +1,46 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/no-dev_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/no-dev_lock20_1.3.json.bin new file mode 100644 index 00000000..ab8c21a2 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock20_1.3.json.bin @@ -0,0 +1,84 @@ +{ + "components": [ + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "ref": "toml@0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/no-dev_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/no-dev_lock20_1.3.xml.bin new file mode 100644 index 00000000..546a4a19 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock20_1.3.xml.bin @@ -0,0 +1,58 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/no-dev_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/no-dev_lock20_1.4.json.bin new file mode 100644 index 00000000..35e48f2f --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock20_1.4.json.bin @@ -0,0 +1,80 @@ +{ + "components": [ + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "ref": "toml@0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/no-dev_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/no-dev_lock20_1.4.xml.bin new file mode 100644 index 00000000..888872f2 --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock20_1.4.xml.bin @@ -0,0 +1,85 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/no-dev_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/no-dev_lock20_1.5.json.bin new file mode 100644 index 00000000..3a00590e --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock20_1.5.json.bin @@ -0,0 +1,80 @@ +{ + "components": [ + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "dependsOn": [ + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "ref": "toml@0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/no-dev_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/no-dev_lock20_1.5.xml.bin new file mode 100644 index 00000000..7c578aee --- /dev/null +++ b/tests/_data/snapshots/poetry/no-dev_lock20_1.5.xml.bin @@ -0,0 +1,85 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/only-groups_lock11_1.0.xml.bin b/tests/_data/snapshots/poetry/only-groups_lock11_1.0.xml.bin new file mode 100644 index 00000000..d5ac3ec7 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock11_1.0.xml.bin @@ -0,0 +1,40 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + false + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + false + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + false + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + diff --git a/tests/_data/snapshots/poetry/only-groups_lock11_1.1.xml.bin b/tests/_data/snapshots/poetry/only-groups_lock11_1.1.xml.bin new file mode 100644 index 00000000..afc1ad79 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock11_1.1.xml.bin @@ -0,0 +1,85 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/only-groups_lock11_1.2.json.bin b/tests/_data/snapshots/poetry/only-groups_lock11_1.2.json.bin new file mode 100644 index 00000000..cb8be747 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock11_1.2.json.bin @@ -0,0 +1,162 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "dependsOn": [ + "isoduration@20.11.0" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/only-groups_lock11_1.2.xml.bin b/tests/_data/snapshots/poetry/only-groups_lock11_1.2.xml.bin new file mode 100644 index 00000000..6f6fc213 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock11_1.2.xml.bin @@ -0,0 +1,121 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/only-groups_lock11_1.3.json.bin b/tests/_data/snapshots/poetry/only-groups_lock11_1.3.json.bin new file mode 100644 index 00000000..3ba3db46 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock11_1.3.json.bin @@ -0,0 +1,262 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + }, + { + "name": "cdx:poetry:group", + "value": "groupB" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "dependsOn": [ + "isoduration@20.11.0" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/only-groups_lock11_1.3.xml.bin b/tests/_data/snapshots/poetry/only-groups_lock11_1.3.xml.bin new file mode 100644 index 00000000..b756a06a --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock11_1.3.xml.bin @@ -0,0 +1,170 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + dev + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + groupB + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + dev + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/only-groups_lock11_1.4.json.bin b/tests/_data/snapshots/poetry/only-groups_lock11_1.4.json.bin new file mode 100644 index 00000000..bf42ec21 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock11_1.4.json.bin @@ -0,0 +1,258 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + }, + { + "name": "cdx:poetry:group", + "value": "groupB" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "dependsOn": [ + "isoduration@20.11.0" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/only-groups_lock11_1.4.xml.bin b/tests/_data/snapshots/poetry/only-groups_lock11_1.4.xml.bin new file mode 100644 index 00000000..3b4ed18c --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock11_1.4.xml.bin @@ -0,0 +1,197 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + dev + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + groupB + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + dev + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/only-groups_lock11_1.5.json.bin b/tests/_data/snapshots/poetry/only-groups_lock11_1.5.json.bin new file mode 100644 index 00000000..54a4bf3e --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock11_1.5.json.bin @@ -0,0 +1,258 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + }, + { + "name": "cdx:poetry:group", + "value": "groupB" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "dependsOn": [ + "isoduration@20.11.0" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/only-groups_lock11_1.5.xml.bin b/tests/_data/snapshots/poetry/only-groups_lock11_1.5.xml.bin new file mode 100644 index 00000000..c6402307 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock11_1.5.xml.bin @@ -0,0 +1,197 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + dev + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + groupB + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + dev + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/only-groups_lock20_1.0.xml.bin b/tests/_data/snapshots/poetry/only-groups_lock20_1.0.xml.bin new file mode 100644 index 00000000..d5ac3ec7 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock20_1.0.xml.bin @@ -0,0 +1,40 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + false + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + false + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + false + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + diff --git a/tests/_data/snapshots/poetry/only-groups_lock20_1.1.xml.bin b/tests/_data/snapshots/poetry/only-groups_lock20_1.1.xml.bin new file mode 100644 index 00000000..afc1ad79 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock20_1.1.xml.bin @@ -0,0 +1,85 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/only-groups_lock20_1.2.json.bin b/tests/_data/snapshots/poetry/only-groups_lock20_1.2.json.bin new file mode 100644 index 00000000..cb8be747 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock20_1.2.json.bin @@ -0,0 +1,162 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "dependsOn": [ + "isoduration@20.11.0" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/only-groups_lock20_1.2.xml.bin b/tests/_data/snapshots/poetry/only-groups_lock20_1.2.xml.bin new file mode 100644 index 00000000..6f6fc213 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock20_1.2.xml.bin @@ -0,0 +1,121 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/only-groups_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/only-groups_lock20_1.3.json.bin new file mode 100644 index 00000000..3200fa58 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock20_1.3.json.bin @@ -0,0 +1,234 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "groupB" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "dependsOn": [ + "isoduration@20.11.0" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/only-groups_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/only-groups_lock20_1.3.xml.bin new file mode 100644 index 00000000..7e74e040 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock20_1.3.xml.bin @@ -0,0 +1,157 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + groupB + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/only-groups_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/only-groups_lock20_1.4.json.bin new file mode 100644 index 00000000..576d18ad --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock20_1.4.json.bin @@ -0,0 +1,230 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "groupB" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "dependsOn": [ + "isoduration@20.11.0" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/only-groups_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/only-groups_lock20_1.4.xml.bin new file mode 100644 index 00000000..77e8944b --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock20_1.4.xml.bin @@ -0,0 +1,184 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + groupB + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/only-groups_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/only-groups_lock20_1.5.json.bin new file mode 100644 index 00000000..9b387f20 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock20_1.5.json.bin @@ -0,0 +1,230 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "groupB" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "dependsOn": [ + "isoduration@20.11.0" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/only-groups_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/only-groups_lock20_1.5.xml.bin new file mode 100644 index 00000000..301cba77 --- /dev/null +++ b/tests/_data/snapshots/poetry/only-groups_lock20_1.5.xml.bin @@ -0,0 +1,184 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + groupB + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock10_1.0.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock10_1.0.xml.bin new file mode 100644 index 00000000..839a6717 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock10_1.0.xml.bin @@ -0,0 +1,19 @@ + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + false + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + false + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock10_1.1.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock10_1.1.xml.bin new file mode 100644 index 00000000..e5bde160 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock10_1.1.xml.bin @@ -0,0 +1,37 @@ + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock10_1.2.json.bin b/tests/_data/snapshots/poetry/private-packges_lock10_1.2.json.bin new file mode 100644 index 00000000..8d742ad5 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock10_1.2.json.bin @@ -0,0 +1,84 @@ +{ + "components": [ + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "toml@0.10.2" + ], + "ref": "private-packges" + }, + { + "ref": "toml@0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "private-packges", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/private-packges_lock10_1.2.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock10_1.2.xml.bin new file mode 100644 index 00000000..346d9e2b --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock10_1.2.xml.bin @@ -0,0 +1,64 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock10_1.3.json.bin b/tests/_data/snapshots/poetry/private-packges_lock10_1.3.json.bin new file mode 100644 index 00000000..c9dd9774 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock10_1.3.json.bin @@ -0,0 +1,126 @@ +{ + "components": [ + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "toml@0.10.2" + ], + "ref": "private-packges" + }, + { + "ref": "toml@0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "private-packges", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/private-packges_lock10_1.3.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock10_1.3.xml.bin new file mode 100644 index 00000000..5a14f0aa --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock10_1.3.xml.bin @@ -0,0 +1,85 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + true + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock10_1.4.json.bin b/tests/_data/snapshots/poetry/private-packges_lock10_1.4.json.bin new file mode 100644 index 00000000..c48c39c8 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock10_1.4.json.bin @@ -0,0 +1,122 @@ +{ + "components": [ + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "toml@0.10.2" + ], + "ref": "private-packges" + }, + { + "ref": "toml@0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "private-packges", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/private-packges_lock10_1.4.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock10_1.4.xml.bin new file mode 100644 index 00000000..ae4187ec --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock10_1.4.xml.bin @@ -0,0 +1,112 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + true + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock10_1.5.json.bin b/tests/_data/snapshots/poetry/private-packges_lock10_1.5.json.bin new file mode 100644 index 00000000..cdd0b94d --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock10_1.5.json.bin @@ -0,0 +1,122 @@ +{ + "components": [ + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + } + ], + "dependencies": [ + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "toml@0.10.2" + ], + "ref": "private-packges" + }, + { + "ref": "toml@0.10.2" + } + ], + "metadata": { + "component": { + "bom-ref": "private-packges", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/private-packges_lock10_1.5.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock10_1.5.xml.bin new file mode 100644 index 00000000..ff2b41d4 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock10_1.5.xml.bin @@ -0,0 +1,112 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + true + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock11_1.0.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock11_1.0.xml.bin new file mode 100644 index 00000000..19168963 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock11_1.0.xml.bin @@ -0,0 +1,68 @@ + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + false + + + importlib-metadata + 6.8.0 + Read metadata from Python packages + pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple + false + + + jax + 0.4.20 + Differentiate, compile, and transform Numpy code. + pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html + false + + + ml-dtypes + 0.3.1 + + pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple + false + + + numpy + 1.26.1 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple + false + + + opt-einsum + 3.3.0 + Optimizing numpys einsum function + pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple + false + + + scipy + 1.11.3 + Fundamental algorithms for scientific computing in Python + pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple + false + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + false + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple + false + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock11_1.1.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock11_1.1.xml.bin new file mode 100644 index 00000000..f21f1dab --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock11_1.1.xml.bin @@ -0,0 +1,421 @@ + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + importlib-metadata + 6.8.0 + Read metadata from Python packages + pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz + from legacy-api + + + + + jax + 0.4.20 + Differentiate, compile, and transform Numpy code. + pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl + from legacy-api + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz + from legacy-api + + + + + ml-dtypes + 0.3.1 + + pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz + from legacy-api + + + + + numpy + 1.26.1 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz + from legacy-api + + + + + opt-einsum + 3.3.0 + Optimizing numpys einsum function + pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz + from legacy-api + + + + + scipy + 1.11.3 + Fundamental algorithms for scientific computing in Python + pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock11_1.2.json.bin b/tests/_data/snapshots/poetry/private-packges_lock11_1.2.json.bin new file mode 100644 index 00000000..bfbb0ebc --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock11_1.2.json.bin @@ -0,0 +1,605 @@ +{ + "components": [ + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "importlib-metadata@6.8.0", + "description": "Read metadata from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz" + } + ], + "name": "importlib-metadata", + "purl": "pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "6.8.0" + }, + { + "bom-ref": "jax@0.4.20", + "description": "Differentiate, compile, and transform Numpy code.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz" + } + ], + "name": "jax", + "purl": "pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html", + "type": "library", + "version": "0.4.20" + }, + { + "bom-ref": "ml-dtypes@0.3.1", + "description": "", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz" + } + ], + "name": "ml-dtypes", + "purl": "pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.3.1" + }, + { + "bom-ref": "numpy@1.26.1", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz" + } + ], + "name": "numpy", + "purl": "pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.26.1" + }, + { + "bom-ref": "opt-einsum@3.3.0", + "description": "Optimizing numpys einsum function", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz" + } + ], + "name": "opt-einsum", + "purl": "pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.3.0" + }, + { + "bom-ref": "scipy@1.11.3", + "description": "Fundamental algorithms for scientific computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz" + } + ], + "name": "scipy", + "purl": "pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.11.3" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-metadata@6.8.0" + }, + { + "dependsOn": [ + "importlib-metadata@6.8.0", + "ml-dtypes@0.3.1", + "numpy@1.26.1", + "opt-einsum@3.3.0", + "scipy@1.11.3" + ], + "ref": "jax@0.4.20" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "ml-dtypes@0.3.1" + }, + { + "ref": "numpy@1.26.1" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "opt-einsum@3.3.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "jax@0.4.20", + "toml@0.10.2" + ], + "ref": "private-packges" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "scipy@1.11.3" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "private-packges", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/private-packges_lock11_1.2.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock11_1.2.xml.bin new file mode 100644 index 00000000..f80f5cc7 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock11_1.2.xml.bin @@ -0,0 +1,470 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + importlib-metadata + 6.8.0 + Read metadata from Python packages + pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz + from legacy-api + + + + + jax + 0.4.20 + Differentiate, compile, and transform Numpy code. + pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl + from legacy-api + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz + from legacy-api + + + + + ml-dtypes + 0.3.1 + + pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz + from legacy-api + + + + + numpy + 1.26.1 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz + from legacy-api + + + + + opt-einsum + 3.3.0 + Optimizing numpys einsum function + pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz + from legacy-api + + + + + scipy + 1.11.3 + Fundamental algorithms for scientific computing in Python + pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock11_1.3.json.bin b/tests/_data/snapshots/poetry/private-packges_lock11_1.3.json.bin new file mode 100644 index 00000000..e5bb2314 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock11_1.3.json.bin @@ -0,0 +1,1181 @@ +{ + "components": [ + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "importlib-metadata@6.8.0", + "description": "Read metadata from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz" + } + ], + "name": "importlib-metadata", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "6.8.0" + }, + { + "bom-ref": "jax@0.4.20", + "description": "Differentiate, compile, and transform Numpy code.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2" + } + ], + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac" + } + ], + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz" + } + ], + "name": "jax", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html", + "type": "library", + "version": "0.4.20" + }, + { + "bom-ref": "ml-dtypes@0.3.1", + "description": "", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz" + } + ], + "name": "ml-dtypes", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.3.1" + }, + { + "bom-ref": "numpy@1.26.1", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.26.1" + }, + { + "bom-ref": "opt-einsum@3.3.0", + "description": "Optimizing numpys einsum function", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz" + } + ], + "name": "opt-einsum", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.3.0" + }, + { + "bom-ref": "scipy@1.11.3", + "description": "Fundamental algorithms for scientific computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz" + } + ], + "name": "scipy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.11.3" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-metadata@6.8.0" + }, + { + "dependsOn": [ + "importlib-metadata@6.8.0", + "ml-dtypes@0.3.1", + "numpy@1.26.1", + "opt-einsum@3.3.0", + "scipy@1.11.3" + ], + "ref": "jax@0.4.20" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "ml-dtypes@0.3.1" + }, + { + "ref": "numpy@1.26.1" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "opt-einsum@3.3.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "jax@0.4.20", + "toml@0.10.2" + ], + "ref": "private-packges" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "scipy@1.11.3" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "private-packges", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/private-packges_lock11_1.3.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock11_1.3.xml.bin new file mode 100644 index 00000000..828dd5ef --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock11_1.3.xml.bin @@ -0,0 +1,758 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + true + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + importlib-metadata + 6.8.0 + Read metadata from Python packages + pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl + from legacy-api + + 3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb + + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz + from legacy-api + + dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 + + + + + main + + + + jax + 0.4.20 + Differentiate, compile, and transform Numpy code. + pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl + from legacy-api + + 3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2 + + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz + from legacy-api + + ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac + + + + + main + + + + ml-dtypes + 0.3.1 + + pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl + from legacy-api + + 510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl + from legacy-api + + da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl + from legacy-api + + 5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl + from legacy-api + + cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl + from legacy-api + + 3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl + from legacy-api + + a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl + from legacy-api + + 438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl + from legacy-api + + 979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz + from legacy-api + + 60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611 + + + + + main + + + + numpy + 1.26.1 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + 82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl + from legacy-api + + d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl + from legacy-api + + d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + 1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl + from legacy-api + + b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl + from legacy-api + + 3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + 1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl + from legacy-api + + af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl + from legacy-api + + 9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + 1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl + from legacy-api + + d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl + from legacy-api + + 59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl + from legacy-api + + 06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + 6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz + from legacy-api + + c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe + + + + + main + + + + opt-einsum + 3.3.0 + Optimizing numpys einsum function + pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl + from legacy-api + + 2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147 + + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz + from legacy-api + + 59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549 + + + + + main + + + + scipy + 1.11.3 + Fundamental algorithms for scientific computing in Python + pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + 370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl + from legacy-api + + 9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl + from legacy-api + + 033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + 925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl + from legacy-api + + 5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl + from legacy-api + + e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl + from legacy-api + + 0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + 74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl + from legacy-api + + 90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl + from legacy-api + + 5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + 15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl + from legacy-api + + 4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz + from legacy-api + + bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd + + + + + main + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + 0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 + + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + 84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + + + + + main + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock11_1.4.json.bin b/tests/_data/snapshots/poetry/private-packges_lock11_1.4.json.bin new file mode 100644 index 00000000..a3f6ba9b --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock11_1.4.json.bin @@ -0,0 +1,1177 @@ +{ + "components": [ + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "importlib-metadata@6.8.0", + "description": "Read metadata from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz" + } + ], + "name": "importlib-metadata", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "6.8.0" + }, + { + "bom-ref": "jax@0.4.20", + "description": "Differentiate, compile, and transform Numpy code.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2" + } + ], + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac" + } + ], + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz" + } + ], + "name": "jax", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html", + "type": "library", + "version": "0.4.20" + }, + { + "bom-ref": "ml-dtypes@0.3.1", + "description": "", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz" + } + ], + "name": "ml-dtypes", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.3.1" + }, + { + "bom-ref": "numpy@1.26.1", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.26.1" + }, + { + "bom-ref": "opt-einsum@3.3.0", + "description": "Optimizing numpys einsum function", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz" + } + ], + "name": "opt-einsum", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.3.0" + }, + { + "bom-ref": "scipy@1.11.3", + "description": "Fundamental algorithms for scientific computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz" + } + ], + "name": "scipy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.11.3" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-metadata@6.8.0" + }, + { + "dependsOn": [ + "importlib-metadata@6.8.0", + "ml-dtypes@0.3.1", + "numpy@1.26.1", + "opt-einsum@3.3.0", + "scipy@1.11.3" + ], + "ref": "jax@0.4.20" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "ml-dtypes@0.3.1" + }, + { + "ref": "numpy@1.26.1" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "opt-einsum@3.3.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "jax@0.4.20", + "toml@0.10.2" + ], + "ref": "private-packges" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "scipy@1.11.3" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "private-packges", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/private-packges_lock11_1.4.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock11_1.4.xml.bin new file mode 100644 index 00000000..1d76c835 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock11_1.4.xml.bin @@ -0,0 +1,785 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + true + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + importlib-metadata + 6.8.0 + Read metadata from Python packages + pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl + from legacy-api + + 3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb + + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz + from legacy-api + + dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 + + + + + main + + + + jax + 0.4.20 + Differentiate, compile, and transform Numpy code. + pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl + from legacy-api + + 3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2 + + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz + from legacy-api + + ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac + + + + + main + + + + ml-dtypes + 0.3.1 + + pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl + from legacy-api + + 510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl + from legacy-api + + da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl + from legacy-api + + 5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl + from legacy-api + + cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl + from legacy-api + + 3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl + from legacy-api + + a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl + from legacy-api + + 438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl + from legacy-api + + 979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz + from legacy-api + + 60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611 + + + + + main + + + + numpy + 1.26.1 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + 82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl + from legacy-api + + d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl + from legacy-api + + d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + 1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl + from legacy-api + + b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl + from legacy-api + + 3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + 1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl + from legacy-api + + af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl + from legacy-api + + 9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + 1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl + from legacy-api + + d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl + from legacy-api + + 59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl + from legacy-api + + 06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + 6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz + from legacy-api + + c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe + + + + + main + + + + opt-einsum + 3.3.0 + Optimizing numpys einsum function + pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl + from legacy-api + + 2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147 + + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz + from legacy-api + + 59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549 + + + + + main + + + + scipy + 1.11.3 + Fundamental algorithms for scientific computing in Python + pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + 370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl + from legacy-api + + 9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl + from legacy-api + + 033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + 925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl + from legacy-api + + 5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl + from legacy-api + + e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl + from legacy-api + + 0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + 74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl + from legacy-api + + 90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl + from legacy-api + + 5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + 15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl + from legacy-api + + 4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz + from legacy-api + + bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd + + + + + main + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + 0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 + + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + 84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + + + + + main + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock11_1.5.json.bin b/tests/_data/snapshots/poetry/private-packges_lock11_1.5.json.bin new file mode 100644 index 00000000..91aa48bd --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock11_1.5.json.bin @@ -0,0 +1,1177 @@ +{ + "components": [ + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "importlib-metadata@6.8.0", + "description": "Read metadata from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz" + } + ], + "name": "importlib-metadata", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "6.8.0" + }, + { + "bom-ref": "jax@0.4.20", + "description": "Differentiate, compile, and transform Numpy code.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2" + } + ], + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac" + } + ], + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz" + } + ], + "name": "jax", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html", + "type": "library", + "version": "0.4.20" + }, + { + "bom-ref": "ml-dtypes@0.3.1", + "description": "", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz" + } + ], + "name": "ml-dtypes", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.3.1" + }, + { + "bom-ref": "numpy@1.26.1", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.26.1" + }, + { + "bom-ref": "opt-einsum@3.3.0", + "description": "Optimizing numpys einsum function", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz" + } + ], + "name": "opt-einsum", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.3.0" + }, + { + "bom-ref": "scipy@1.11.3", + "description": "Fundamental algorithms for scientific computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz" + } + ], + "name": "scipy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.11.3" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-metadata@6.8.0" + }, + { + "dependsOn": [ + "importlib-metadata@6.8.0", + "ml-dtypes@0.3.1", + "numpy@1.26.1", + "opt-einsum@3.3.0", + "scipy@1.11.3" + ], + "ref": "jax@0.4.20" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "ml-dtypes@0.3.1" + }, + { + "ref": "numpy@1.26.1" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "opt-einsum@3.3.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "jax@0.4.20", + "toml@0.10.2" + ], + "ref": "private-packges" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "scipy@1.11.3" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "private-packges", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/private-packges_lock11_1.5.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock11_1.5.xml.bin new file mode 100644 index 00000000..29c8f6ea --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock11_1.5.xml.bin @@ -0,0 +1,785 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + true + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + importlib-metadata + 6.8.0 + Read metadata from Python packages + pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl + from legacy-api + + 3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb + + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz + from legacy-api + + dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 + + + + + main + + + + jax + 0.4.20 + Differentiate, compile, and transform Numpy code. + pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl + from legacy-api + + 3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2 + + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz + from legacy-api + + ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac + + + + + main + + + + ml-dtypes + 0.3.1 + + pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl + from legacy-api + + 510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl + from legacy-api + + da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl + from legacy-api + + 5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl + from legacy-api + + cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl + from legacy-api + + 3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl + from legacy-api + + a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl + from legacy-api + + 438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl + from legacy-api + + 979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz + from legacy-api + + 60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611 + + + + + main + + + + numpy + 1.26.1 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + 82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl + from legacy-api + + d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl + from legacy-api + + d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + 1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl + from legacy-api + + b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl + from legacy-api + + 3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + 1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl + from legacy-api + + af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl + from legacy-api + + 9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + 1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl + from legacy-api + + d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl + from legacy-api + + 59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl + from legacy-api + + 06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + 6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz + from legacy-api + + c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe + + + + + main + + + + opt-einsum + 3.3.0 + Optimizing numpys einsum function + pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl + from legacy-api + + 2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147 + + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz + from legacy-api + + 59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549 + + + + + main + + + + scipy + 1.11.3 + Fundamental algorithms for scientific computing in Python + pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + 370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl + from legacy-api + + 9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl + from legacy-api + + 033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + 925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl + from legacy-api + + 5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl + from legacy-api + + e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl + from legacy-api + + 0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + 74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl + from legacy-api + + 90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl + from legacy-api + + 5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + 15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl + from legacy-api + + 4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz + from legacy-api + + bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd + + + + + main + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + 0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 + + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + 84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + + + + + main + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock20_1.0.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock20_1.0.xml.bin new file mode 100644 index 00000000..19168963 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock20_1.0.xml.bin @@ -0,0 +1,68 @@ + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + false + + + importlib-metadata + 6.8.0 + Read metadata from Python packages + pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple + false + + + jax + 0.4.20 + Differentiate, compile, and transform Numpy code. + pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html + false + + + ml-dtypes + 0.3.1 + + pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple + false + + + numpy + 1.26.1 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple + false + + + opt-einsum + 3.3.0 + Optimizing numpys einsum function + pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple + false + + + scipy + 1.11.3 + Fundamental algorithms for scientific computing in Python + pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple + false + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + false + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple + false + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock20_1.1.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock20_1.1.xml.bin new file mode 100644 index 00000000..f21f1dab --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock20_1.1.xml.bin @@ -0,0 +1,421 @@ + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + importlib-metadata + 6.8.0 + Read metadata from Python packages + pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz + from legacy-api + + + + + jax + 0.4.20 + Differentiate, compile, and transform Numpy code. + pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl + from legacy-api + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz + from legacy-api + + + + + ml-dtypes + 0.3.1 + + pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz + from legacy-api + + + + + numpy + 1.26.1 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz + from legacy-api + + + + + opt-einsum + 3.3.0 + Optimizing numpys einsum function + pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz + from legacy-api + + + + + scipy + 1.11.3 + Fundamental algorithms for scientific computing in Python + pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock20_1.2.json.bin b/tests/_data/snapshots/poetry/private-packges_lock20_1.2.json.bin new file mode 100644 index 00000000..bfbb0ebc --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock20_1.2.json.bin @@ -0,0 +1,605 @@ +{ + "components": [ + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "importlib-metadata@6.8.0", + "description": "Read metadata from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz" + } + ], + "name": "importlib-metadata", + "purl": "pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "6.8.0" + }, + { + "bom-ref": "jax@0.4.20", + "description": "Differentiate, compile, and transform Numpy code.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz" + } + ], + "name": "jax", + "purl": "pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html", + "type": "library", + "version": "0.4.20" + }, + { + "bom-ref": "ml-dtypes@0.3.1", + "description": "", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz" + } + ], + "name": "ml-dtypes", + "purl": "pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.3.1" + }, + { + "bom-ref": "numpy@1.26.1", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz" + } + ], + "name": "numpy", + "purl": "pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.26.1" + }, + { + "bom-ref": "opt-einsum@3.3.0", + "description": "Optimizing numpys einsum function", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz" + } + ], + "name": "opt-einsum", + "purl": "pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.3.0" + }, + { + "bom-ref": "scipy@1.11.3", + "description": "Fundamental algorithms for scientific computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz" + } + ], + "name": "scipy", + "purl": "pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.11.3" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-metadata@6.8.0" + }, + { + "dependsOn": [ + "importlib-metadata@6.8.0", + "ml-dtypes@0.3.1", + "numpy@1.26.1", + "opt-einsum@3.3.0", + "scipy@1.11.3" + ], + "ref": "jax@0.4.20" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "ml-dtypes@0.3.1" + }, + { + "ref": "numpy@1.26.1" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "opt-einsum@3.3.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "jax@0.4.20", + "toml@0.10.2" + ], + "ref": "private-packges" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "scipy@1.11.3" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "private-packges", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/private-packges_lock20_1.2.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock20_1.2.xml.bin new file mode 100644 index 00000000..f80f5cc7 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock20_1.2.xml.bin @@ -0,0 +1,470 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + importlib-metadata + 6.8.0 + Read metadata from Python packages + pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz + from legacy-api + + + + + jax + 0.4.20 + Differentiate, compile, and transform Numpy code. + pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl + from legacy-api + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz + from legacy-api + + + + + ml-dtypes + 0.3.1 + + pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz + from legacy-api + + + + + numpy + 1.26.1 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz + from legacy-api + + + + + opt-einsum + 3.3.0 + Optimizing numpys einsum function + pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz + from legacy-api + + + + + scipy + 1.11.3 + Fundamental algorithms for scientific computing in Python + pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/private-packges_lock20_1.3.json.bin new file mode 100644 index 00000000..7d1cd297 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock20_1.3.json.bin @@ -0,0 +1,1145 @@ +{ + "components": [ + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "importlib-metadata@6.8.0", + "description": "Read metadata from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz" + } + ], + "name": "importlib-metadata", + "purl": "pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "6.8.0" + }, + { + "bom-ref": "jax@0.4.20", + "description": "Differentiate, compile, and transform Numpy code.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2" + } + ], + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac" + } + ], + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz" + } + ], + "name": "jax", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html", + "type": "library", + "version": "0.4.20" + }, + { + "bom-ref": "ml-dtypes@0.3.1", + "description": "", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz" + } + ], + "name": "ml-dtypes", + "purl": "pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.3.1" + }, + { + "bom-ref": "numpy@1.26.1", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz" + } + ], + "name": "numpy", + "purl": "pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.26.1" + }, + { + "bom-ref": "opt-einsum@3.3.0", + "description": "Optimizing numpys einsum function", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz" + } + ], + "name": "opt-einsum", + "purl": "pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.3.0" + }, + { + "bom-ref": "scipy@1.11.3", + "description": "Fundamental algorithms for scientific computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz" + } + ], + "name": "scipy", + "purl": "pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.11.3" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-metadata@6.8.0" + }, + { + "dependsOn": [ + "importlib-metadata@6.8.0", + "ml-dtypes@0.3.1", + "numpy@1.26.1", + "opt-einsum@3.3.0", + "scipy@1.11.3" + ], + "ref": "jax@0.4.20" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "ml-dtypes@0.3.1" + }, + { + "ref": "numpy@1.26.1" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "opt-einsum@3.3.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "jax@0.4.20", + "toml@0.10.2" + ], + "ref": "private-packges" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "scipy@1.11.3" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "private-packges", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/private-packges_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock20_1.3.xml.bin new file mode 100644 index 00000000..7f1ed55f --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock20_1.3.xml.bin @@ -0,0 +1,740 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + true + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + importlib-metadata + 6.8.0 + Read metadata from Python packages + pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl + from legacy-api + + 3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb + + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz + from legacy-api + + dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 + + + + + + jax + 0.4.20 + Differentiate, compile, and transform Numpy code. + pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl + from legacy-api + + 3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2 + + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz + from legacy-api + + ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac + + + + + main + + + + ml-dtypes + 0.3.1 + + pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl + from legacy-api + + 510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl + from legacy-api + + da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl + from legacy-api + + 5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl + from legacy-api + + cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl + from legacy-api + + 3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl + from legacy-api + + a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl + from legacy-api + + 438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl + from legacy-api + + 979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz + from legacy-api + + 60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611 + + + + + + numpy + 1.26.1 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + 82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl + from legacy-api + + d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl + from legacy-api + + d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + 1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl + from legacy-api + + b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl + from legacy-api + + 3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + 1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl + from legacy-api + + af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl + from legacy-api + + 9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + 1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl + from legacy-api + + d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl + from legacy-api + + 59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl + from legacy-api + + 06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + 6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz + from legacy-api + + c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe + + + + + + opt-einsum + 3.3.0 + Optimizing numpys einsum function + pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl + from legacy-api + + 2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147 + + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz + from legacy-api + + 59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549 + + + + + + scipy + 1.11.3 + Fundamental algorithms for scientific computing in Python + pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + 370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl + from legacy-api + + 9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl + from legacy-api + + 033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + 925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl + from legacy-api + + 5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl + from legacy-api + + e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl + from legacy-api + + 0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + 74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl + from legacy-api + + 90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl + from legacy-api + + 5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + 15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl + from legacy-api + + 4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz + from legacy-api + + bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + 0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 + + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + 84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/private-packges_lock20_1.4.json.bin new file mode 100644 index 00000000..67dd1ef0 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock20_1.4.json.bin @@ -0,0 +1,1141 @@ +{ + "components": [ + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "importlib-metadata@6.8.0", + "description": "Read metadata from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz" + } + ], + "name": "importlib-metadata", + "purl": "pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "6.8.0" + }, + { + "bom-ref": "jax@0.4.20", + "description": "Differentiate, compile, and transform Numpy code.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2" + } + ], + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac" + } + ], + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz" + } + ], + "name": "jax", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html", + "type": "library", + "version": "0.4.20" + }, + { + "bom-ref": "ml-dtypes@0.3.1", + "description": "", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz" + } + ], + "name": "ml-dtypes", + "purl": "pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.3.1" + }, + { + "bom-ref": "numpy@1.26.1", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz" + } + ], + "name": "numpy", + "purl": "pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.26.1" + }, + { + "bom-ref": "opt-einsum@3.3.0", + "description": "Optimizing numpys einsum function", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz" + } + ], + "name": "opt-einsum", + "purl": "pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.3.0" + }, + { + "bom-ref": "scipy@1.11.3", + "description": "Fundamental algorithms for scientific computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz" + } + ], + "name": "scipy", + "purl": "pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.11.3" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-metadata@6.8.0" + }, + { + "dependsOn": [ + "importlib-metadata@6.8.0", + "ml-dtypes@0.3.1", + "numpy@1.26.1", + "opt-einsum@3.3.0", + "scipy@1.11.3" + ], + "ref": "jax@0.4.20" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "ml-dtypes@0.3.1" + }, + { + "ref": "numpy@1.26.1" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "opt-einsum@3.3.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "jax@0.4.20", + "toml@0.10.2" + ], + "ref": "private-packges" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "scipy@1.11.3" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "private-packges", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/private-packges_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock20_1.4.xml.bin new file mode 100644 index 00000000..b63cbe51 --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock20_1.4.xml.bin @@ -0,0 +1,767 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + true + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + importlib-metadata + 6.8.0 + Read metadata from Python packages + pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl + from legacy-api + + 3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb + + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz + from legacy-api + + dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 + + + + + + jax + 0.4.20 + Differentiate, compile, and transform Numpy code. + pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl + from legacy-api + + 3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2 + + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz + from legacy-api + + ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac + + + + + main + + + + ml-dtypes + 0.3.1 + + pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl + from legacy-api + + 510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl + from legacy-api + + da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl + from legacy-api + + 5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl + from legacy-api + + cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl + from legacy-api + + 3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl + from legacy-api + + a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl + from legacy-api + + 438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl + from legacy-api + + 979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz + from legacy-api + + 60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611 + + + + + + numpy + 1.26.1 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + 82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl + from legacy-api + + d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl + from legacy-api + + d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + 1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl + from legacy-api + + b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl + from legacy-api + + 3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + 1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl + from legacy-api + + af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl + from legacy-api + + 9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + 1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl + from legacy-api + + d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl + from legacy-api + + 59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl + from legacy-api + + 06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + 6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz + from legacy-api + + c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe + + + + + + opt-einsum + 3.3.0 + Optimizing numpys einsum function + pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl + from legacy-api + + 2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147 + + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz + from legacy-api + + 59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549 + + + + + + scipy + 1.11.3 + Fundamental algorithms for scientific computing in Python + pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + 370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl + from legacy-api + + 9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl + from legacy-api + + 033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + 925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl + from legacy-api + + 5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl + from legacy-api + + e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl + from legacy-api + + 0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + 74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl + from legacy-api + + 90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl + from legacy-api + + 5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + 15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl + from legacy-api + + 4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz + from legacy-api + + bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + 0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 + + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + 84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/private-packges_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/private-packges_lock20_1.5.json.bin new file mode 100644 index 00000000..8e6f12fc --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock20_1.5.json.bin @@ -0,0 +1,1141 @@ +{ + "components": [ + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "importlib-metadata@6.8.0", + "description": "Read metadata from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz" + } + ], + "name": "importlib-metadata", + "purl": "pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "6.8.0" + }, + { + "bom-ref": "jax@0.4.20", + "description": "Differentiate, compile, and transform Numpy code.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2" + } + ], + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac" + } + ], + "type": "distribution", + "url": "https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz" + } + ], + "name": "jax", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html", + "type": "library", + "version": "0.4.20" + }, + { + "bom-ref": "ml-dtypes@0.3.1", + "description": "", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz" + } + ], + "name": "ml-dtypes", + "purl": "pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "0.3.1" + }, + { + "bom-ref": "numpy@1.26.1", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz" + } + ], + "name": "numpy", + "purl": "pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.26.1" + }, + { + "bom-ref": "opt-einsum@3.3.0", + "description": "Optimizing numpys einsum function", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz" + } + ], + "name": "opt-einsum", + "purl": "pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.3.0" + }, + { + "bom-ref": "scipy@1.11.3", + "description": "Fundamental algorithms for scientific computing in Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz" + } + ], + "name": "scipy", + "purl": "pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "1.11.3" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + } + ], + "type": "distribution", + "url": "http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-metadata@6.8.0" + }, + { + "dependsOn": [ + "importlib-metadata@6.8.0", + "ml-dtypes@0.3.1", + "numpy@1.26.1", + "opt-einsum@3.3.0", + "scipy@1.11.3" + ], + "ref": "jax@0.4.20" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "ml-dtypes@0.3.1" + }, + { + "ref": "numpy@1.26.1" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "opt-einsum@3.3.0" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "jax@0.4.20", + "toml@0.10.2" + ], + "ref": "private-packges" + }, + { + "dependsOn": [ + "numpy@1.26.1" + ], + "ref": "scipy@1.11.3" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "private-packges", + "description": "packages from aternative package repositories", + "name": "private-packges", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/private-packges_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/private-packges_lock20_1.5.xml.bin new file mode 100644 index 00000000..02737f3a --- /dev/null +++ b/tests/_data/snapshots/poetry/private-packges_lock20_1.5.xml.bin @@ -0,0 +1,767 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + private-packges + 0.1.0 + packages from aternative package repositories + + + true + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + http://pysrc1.acme.org:8080/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + main + + + + importlib-metadata + 6.8.0 + Read metadata from Python packages + pkg:pypi/importlib-metadata@6.8.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0-py3-none-any.whl + from legacy-api + + 3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb + + + + http://pysrc1.acme.org:8080/simple/importlib-metadata/#importlib_metadata-6.8.0.tar.gz + from legacy-api + + dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 + + + + + + jax + 0.4.20 + Differentiate, compile, and transform Numpy code. + pkg:pypi/jax@0.4.20?repository_url=https://storage.googleapis.com/jax-releases/jax_releases.html + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20-py3-none-any.whl + from legacy-api + + 3d5952197adca548d99310f1c326bf00548f1cc8652b89edb369166482c2aec2 + + + + https://storage.googleapis.com/jax-releases/jax_releases.html/jax/#jax-0.4.20.tar.gz + from legacy-api + + ea96a763a8b1a9374639d1159ab4de163461d01cd022f67c34c09581b71ed2ac + + + + + main + + + + ml-dtypes + 0.3.1 + + pkg:pypi/ml-dtypes@0.3.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-macosx_10_9_universal2.whl + from legacy-api + + 510d249a91face47211762eb294d6fe64f325356b965fb6388c1bf51bd339267 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + f83ff080df8910c0f987f615b03e4f8198638e0c00c6e679ea8892dda909763b + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + fcae2c69715410d96906e1dfe8f017d9f78a0d10e0df91aae52e91f51fdfe45e + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp310-cp310-win_amd64.whl + from legacy-api + + da274599e4950a9b488d21571061f49a185537cc77f2d3f8121151d58a9e9f16 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-macosx_10_9_universal2.whl + from legacy-api + + 5e0b0b6bb07fa5ad11bb61d174667176bee5e05857225067aabfc5adc1b51d23 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 5727effa7650f7ab10906542d137cfb3244fdc3b2b519beff42f82def8ba59be + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 42a8980afd8b7c8e270e8b5c260237286b5b26acd276fcb758d13cd7cb567e99 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp311-cp311-win_amd64.whl + from legacy-api + + cb0c404e0dd3e25b56362c1c1e5de0ef717f727dde59fa721af4ce6ab2acca44 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-macosx_10_9_universal2.whl + from legacy-api + + 3d8ca0acbd377082792d8b97081ba580abdad67c6afb7f827012c675b052f058 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 4828b62fa3bf1ae35faa40f3db9a38ec72fbce02f328a1d14c3a9da4606af364 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d1a8dc3bac1da2a17d0e2e4cba36ee89721d0bd33ea4765af2eefb5f41409e0f + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp312-cp312-win_amd64.whl + from legacy-api + + a777928dcba8865ab4a8157eeb25d23aed7bc82e5fd74e1d5eca821d3f148b39 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-macosx_10_9_universal2.whl + from legacy-api + + 438437e2e614a3c91d75581653b6c40ec890e8b5994d7190a90c931740151c95 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 70984b473db6489ec1d8c79b082a1322105155193049d08a3b0c515094e9777b + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 4d94b2d1bed77284694f7fd0479640fa7aa5d96433dca3cbcec407a5ef752e77 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1-cp39-cp39-win_amd64.whl + from legacy-api + + 979d7d196d9a17e0135ae22878f74241fbd3522cef58d7b292f1fd5b32282201 + + + + http://pysrc1.acme.org:8080/simple/ml-dtypes/#ml_dtypes-0.3.1.tar.gz + from legacy-api + + 60778f99194b4c4f36ba42da200b35ef851ce4d4af698aaf70f5b91fe70fc611 + + + + + + numpy + 1.26.1 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.26.1?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + 82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win32.whl + from legacy-api + + d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp310-cp310-win_amd64.whl + from legacy-api + + d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + 1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win32.whl + from legacy-api + + b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp311-cp311-win_amd64.whl + from legacy-api + + 3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + 1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win32.whl + from legacy-api + + af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp312-cp312-win_amd64.whl + from legacy-api + + 9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + 1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win32.whl + from legacy-api + + d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-cp39-cp39-win_amd64.whl + from legacy-api + + 59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl + from legacy-api + + 06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42 + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + 6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f + + + + http://pysrc1.acme.org:8080/simple/numpy/#numpy-1.26.1.tar.gz + from legacy-api + + c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe + + + + + + opt-einsum + 3.3.0 + Optimizing numpys einsum function + pkg:pypi/opt-einsum@3.3.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0-py3-none-any.whl + from legacy-api + + 2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147 + + + + http://pysrc1.acme.org:8080/simple/opt-einsum/#opt_einsum-3.3.0.tar.gz + from legacy-api + + 59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549 + + + + + + scipy + 1.11.3 + Fundamental algorithms for scientific computing in Python + pkg:pypi/scipy@1.11.3?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl + from legacy-api + + 370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl + from legacy-api + + 9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp310-cp310-win_amd64.whl + from legacy-api + + 033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl + from legacy-api + + 925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl + from legacy-api + + 5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp311-cp311-win_amd64.whl + from legacy-api + + e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl + from legacy-api + + dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl + from legacy-api + + 0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + 74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp312-cp312-win_amd64.whl + from legacy-api + + 90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl + from legacy-api + + a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl + from legacy-api + + 5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + 15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3-cp39-cp39-win_amd64.whl + from legacy-api + + 4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2 + + + + http://pysrc1.acme.org:8080/simple/scipy/#scipy-1.11.3.tar.gz + from legacy-api + + bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2?repository_url=http://pysrc2.acme.org:8080/simple + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + http://pysrc2.acme.org:8080/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + pkg:pypi/zipp@3.17.0?repository_url=http://pysrc1.acme.org:8080/simple + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + 0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 + + + + http://pysrc1.acme.org:8080/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + 84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/regression-issue611_lock20_1.0.xml.bin b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.0.xml.bin new file mode 100644 index 00000000..3810a1e9 --- /dev/null +++ b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.0.xml.bin @@ -0,0 +1,12 @@ + + + + + pyhumps + 3.7.1 + 🐫 Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node + pkg:pypi/pyhumps@3.7.1 + false + + + diff --git a/tests/_data/snapshots/poetry/regression-issue611_lock20_1.1.xml.bin b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.1.xml.bin new file mode 100644 index 00000000..de9f1df8 --- /dev/null +++ b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.1.xml.bin @@ -0,0 +1,21 @@ + + + + + pyhumps + 3.7.1 + 🐫 Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node + pkg:pypi/pyhumps@3.7.1 + + + https://pypi.org/simple/pyhumps/#pyhumps-3.7.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/pyhumps/#pyhumps-3.7.1.tar.gz + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/regression-issue611_lock20_1.2.json.bin b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.2.json.bin new file mode 100644 index 00000000..048767d9 --- /dev/null +++ b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.2.json.bin @@ -0,0 +1,60 @@ +{ + "components": [ + { + "bom-ref": "pyhumps@3.7.1", + "description": "\ud83d\udc2b Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/pyhumps/#pyhumps-3.7.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/pyhumps/#pyhumps-3.7.1.tar.gz" + } + ], + "name": "pyhumps", + "purl": "pkg:pypi/pyhumps@3.7.1", + "type": "library", + "version": "3.7.1" + } + ], + "dependencies": [ + { + "ref": "pyhumps@3.7.1" + }, + { + "dependsOn": [ + "pyhumps@3.7.1" + ], + "ref": "regression-issue611" + } + ], + "metadata": { + "component": { + "bom-ref": "regression-issue611", + "description": "regression for issue #611", + "name": "regression-issue611", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/regression-issue611_lock20_1.2.xml.bin b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.2.xml.bin new file mode 100644 index 00000000..bcd40111 --- /dev/null +++ b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.2.xml.bin @@ -0,0 +1,46 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + regression-issue611 + 0.1.0 + regression for issue #611 + + + + + pyhumps + 3.7.1 + 🐫 Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node + pkg:pypi/pyhumps@3.7.1 + + + https://pypi.org/simple/pyhumps/#pyhumps-3.7.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/pyhumps/#pyhumps-3.7.1.tar.gz + from legacy-api + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/regression-issue611_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.3.json.bin new file mode 100644 index 00000000..76ed92c9 --- /dev/null +++ b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.3.json.bin @@ -0,0 +1,84 @@ +{ + "components": [ + { + "bom-ref": "pyhumps@3.7.1", + "description": "\ud83d\udc2b Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c6f2d833f2c7afae039d71b7dc0aba5412ae5b8c8c33d4a208c1d412de17229e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pyhumps/#pyhumps-3.7.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5616f0afdbc73ef479fa9999f4abdcb336a0232707ff1a0b86e29fc9339e18da" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pyhumps/#pyhumps-3.7.1.tar.gz" + } + ], + "name": "pyhumps", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/pyhumps@3.7.1", + "type": "library", + "version": "3.7.1" + } + ], + "dependencies": [ + { + "ref": "pyhumps@3.7.1" + }, + { + "dependsOn": [ + "pyhumps@3.7.1" + ], + "ref": "regression-issue611" + } + ], + "metadata": { + "component": { + "bom-ref": "regression-issue611", + "description": "regression for issue #611", + "name": "regression-issue611", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/regression-issue611_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.3.xml.bin new file mode 100644 index 00000000..f7455eb5 --- /dev/null +++ b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.3.xml.bin @@ -0,0 +1,58 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + regression-issue611 + 0.1.0 + regression for issue #611 + + + true + + + + + pyhumps + 3.7.1 + 🐫 Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node + pkg:pypi/pyhumps@3.7.1 + + + https://pypi.org/simple/pyhumps/#pyhumps-3.7.1-py3-none-any.whl + from legacy-api + + c6f2d833f2c7afae039d71b7dc0aba5412ae5b8c8c33d4a208c1d412de17229e + + + + https://pypi.org/simple/pyhumps/#pyhumps-3.7.1.tar.gz + from legacy-api + + 5616f0afdbc73ef479fa9999f4abdcb336a0232707ff1a0b86e29fc9339e18da + + + + + main + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/regression-issue611_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.4.json.bin new file mode 100644 index 00000000..3b9b0c87 --- /dev/null +++ b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.4.json.bin @@ -0,0 +1,80 @@ +{ + "components": [ + { + "bom-ref": "pyhumps@3.7.1", + "description": "\ud83d\udc2b Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c6f2d833f2c7afae039d71b7dc0aba5412ae5b8c8c33d4a208c1d412de17229e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pyhumps/#pyhumps-3.7.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5616f0afdbc73ef479fa9999f4abdcb336a0232707ff1a0b86e29fc9339e18da" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pyhumps/#pyhumps-3.7.1.tar.gz" + } + ], + "name": "pyhumps", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/pyhumps@3.7.1", + "type": "library", + "version": "3.7.1" + } + ], + "dependencies": [ + { + "ref": "pyhumps@3.7.1" + }, + { + "dependsOn": [ + "pyhumps@3.7.1" + ], + "ref": "regression-issue611" + } + ], + "metadata": { + "component": { + "bom-ref": "regression-issue611", + "description": "regression for issue #611", + "name": "regression-issue611", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/regression-issue611_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.4.xml.bin new file mode 100644 index 00000000..3dc08218 --- /dev/null +++ b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.4.xml.bin @@ -0,0 +1,85 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + regression-issue611 + 0.1.0 + regression for issue #611 + + + true + + + + + pyhumps + 3.7.1 + 🐫 Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node + pkg:pypi/pyhumps@3.7.1 + + + https://pypi.org/simple/pyhumps/#pyhumps-3.7.1-py3-none-any.whl + from legacy-api + + c6f2d833f2c7afae039d71b7dc0aba5412ae5b8c8c33d4a208c1d412de17229e + + + + https://pypi.org/simple/pyhumps/#pyhumps-3.7.1.tar.gz + from legacy-api + + 5616f0afdbc73ef479fa9999f4abdcb336a0232707ff1a0b86e29fc9339e18da + + + + + main + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/regression-issue611_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.5.json.bin new file mode 100644 index 00000000..ba019727 --- /dev/null +++ b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.5.json.bin @@ -0,0 +1,80 @@ +{ + "components": [ + { + "bom-ref": "pyhumps@3.7.1", + "description": "\ud83d\udc2b Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c6f2d833f2c7afae039d71b7dc0aba5412ae5b8c8c33d4a208c1d412de17229e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pyhumps/#pyhumps-3.7.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5616f0afdbc73ef479fa9999f4abdcb336a0232707ff1a0b86e29fc9339e18da" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pyhumps/#pyhumps-3.7.1.tar.gz" + } + ], + "name": "pyhumps", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/pyhumps@3.7.1", + "type": "library", + "version": "3.7.1" + } + ], + "dependencies": [ + { + "ref": "pyhumps@3.7.1" + }, + { + "dependsOn": [ + "pyhumps@3.7.1" + ], + "ref": "regression-issue611" + } + ], + "metadata": { + "component": { + "bom-ref": "regression-issue611", + "description": "regression for issue #611", + "name": "regression-issue611", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/regression-issue611_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.5.xml.bin new file mode 100644 index 00000000..d1c75ff8 --- /dev/null +++ b/tests/_data/snapshots/poetry/regression-issue611_lock20_1.5.xml.bin @@ -0,0 +1,85 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + regression-issue611 + 0.1.0 + regression for issue #611 + + + true + + + + + pyhumps + 3.7.1 + 🐫 Convert strings (and dictionary keys) between snake case, camel case and pascal case in Python. Inspired by Humps for Node + pkg:pypi/pyhumps@3.7.1 + + + https://pypi.org/simple/pyhumps/#pyhumps-3.7.1-py3-none-any.whl + from legacy-api + + c6f2d833f2c7afae039d71b7dc0aba5412ae5b8c8c33d4a208c1d412de17229e + + + + https://pypi.org/simple/pyhumps/#pyhumps-3.7.1.tar.gz + from legacy-api + + 5616f0afdbc73ef479fa9999f4abdcb336a0232707ff1a0b86e29fc9339e18da + + + + + main + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.0.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.0.xml.bin new file mode 100644 index 00000000..7f9505ed --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.0.xml.bin @@ -0,0 +1,61 @@ + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean.py@4.0 + false + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + false + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + false + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + false + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + false + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + false + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + false + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.1.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.1.xml.bin new file mode 100644 index 00000000..a15cf69c --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.1.xml.bin @@ -0,0 +1,54 @@ + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean.py@4.0 + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.2.json.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.2.json.bin new file mode 100644 index 00000000..9fa9ff65 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.2.json.bin @@ -0,0 +1,133 @@ +{ + "components": [ + { + "bom-ref": "boolean.py@4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "name": "boolean.py", + "purl": "pkg:pypi/boolean.py@4.0", + "scope": "optional", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib@5.1.1", + "description": "Python library for CycloneDX", + "name": "cyclonedx-python-lib", + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "scope": "optional", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml@0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "name": "defusedxml", + "purl": "pkg:pypi/defusedxml@0.7.1", + "scope": "optional", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "license-expression@30.1.1", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "name": "license-expression", + "purl": "pkg:pypi/license-expression@30.1.1", + "scope": "optional", + "type": "library", + "version": "30.1.1" + }, + { + "bom-ref": "packageurl-python@0.11.2", + "description": "A purl aka. Package URL parser and builder", + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python@0.11.2", + "scope": "optional", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "py-serializable@0.15.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "name": "py-serializable", + "purl": "pkg:pypi/py-serializable@0.15.0", + "scope": "optional", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "sortedcontainers@2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "name": "sortedcontainers", + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "scope": "optional", + "type": "library", + "version": "2.4.0" + } + ], + "dependencies": [ + { + "ref": "boolean.py@4.0" + }, + { + "dependsOn": [ + "license-expression@30.1.1", + "packageurl-python@0.11.2", + "py-serializable@0.15.0", + "sortedcontainers@2.4.0" + ], + "ref": "cyclonedx-python-lib@5.1.1" + }, + { + "ref": "defusedxml@0.7.1" + }, + { + "dependsOn": [ + "boolean.py@4.0" + ], + "ref": "license-expression@30.1.1" + }, + { + "ref": "packageurl-python@0.11.2" + }, + { + "dependsOn": [ + "defusedxml@0.7.1" + ], + "ref": "py-serializable@0.15.0" + }, + { + "ref": "sortedcontainers@2.4.0" + }, + { + "dependsOn": [ + "cyclonedx-python-lib@5.1.1" + ], + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.2.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.2.xml.bin new file mode 100644 index 00000000..19802b19 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.2.xml.bin @@ -0,0 +1,94 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean.py@4.0 + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.3.json.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.3.json.bin new file mode 100644 index 00000000..b2c46da2 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.3.json.bin @@ -0,0 +1,195 @@ +{ + "components": [ + { + "bom-ref": "boolean.py@4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "name": "boolean.py", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/boolean.py@4.0", + "scope": "optional", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib@5.1.1", + "description": "Python library for CycloneDX", + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "scope": "optional", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml@0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "name": "defusedxml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/defusedxml@0.7.1", + "scope": "optional", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "license-expression@30.1.1", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "name": "license-expression", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/license-expression@30.1.1", + "scope": "optional", + "type": "library", + "version": "30.1.1" + }, + { + "bom-ref": "packageurl-python@0.11.2", + "description": "A purl aka. Package URL parser and builder", + "name": "packageurl-python", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/packageurl-python@0.11.2", + "scope": "optional", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "py-serializable@0.15.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "name": "py-serializable", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/py-serializable@0.15.0", + "scope": "optional", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "sortedcontainers@2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "name": "sortedcontainers", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "scope": "optional", + "type": "library", + "version": "2.4.0" + } + ], + "dependencies": [ + { + "ref": "boolean.py@4.0" + }, + { + "dependsOn": [ + "license-expression@30.1.1", + "packageurl-python@0.11.2", + "py-serializable@0.15.0", + "sortedcontainers@2.4.0" + ], + "ref": "cyclonedx-python-lib@5.1.1" + }, + { + "ref": "defusedxml@0.7.1" + }, + { + "dependsOn": [ + "boolean.py@4.0" + ], + "ref": "license-expression@30.1.1" + }, + { + "ref": "packageurl-python@0.11.2" + }, + { + "dependsOn": [ + "defusedxml@0.7.1" + ], + "ref": "py-serializable@0.15.0" + }, + { + "ref": "sortedcontainers@2.4.0" + }, + { + "dependsOn": [ + "cyclonedx-python-lib@5.1.1" + ], + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "my-extra" + } + ], + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.3.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.3.xml.bin new file mode 100644 index 00000000..c244f88f --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.3.xml.bin @@ -0,0 +1,123 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + my-extra + + + + true + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean.py@4.0 + + main + + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + main + json-validation + xml-validation + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + main + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + main + + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + main + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + main + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + main + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.4.json.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.4.json.bin new file mode 100644 index 00000000..9d2c8300 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.4.json.bin @@ -0,0 +1,191 @@ +{ + "components": [ + { + "bom-ref": "boolean.py@4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "name": "boolean.py", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/boolean.py@4.0", + "scope": "optional", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib@5.1.1", + "description": "Python library for CycloneDX", + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "scope": "optional", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml@0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "name": "defusedxml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/defusedxml@0.7.1", + "scope": "optional", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "license-expression@30.1.1", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "name": "license-expression", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/license-expression@30.1.1", + "scope": "optional", + "type": "library", + "version": "30.1.1" + }, + { + "bom-ref": "packageurl-python@0.11.2", + "description": "A purl aka. Package URL parser and builder", + "name": "packageurl-python", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/packageurl-python@0.11.2", + "scope": "optional", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "py-serializable@0.15.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "name": "py-serializable", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/py-serializable@0.15.0", + "scope": "optional", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "sortedcontainers@2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "name": "sortedcontainers", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "scope": "optional", + "type": "library", + "version": "2.4.0" + } + ], + "dependencies": [ + { + "ref": "boolean.py@4.0" + }, + { + "dependsOn": [ + "license-expression@30.1.1", + "packageurl-python@0.11.2", + "py-serializable@0.15.0", + "sortedcontainers@2.4.0" + ], + "ref": "cyclonedx-python-lib@5.1.1" + }, + { + "ref": "defusedxml@0.7.1" + }, + { + "dependsOn": [ + "boolean.py@4.0" + ], + "ref": "license-expression@30.1.1" + }, + { + "ref": "packageurl-python@0.11.2" + }, + { + "dependsOn": [ + "defusedxml@0.7.1" + ], + "ref": "py-serializable@0.15.0" + }, + { + "ref": "sortedcontainers@2.4.0" + }, + { + "dependsOn": [ + "cyclonedx-python-lib@5.1.1" + ], + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "my-extra" + } + ], + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.4.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.4.xml.bin new file mode 100644 index 00000000..1f607a1b --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.4.xml.bin @@ -0,0 +1,150 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + my-extra + + + + true + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean.py@4.0 + + main + + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + main + json-validation + xml-validation + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + main + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + main + + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + main + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + main + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + main + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.5.json.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.5.json.bin new file mode 100644 index 00000000..913113e4 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.5.json.bin @@ -0,0 +1,191 @@ +{ + "components": [ + { + "bom-ref": "boolean.py@4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "name": "boolean.py", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/boolean.py@4.0", + "scope": "optional", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib@5.1.1", + "description": "Python library for CycloneDX", + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "scope": "optional", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml@0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "name": "defusedxml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/defusedxml@0.7.1", + "scope": "optional", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "license-expression@30.1.1", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "name": "license-expression", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/license-expression@30.1.1", + "scope": "optional", + "type": "library", + "version": "30.1.1" + }, + { + "bom-ref": "packageurl-python@0.11.2", + "description": "A purl aka. Package URL parser and builder", + "name": "packageurl-python", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/packageurl-python@0.11.2", + "scope": "optional", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "py-serializable@0.15.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "name": "py-serializable", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/py-serializable@0.15.0", + "scope": "optional", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "sortedcontainers@2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "name": "sortedcontainers", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "scope": "optional", + "type": "library", + "version": "2.4.0" + } + ], + "dependencies": [ + { + "ref": "boolean.py@4.0" + }, + { + "dependsOn": [ + "license-expression@30.1.1", + "packageurl-python@0.11.2", + "py-serializable@0.15.0", + "sortedcontainers@2.4.0" + ], + "ref": "cyclonedx-python-lib@5.1.1" + }, + { + "ref": "defusedxml@0.7.1" + }, + { + "dependsOn": [ + "boolean.py@4.0" + ], + "ref": "license-expression@30.1.1" + }, + { + "ref": "packageurl-python@0.11.2" + }, + { + "dependsOn": [ + "defusedxml@0.7.1" + ], + "ref": "py-serializable@0.15.0" + }, + { + "ref": "sortedcontainers@2.4.0" + }, + { + "dependsOn": [ + "cyclonedx-python-lib@5.1.1" + ], + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "my-extra" + } + ], + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.5.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.5.xml.bin new file mode 100644 index 00000000..44355a61 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.5.xml.bin @@ -0,0 +1,150 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + my-extra + + + + true + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean.py@4.0 + + main + + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + main + json-validation + xml-validation + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + main + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + main + + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + main + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + main + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + main + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.0.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.0.xml.bin new file mode 100644 index 00000000..b81d4049 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.0.xml.bin @@ -0,0 +1,229 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + optional + pkg:pypi/arrow@1.3.0 + false + + + attrs + 23.1.0 + Classes Without Boilerplate + optional + pkg:pypi/attrs@23.1.0 + false + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean.py@4.0 + false + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + false + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + false + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + optional + pkg:pypi/fqdn@1.5.1 + false + + + idna + 3.4 + Internationalized Domain Names in Applications (IDNA) + optional + pkg:pypi/idna@3.4 + false + + + importlib-resources + 6.1.1 + Read resources from Python packages + optional + pkg:pypi/importlib-resources@6.1.1 + false + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + optional + pkg:pypi/isoduration@20.11.0 + false + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + optional + pkg:pypi/jsonpointer@2.4 + false + + + jsonschema + 4.19.2 + An implementation of JSON Schema validation for Python + optional + pkg:pypi/jsonschema@4.19.2 + false + + + jsonschema-specifications + 2023.7.1 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + optional + pkg:pypi/jsonschema-specifications@2023.7.1 + false + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + false + + + lxml + 4.9.3 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + optional + pkg:pypi/lxml@4.9.3 + false + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + false + + + pkgutil-resolve-name + 1.3.10 + Resolve a name to an object. + optional + pkg:pypi/pkgutil-resolve-name@1.3.10 + false + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + false + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + optional + pkg:pypi/python-dateutil@2.8.2 + false + + + referencing + 0.30.2 + JSON Referencing + Python + optional + pkg:pypi/referencing@0.30.2 + false + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + optional + pkg:pypi/rfc3339-validator@0.1.4 + false + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + optional + pkg:pypi/rfc3987@1.3.8 + false + + + rpds-py + 0.12.0 + Python bindings to Rust's persistent data structures (rpds) + optional + pkg:pypi/rpds-py@0.12.0 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + optional + pkg:pypi/six@1.16.0 + false + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + false + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + optional + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + optional + pkg:pypi/uri-template@1.3.0 + false + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + optional + pkg:pypi/webcolors@1.13 + false + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + optional + pkg:pypi/zipp@3.17.0 + false + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.1.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.1.xml.bin new file mode 100644 index 00000000..4a279cc5 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.1.xml.bin @@ -0,0 +1,779 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + optional + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + attrs + 23.1.0 + Classes Without Boilerplate + optional + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz + from legacy-api + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean.py@4.0 + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + optional + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz + from legacy-api + + + + + idna + 3.4 + Internationalized Domain Names in Applications (IDNA) + optional + pkg:pypi/idna@3.4 + + + https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/idna/#idna-3.4.tar.gz + from legacy-api + + + + + importlib-resources + 6.1.1 + Read resources from Python packages + optional + pkg:pypi/importlib-resources@6.1.1 + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + optional + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + optional + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz + from legacy-api + + + + + jsonschema + 4.19.2 + An implementation of JSON Schema validation for Python + optional + pkg:pypi/jsonschema@4.19.2 + + + jsonschema-specifications + 2023.7.1 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + optional + pkg:pypi/jsonschema-specifications@2023.7.1 + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz + from legacy-api + + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + + lxml + 4.9.3 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + optional + pkg:pypi/lxml@4.9.3 + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + + pkgutil-resolve-name + 1.3.10 + Resolve a name to an object. + optional + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz + from legacy-api + + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + optional + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + referencing + 0.30.2 + JSON Referencing + Python + optional + pkg:pypi/referencing@0.30.2 + + + https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz + from legacy-api + + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + optional + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz + from legacy-api + + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + optional + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz + from legacy-api + + + + + rpds-py + 0.12.0 + Python bindings to Rust's persistent data structures (rpds) + optional + pkg:pypi/rpds-py@0.12.0 + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + optional + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + optional + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + optional + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz + from legacy-api + + + https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl + from legacy-api + + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + optional + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz + from legacy-api + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + optional + pkg:pypi/zipp@3.17.0 + + + https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.2.json.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.2.json.bin new file mode 100644 index 00000000..f9f876b3 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.2.json.bin @@ -0,0 +1,1140 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs@23.1.0", + "description": "Classes Without Boilerplate", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz" + } + ], + "name": "attrs", + "purl": "pkg:pypi/attrs@23.1.0", + "scope": "optional", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean.py@4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "name": "boolean.py", + "purl": "pkg:pypi/boolean.py@4.0", + "scope": "optional", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib@5.1.1", + "description": "Python library for CycloneDX", + "name": "cyclonedx-python-lib", + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "scope": "optional", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml@0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "name": "defusedxml", + "purl": "pkg:pypi/defusedxml@0.7.1", + "scope": "optional", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn@1.5.1", + "description": "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz" + } + ], + "name": "fqdn", + "purl": "pkg:pypi/fqdn@1.5.1", + "scope": "optional", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna@3.4", + "description": "Internationalized Domain Names in Applications (IDNA)", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4.tar.gz" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@3.4", + "scope": "optional", + "type": "library", + "version": "3.4" + }, + { + "bom-ref": "importlib-resources@6.1.1", + "description": "Read resources from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz" + } + ], + "name": "importlib-resources", + "purl": "pkg:pypi/importlib-resources@6.1.1", + "scope": "optional", + "type": "library", + "version": "6.1.1" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "scope": "optional", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer@2.4", + "description": "Identify specific nodes in a JSON document (RFC 6901)", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz" + } + ], + "name": "jsonpointer", + "purl": "pkg:pypi/jsonpointer@2.4", + "scope": "optional", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema@4.19.2", + "description": "An implementation of JSON Schema validation for Python", + "name": "jsonschema", + "purl": "pkg:pypi/jsonschema@4.19.2", + "scope": "optional", + "type": "library", + "version": "4.19.2" + }, + { + "bom-ref": "jsonschema-specifications@2023.7.1", + "description": "The JSON Schema meta-schemas and vocabularies, exposed as a Registry", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz" + } + ], + "name": "jsonschema-specifications", + "purl": "pkg:pypi/jsonschema-specifications@2023.7.1", + "scope": "optional", + "type": "library", + "version": "2023.7.1" + }, + { + "bom-ref": "license-expression@30.1.1", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "name": "license-expression", + "purl": "pkg:pypi/license-expression@30.1.1", + "scope": "optional", + "type": "library", + "version": "30.1.1" + }, + { + "bom-ref": "lxml@4.9.3", + "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", + "name": "lxml", + "purl": "pkg:pypi/lxml@4.9.3", + "scope": "optional", + "type": "library", + "version": "4.9.3" + }, + { + "bom-ref": "packageurl-python@0.11.2", + "description": "A purl aka. Package URL parser and builder", + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python@0.11.2", + "scope": "optional", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "pkgutil-resolve-name@1.3.10", + "description": "Resolve a name to an object.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz" + } + ], + "name": "pkgutil-resolve-name", + "purl": "pkg:pypi/pkgutil-resolve-name@1.3.10", + "scope": "optional", + "type": "library", + "version": "1.3.10" + }, + { + "bom-ref": "py-serializable@0.15.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "name": "py-serializable", + "purl": "pkg:pypi/py-serializable@0.15.0", + "scope": "optional", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "scope": "optional", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing@0.30.2", + "description": "JSON Referencing + Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz" + } + ], + "name": "referencing", + "purl": "pkg:pypi/referencing@0.30.2", + "scope": "optional", + "type": "library", + "version": "0.30.2" + }, + { + "bom-ref": "rfc3339-validator@0.1.4", + "description": "A pure python RFC3339 validator", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz" + } + ], + "name": "rfc3339-validator", + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "scope": "optional", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987@1.3.8", + "description": "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz" + } + ], + "name": "rfc3987", + "purl": "pkg:pypi/rfc3987@1.3.8", + "scope": "optional", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py@0.12.0", + "description": "Python bindings to Rust's persistent data structures (rpds)", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz" + } + ], + "name": "rpds-py", + "purl": "pkg:pypi/rpds-py@0.12.0", + "scope": "optional", + "type": "library", + "version": "0.12.0" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "scope": "optional", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers@2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "name": "sortedcontainers", + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "scope": "optional", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "scope": "optional", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template@1.3.0", + "description": "RFC 6570 URI Template Processor", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl" + } + ], + "name": "uri-template", + "purl": "pkg:pypi/uri-template@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors@1.13", + "description": "A library for working with the color formats defined by HTML and CSS.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz" + } + ], + "name": "webcolors", + "purl": "pkg:pypi/webcolors@1.13", + "scope": "optional", + "type": "library", + "version": "1.13" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0", + "scope": "optional", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "attrs@23.1.0" + }, + { + "ref": "boolean.py@4.0" + }, + { + "dependsOn": [ + "jsonschema@4.19.2", + "license-expression@30.1.1", + "lxml@4.9.3", + "packageurl-python@0.11.2", + "py-serializable@0.15.0", + "sortedcontainers@2.4.0" + ], + "ref": "cyclonedx-python-lib@5.1.1" + }, + { + "ref": "defusedxml@0.7.1" + }, + { + "ref": "fqdn@1.5.1" + }, + { + "ref": "idna@3.4" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-resources@6.1.1" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "ref": "jsonpointer@2.4" + }, + { + "dependsOn": [ + "importlib-resources@6.1.1", + "referencing@0.30.2" + ], + "ref": "jsonschema-specifications@2023.7.1" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "fqdn@1.5.1", + "idna@3.4", + "importlib-resources@6.1.1", + "isoduration@20.11.0", + "jsonpointer@2.4", + "jsonschema-specifications@2023.7.1", + "pkgutil-resolve-name@1.3.10", + "referencing@0.30.2", + "rfc3339-validator@0.1.4", + "rfc3987@1.3.8", + "rpds-py@0.12.0", + "uri-template@1.3.0", + "webcolors@1.13" + ], + "ref": "jsonschema@4.19.2" + }, + { + "dependsOn": [ + "boolean.py@4.0" + ], + "ref": "license-expression@30.1.1" + }, + { + "ref": "lxml@4.9.3" + }, + { + "ref": "packageurl-python@0.11.2" + }, + { + "ref": "pkgutil-resolve-name@1.3.10" + }, + { + "dependsOn": [ + "defusedxml@0.7.1" + ], + "ref": "py-serializable@0.15.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "rpds-py@0.12.0" + ], + "ref": "referencing@0.30.2" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "rfc3339-validator@0.1.4" + }, + { + "ref": "rfc3987@1.3.8" + }, + { + "ref": "rpds-py@0.12.0" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "sortedcontainers@2.4.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + }, + { + "ref": "uri-template@1.3.0" + }, + { + "ref": "webcolors@1.13" + }, + { + "dependsOn": [ + "cyclonedx-python-lib@5.1.1" + ], + "ref": "with-extras" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.2.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.2.xml.bin new file mode 100644 index 00000000..c8224de0 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.2.xml.bin @@ -0,0 +1,874 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + + + arrow + 1.3.0 + Better dates & times for Python + optional + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + attrs + 23.1.0 + Classes Without Boilerplate + optional + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz + from legacy-api + + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean.py@4.0 + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + optional + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz + from legacy-api + + + + + idna + 3.4 + Internationalized Domain Names in Applications (IDNA) + optional + pkg:pypi/idna@3.4 + + + https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/idna/#idna-3.4.tar.gz + from legacy-api + + + + + importlib-resources + 6.1.1 + Read resources from Python packages + optional + pkg:pypi/importlib-resources@6.1.1 + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + optional + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + optional + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz + from legacy-api + + + + + jsonschema + 4.19.2 + An implementation of JSON Schema validation for Python + optional + pkg:pypi/jsonschema@4.19.2 + + + jsonschema-specifications + 2023.7.1 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + optional + pkg:pypi/jsonschema-specifications@2023.7.1 + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz + from legacy-api + + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + + lxml + 4.9.3 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + optional + pkg:pypi/lxml@4.9.3 + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + + pkgutil-resolve-name + 1.3.10 + Resolve a name to an object. + optional + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz + from legacy-api + + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + optional + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + referencing + 0.30.2 + JSON Referencing + Python + optional + pkg:pypi/referencing@0.30.2 + + + https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz + from legacy-api + + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + optional + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz + from legacy-api + + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + optional + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz + from legacy-api + + + + + rpds-py + 0.12.0 + Python bindings to Rust's persistent data structures (rpds) + optional + pkg:pypi/rpds-py@0.12.0 + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + optional + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + optional + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + optional + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz + from legacy-api + + + https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl + from legacy-api + + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + optional + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz + from legacy-api + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + optional + pkg:pypi/zipp@3.17.0 + + + https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.3.json.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.3.json.bin new file mode 100644 index 00000000..c6f3eedd --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.3.json.bin @@ -0,0 +1,2142 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs@23.1.0", + "description": "Classes Without Boilerplate", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz" + } + ], + "name": "attrs", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/attrs@23.1.0", + "scope": "optional", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean.py@4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "name": "boolean.py", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/boolean.py@4.0", + "scope": "optional", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib@5.1.1", + "description": "Python library for CycloneDX", + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "scope": "optional", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml@0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "name": "defusedxml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/defusedxml@0.7.1", + "scope": "optional", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn@1.5.1", + "description": "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz" + } + ], + "name": "fqdn", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/fqdn@1.5.1", + "scope": "optional", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna@3.4", + "description": "Internationalized Domain Names in Applications (IDNA)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4.tar.gz" + } + ], + "name": "idna", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/idna@3.4", + "scope": "optional", + "type": "library", + "version": "3.4" + }, + { + "bom-ref": "importlib-resources@6.1.1", + "description": "Read resources from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz" + } + ], + "name": "importlib-resources", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/importlib-resources@6.1.1", + "scope": "optional", + "type": "library", + "version": "6.1.1" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "scope": "optional", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer@2.4", + "description": "Identify specific nodes in a JSON document (RFC 6901)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz" + } + ], + "name": "jsonpointer", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/jsonpointer@2.4", + "scope": "optional", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema@4.19.2", + "description": "An implementation of JSON Schema validation for Python", + "name": "jsonschema", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:python:package:required-extra", + "value": "format" + } + ], + "purl": "pkg:pypi/jsonschema@4.19.2", + "scope": "optional", + "type": "library", + "version": "4.19.2" + }, + { + "bom-ref": "jsonschema-specifications@2023.7.1", + "description": "The JSON Schema meta-schemas and vocabularies, exposed as a Registry", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz" + } + ], + "name": "jsonschema-specifications", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/jsonschema-specifications@2023.7.1", + "scope": "optional", + "type": "library", + "version": "2023.7.1" + }, + { + "bom-ref": "license-expression@30.1.1", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "name": "license-expression", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/license-expression@30.1.1", + "scope": "optional", + "type": "library", + "version": "30.1.1" + }, + { + "bom-ref": "lxml@4.9.3", + "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", + "name": "lxml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/lxml@4.9.3", + "scope": "optional", + "type": "library", + "version": "4.9.3" + }, + { + "bom-ref": "packageurl-python@0.11.2", + "description": "A purl aka. Package URL parser and builder", + "name": "packageurl-python", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/packageurl-python@0.11.2", + "scope": "optional", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "pkgutil-resolve-name@1.3.10", + "description": "Resolve a name to an object.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz" + } + ], + "name": "pkgutil-resolve-name", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/pkgutil-resolve-name@1.3.10", + "scope": "optional", + "type": "library", + "version": "1.3.10" + }, + { + "bom-ref": "py-serializable@0.15.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "name": "py-serializable", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/py-serializable@0.15.0", + "scope": "optional", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "scope": "optional", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing@0.30.2", + "description": "JSON Referencing + Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz" + } + ], + "name": "referencing", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/referencing@0.30.2", + "scope": "optional", + "type": "library", + "version": "0.30.2" + }, + { + "bom-ref": "rfc3339-validator@0.1.4", + "description": "A pure python RFC3339 validator", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz" + } + ], + "name": "rfc3339-validator", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "scope": "optional", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987@1.3.8", + "description": "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz" + } + ], + "name": "rfc3987", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/rfc3987@1.3.8", + "scope": "optional", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py@0.12.0", + "description": "Python bindings to Rust's persistent data structures (rpds)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz" + } + ], + "name": "rpds-py", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/rpds-py@0.12.0", + "scope": "optional", + "type": "library", + "version": "0.12.0" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "scope": "optional", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers@2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "name": "sortedcontainers", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "scope": "optional", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "scope": "optional", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template@1.3.0", + "description": "RFC 6570 URI Template Processor", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl" + } + ], + "name": "uri-template", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/uri-template@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors@1.13", + "description": "A library for working with the color formats defined by HTML and CSS.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz" + } + ], + "name": "webcolors", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/webcolors@1.13", + "scope": "optional", + "type": "library", + "version": "1.13" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/zipp@3.17.0", + "scope": "optional", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "attrs@23.1.0" + }, + { + "ref": "boolean.py@4.0" + }, + { + "dependsOn": [ + "jsonschema@4.19.2", + "license-expression@30.1.1", + "lxml@4.9.3", + "packageurl-python@0.11.2", + "py-serializable@0.15.0", + "sortedcontainers@2.4.0" + ], + "ref": "cyclonedx-python-lib@5.1.1" + }, + { + "ref": "defusedxml@0.7.1" + }, + { + "ref": "fqdn@1.5.1" + }, + { + "ref": "idna@3.4" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-resources@6.1.1" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "ref": "jsonpointer@2.4" + }, + { + "dependsOn": [ + "importlib-resources@6.1.1", + "referencing@0.30.2" + ], + "ref": "jsonschema-specifications@2023.7.1" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "fqdn@1.5.1", + "idna@3.4", + "importlib-resources@6.1.1", + "isoduration@20.11.0", + "jsonpointer@2.4", + "jsonschema-specifications@2023.7.1", + "pkgutil-resolve-name@1.3.10", + "referencing@0.30.2", + "rfc3339-validator@0.1.4", + "rfc3987@1.3.8", + "rpds-py@0.12.0", + "uri-template@1.3.0", + "webcolors@1.13" + ], + "ref": "jsonschema@4.19.2" + }, + { + "dependsOn": [ + "boolean.py@4.0" + ], + "ref": "license-expression@30.1.1" + }, + { + "ref": "lxml@4.9.3" + }, + { + "ref": "packageurl-python@0.11.2" + }, + { + "ref": "pkgutil-resolve-name@1.3.10" + }, + { + "dependsOn": [ + "defusedxml@0.7.1" + ], + "ref": "py-serializable@0.15.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "rpds-py@0.12.0" + ], + "ref": "referencing@0.30.2" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "rfc3339-validator@0.1.4" + }, + { + "ref": "rfc3987@1.3.8" + }, + { + "ref": "rpds-py@0.12.0" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "sortedcontainers@2.4.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + }, + { + "ref": "uri-template@1.3.0" + }, + { + "ref": "webcolors@1.13" + }, + { + "dependsOn": [ + "cyclonedx-python-lib@5.1.1" + ], + "ref": "with-extras" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "my-extra" + } + ], + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.3.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.3.xml.bin new file mode 100644 index 00000000..f6bbeb3e --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.3.xml.bin @@ -0,0 +1,1372 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + my-extra + + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + optional + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + main + + + + attrs + 23.1.0 + Classes Without Boilerplate + optional + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl + from legacy-api + + 1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 + + + + https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz + from legacy-api + + 6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 + + + + + main + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean.py@4.0 + + main + + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + main + json-validation + xml-validation + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + main + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + optional + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl + from legacy-api + + 3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014 + + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz + from legacy-api + + 105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f + + + + + main + + + + idna + 3.4 + Internationalized Domain Names in Applications (IDNA) + optional + pkg:pypi/idna@3.4 + + + https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl + from legacy-api + + 90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 + + + + https://pypi.org/simple/idna/#idna-3.4.tar.gz + from legacy-api + + 814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 + + + + + main + + + + importlib-resources + 6.1.1 + Read resources from Python packages + optional + pkg:pypi/importlib-resources@6.1.1 + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl + from legacy-api + + e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6 + + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz + from legacy-api + + 3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a + + + + + main + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + optional + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + main + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + optional + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl + from legacy-api + + 15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a + + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz + from legacy-api + + 585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88 + + + + + main + + + + jsonschema + 4.19.2 + An implementation of JSON Schema validation for Python + optional + pkg:pypi/jsonschema@4.19.2 + + main + format + + + + jsonschema-specifications + 2023.7.1 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + optional + pkg:pypi/jsonschema-specifications@2023.7.1 + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl + from legacy-api + + 05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 + + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz + from legacy-api + + c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb + + + + + main + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + main + + + + lxml + 4.9.3 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + optional + pkg:pypi/lxml@4.9.3 + + main + + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + main + + + + pkgutil-resolve-name + 1.3.10 + Resolve a name to an object. + optional + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl + from legacy-api + + ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e + + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz + from legacy-api + + 357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174 + + + + + main + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + main + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + optional + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + main + + + + referencing + 0.30.2 + JSON Referencing + Python + optional + pkg:pypi/referencing@0.30.2 + + + https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl + from legacy-api + + 449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf + + + + https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz + from legacy-api + + 794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0 + + + + + main + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + optional + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl + from legacy-api + + 24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa + + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz + from legacy-api + + 138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b + + + + + main + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + optional + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl + from legacy-api + + 10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53 + + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz + from legacy-api + + d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733 + + + + + main + + + + rpds-py + 0.12.0 + Python bindings to Rust's persistent data structures (rpds) + optional + pkg:pypi/rpds-py@0.12.0 + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl + from legacy-api + + c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + 30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl + from legacy-api + + 5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl + from legacy-api + + 171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl + from legacy-api + + 57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl + from legacy-api + + 7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl + from legacy-api + + 1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl + from legacy-api + + 0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl + from legacy-api + + 33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl + from legacy-api + + d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl + from legacy-api + + 1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl + from legacy-api + + dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl + from legacy-api + + c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl + from legacy-api + + 9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + 2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl + from legacy-api + + 81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl + from legacy-api + + 08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl + from legacy-api + + 4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl + from legacy-api + + b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl + from legacy-api + + 8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl + from legacy-api + + 6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl + from legacy-api + + a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl + from legacy-api + + 0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl + from legacy-api + + b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl + from legacy-api + + 3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl + from legacy-api + + e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl + from legacy-api + + bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl + from legacy-api + + 1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + 48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl + from legacy-api + + 240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl + from legacy-api + + 25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl + from legacy-api + + a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl + from legacy-api + + b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl + from legacy-api + + cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl + from legacy-api + + cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl + from legacy-api + + e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl + from legacy-api + + 513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl + from legacy-api + + 1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl + from legacy-api + + 68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl + from legacy-api + + 6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz + from legacy-api + + 7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80 + + + + + main + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + optional + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + main + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + optional + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + main + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + optional + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz + from legacy-api + + 0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 + + + + https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl + from legacy-api + + a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363 + + + + + main + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + optional + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl + from legacy-api + + 29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf + + + + https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz + from legacy-api + + c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a + + + + + main + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + optional + pkg:pypi/zipp@3.17.0 + + + https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + 0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 + + + + https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + 84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + + + + + main + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.4.json.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.4.json.bin new file mode 100644 index 00000000..04eeeac3 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.4.json.bin @@ -0,0 +1,2138 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs@23.1.0", + "description": "Classes Without Boilerplate", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz" + } + ], + "name": "attrs", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/attrs@23.1.0", + "scope": "optional", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean.py@4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "name": "boolean.py", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/boolean.py@4.0", + "scope": "optional", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib@5.1.1", + "description": "Python library for CycloneDX", + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "scope": "optional", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml@0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "name": "defusedxml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/defusedxml@0.7.1", + "scope": "optional", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn@1.5.1", + "description": "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz" + } + ], + "name": "fqdn", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/fqdn@1.5.1", + "scope": "optional", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna@3.4", + "description": "Internationalized Domain Names in Applications (IDNA)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4.tar.gz" + } + ], + "name": "idna", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/idna@3.4", + "scope": "optional", + "type": "library", + "version": "3.4" + }, + { + "bom-ref": "importlib-resources@6.1.1", + "description": "Read resources from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz" + } + ], + "name": "importlib-resources", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/importlib-resources@6.1.1", + "scope": "optional", + "type": "library", + "version": "6.1.1" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "scope": "optional", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer@2.4", + "description": "Identify specific nodes in a JSON document (RFC 6901)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz" + } + ], + "name": "jsonpointer", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/jsonpointer@2.4", + "scope": "optional", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema@4.19.2", + "description": "An implementation of JSON Schema validation for Python", + "name": "jsonschema", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:python:package:required-extra", + "value": "format" + } + ], + "purl": "pkg:pypi/jsonschema@4.19.2", + "scope": "optional", + "type": "library", + "version": "4.19.2" + }, + { + "bom-ref": "jsonschema-specifications@2023.7.1", + "description": "The JSON Schema meta-schemas and vocabularies, exposed as a Registry", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz" + } + ], + "name": "jsonschema-specifications", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/jsonschema-specifications@2023.7.1", + "scope": "optional", + "type": "library", + "version": "2023.7.1" + }, + { + "bom-ref": "license-expression@30.1.1", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "name": "license-expression", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/license-expression@30.1.1", + "scope": "optional", + "type": "library", + "version": "30.1.1" + }, + { + "bom-ref": "lxml@4.9.3", + "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", + "name": "lxml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/lxml@4.9.3", + "scope": "optional", + "type": "library", + "version": "4.9.3" + }, + { + "bom-ref": "packageurl-python@0.11.2", + "description": "A purl aka. Package URL parser and builder", + "name": "packageurl-python", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/packageurl-python@0.11.2", + "scope": "optional", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "pkgutil-resolve-name@1.3.10", + "description": "Resolve a name to an object.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz" + } + ], + "name": "pkgutil-resolve-name", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/pkgutil-resolve-name@1.3.10", + "scope": "optional", + "type": "library", + "version": "1.3.10" + }, + { + "bom-ref": "py-serializable@0.15.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "name": "py-serializable", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/py-serializable@0.15.0", + "scope": "optional", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "scope": "optional", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing@0.30.2", + "description": "JSON Referencing + Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz" + } + ], + "name": "referencing", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/referencing@0.30.2", + "scope": "optional", + "type": "library", + "version": "0.30.2" + }, + { + "bom-ref": "rfc3339-validator@0.1.4", + "description": "A pure python RFC3339 validator", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz" + } + ], + "name": "rfc3339-validator", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "scope": "optional", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987@1.3.8", + "description": "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz" + } + ], + "name": "rfc3987", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/rfc3987@1.3.8", + "scope": "optional", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py@0.12.0", + "description": "Python bindings to Rust's persistent data structures (rpds)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz" + } + ], + "name": "rpds-py", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/rpds-py@0.12.0", + "scope": "optional", + "type": "library", + "version": "0.12.0" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "scope": "optional", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers@2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "name": "sortedcontainers", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "scope": "optional", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "scope": "optional", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template@1.3.0", + "description": "RFC 6570 URI Template Processor", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl" + } + ], + "name": "uri-template", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/uri-template@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors@1.13", + "description": "A library for working with the color formats defined by HTML and CSS.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz" + } + ], + "name": "webcolors", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/webcolors@1.13", + "scope": "optional", + "type": "library", + "version": "1.13" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/zipp@3.17.0", + "scope": "optional", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "attrs@23.1.0" + }, + { + "ref": "boolean.py@4.0" + }, + { + "dependsOn": [ + "jsonschema@4.19.2", + "license-expression@30.1.1", + "lxml@4.9.3", + "packageurl-python@0.11.2", + "py-serializable@0.15.0", + "sortedcontainers@2.4.0" + ], + "ref": "cyclonedx-python-lib@5.1.1" + }, + { + "ref": "defusedxml@0.7.1" + }, + { + "ref": "fqdn@1.5.1" + }, + { + "ref": "idna@3.4" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-resources@6.1.1" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "ref": "jsonpointer@2.4" + }, + { + "dependsOn": [ + "importlib-resources@6.1.1", + "referencing@0.30.2" + ], + "ref": "jsonschema-specifications@2023.7.1" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "fqdn@1.5.1", + "idna@3.4", + "importlib-resources@6.1.1", + "isoduration@20.11.0", + "jsonpointer@2.4", + "jsonschema-specifications@2023.7.1", + "pkgutil-resolve-name@1.3.10", + "referencing@0.30.2", + "rfc3339-validator@0.1.4", + "rfc3987@1.3.8", + "rpds-py@0.12.0", + "uri-template@1.3.0", + "webcolors@1.13" + ], + "ref": "jsonschema@4.19.2" + }, + { + "dependsOn": [ + "boolean.py@4.0" + ], + "ref": "license-expression@30.1.1" + }, + { + "ref": "lxml@4.9.3" + }, + { + "ref": "packageurl-python@0.11.2" + }, + { + "ref": "pkgutil-resolve-name@1.3.10" + }, + { + "dependsOn": [ + "defusedxml@0.7.1" + ], + "ref": "py-serializable@0.15.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "rpds-py@0.12.0" + ], + "ref": "referencing@0.30.2" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "rfc3339-validator@0.1.4" + }, + { + "ref": "rfc3987@1.3.8" + }, + { + "ref": "rpds-py@0.12.0" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "sortedcontainers@2.4.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + }, + { + "ref": "uri-template@1.3.0" + }, + { + "ref": "webcolors@1.13" + }, + { + "dependsOn": [ + "cyclonedx-python-lib@5.1.1" + ], + "ref": "with-extras" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "my-extra" + } + ], + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.4.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.4.xml.bin new file mode 100644 index 00000000..a8c170b9 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.4.xml.bin @@ -0,0 +1,1399 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + my-extra + + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + optional + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + main + + + + attrs + 23.1.0 + Classes Without Boilerplate + optional + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl + from legacy-api + + 1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 + + + + https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz + from legacy-api + + 6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 + + + + + main + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean.py@4.0 + + main + + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + main + json-validation + xml-validation + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + main + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + optional + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl + from legacy-api + + 3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014 + + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz + from legacy-api + + 105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f + + + + + main + + + + idna + 3.4 + Internationalized Domain Names in Applications (IDNA) + optional + pkg:pypi/idna@3.4 + + + https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl + from legacy-api + + 90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 + + + + https://pypi.org/simple/idna/#idna-3.4.tar.gz + from legacy-api + + 814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 + + + + + main + + + + importlib-resources + 6.1.1 + Read resources from Python packages + optional + pkg:pypi/importlib-resources@6.1.1 + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl + from legacy-api + + e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6 + + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz + from legacy-api + + 3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a + + + + + main + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + optional + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + main + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + optional + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl + from legacy-api + + 15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a + + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz + from legacy-api + + 585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88 + + + + + main + + + + jsonschema + 4.19.2 + An implementation of JSON Schema validation for Python + optional + pkg:pypi/jsonschema@4.19.2 + + main + format + + + + jsonschema-specifications + 2023.7.1 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + optional + pkg:pypi/jsonschema-specifications@2023.7.1 + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl + from legacy-api + + 05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 + + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz + from legacy-api + + c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb + + + + + main + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + main + + + + lxml + 4.9.3 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + optional + pkg:pypi/lxml@4.9.3 + + main + + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + main + + + + pkgutil-resolve-name + 1.3.10 + Resolve a name to an object. + optional + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl + from legacy-api + + ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e + + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz + from legacy-api + + 357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174 + + + + + main + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + main + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + optional + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + main + + + + referencing + 0.30.2 + JSON Referencing + Python + optional + pkg:pypi/referencing@0.30.2 + + + https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl + from legacy-api + + 449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf + + + + https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz + from legacy-api + + 794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0 + + + + + main + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + optional + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl + from legacy-api + + 24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa + + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz + from legacy-api + + 138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b + + + + + main + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + optional + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl + from legacy-api + + 10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53 + + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz + from legacy-api + + d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733 + + + + + main + + + + rpds-py + 0.12.0 + Python bindings to Rust's persistent data structures (rpds) + optional + pkg:pypi/rpds-py@0.12.0 + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl + from legacy-api + + c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + 30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl + from legacy-api + + 5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl + from legacy-api + + 171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl + from legacy-api + + 57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl + from legacy-api + + 7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl + from legacy-api + + 1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl + from legacy-api + + 0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl + from legacy-api + + 33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl + from legacy-api + + d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl + from legacy-api + + 1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl + from legacy-api + + dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl + from legacy-api + + c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl + from legacy-api + + 9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + 2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl + from legacy-api + + 81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl + from legacy-api + + 08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl + from legacy-api + + 4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl + from legacy-api + + b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl + from legacy-api + + 8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl + from legacy-api + + 6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl + from legacy-api + + a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl + from legacy-api + + 0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl + from legacy-api + + b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl + from legacy-api + + 3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl + from legacy-api + + e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl + from legacy-api + + bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl + from legacy-api + + 1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + 48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl + from legacy-api + + 240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl + from legacy-api + + 25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl + from legacy-api + + a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl + from legacy-api + + b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl + from legacy-api + + cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl + from legacy-api + + cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl + from legacy-api + + e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl + from legacy-api + + 513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl + from legacy-api + + 1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl + from legacy-api + + 68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl + from legacy-api + + 6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz + from legacy-api + + 7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80 + + + + + main + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + optional + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + main + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + optional + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + main + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + optional + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz + from legacy-api + + 0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 + + + + https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl + from legacy-api + + a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363 + + + + + main + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + optional + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl + from legacy-api + + 29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf + + + + https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz + from legacy-api + + c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a + + + + + main + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + optional + pkg:pypi/zipp@3.17.0 + + + https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + 0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 + + + + https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + 84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + + + + + main + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.5.json.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.5.json.bin new file mode 100644 index 00000000..db2452cd --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.5.json.bin @@ -0,0 +1,2138 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs@23.1.0", + "description": "Classes Without Boilerplate", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz" + } + ], + "name": "attrs", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/attrs@23.1.0", + "scope": "optional", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean.py@4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "name": "boolean.py", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/boolean.py@4.0", + "scope": "optional", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib@5.1.1", + "description": "Python library for CycloneDX", + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "scope": "optional", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml@0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "name": "defusedxml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/defusedxml@0.7.1", + "scope": "optional", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn@1.5.1", + "description": "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz" + } + ], + "name": "fqdn", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/fqdn@1.5.1", + "scope": "optional", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna@3.4", + "description": "Internationalized Domain Names in Applications (IDNA)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4.tar.gz" + } + ], + "name": "idna", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/idna@3.4", + "scope": "optional", + "type": "library", + "version": "3.4" + }, + { + "bom-ref": "importlib-resources@6.1.1", + "description": "Read resources from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz" + } + ], + "name": "importlib-resources", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/importlib-resources@6.1.1", + "scope": "optional", + "type": "library", + "version": "6.1.1" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "scope": "optional", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer@2.4", + "description": "Identify specific nodes in a JSON document (RFC 6901)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz" + } + ], + "name": "jsonpointer", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/jsonpointer@2.4", + "scope": "optional", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema@4.19.2", + "description": "An implementation of JSON Schema validation for Python", + "name": "jsonschema", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:python:package:required-extra", + "value": "format" + } + ], + "purl": "pkg:pypi/jsonschema@4.19.2", + "scope": "optional", + "type": "library", + "version": "4.19.2" + }, + { + "bom-ref": "jsonschema-specifications@2023.7.1", + "description": "The JSON Schema meta-schemas and vocabularies, exposed as a Registry", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz" + } + ], + "name": "jsonschema-specifications", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/jsonschema-specifications@2023.7.1", + "scope": "optional", + "type": "library", + "version": "2023.7.1" + }, + { + "bom-ref": "license-expression@30.1.1", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "name": "license-expression", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/license-expression@30.1.1", + "scope": "optional", + "type": "library", + "version": "30.1.1" + }, + { + "bom-ref": "lxml@4.9.3", + "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", + "name": "lxml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/lxml@4.9.3", + "scope": "optional", + "type": "library", + "version": "4.9.3" + }, + { + "bom-ref": "packageurl-python@0.11.2", + "description": "A purl aka. Package URL parser and builder", + "name": "packageurl-python", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/packageurl-python@0.11.2", + "scope": "optional", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "pkgutil-resolve-name@1.3.10", + "description": "Resolve a name to an object.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz" + } + ], + "name": "pkgutil-resolve-name", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/pkgutil-resolve-name@1.3.10", + "scope": "optional", + "type": "library", + "version": "1.3.10" + }, + { + "bom-ref": "py-serializable@0.15.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "name": "py-serializable", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/py-serializable@0.15.0", + "scope": "optional", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "scope": "optional", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing@0.30.2", + "description": "JSON Referencing + Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz" + } + ], + "name": "referencing", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/referencing@0.30.2", + "scope": "optional", + "type": "library", + "version": "0.30.2" + }, + { + "bom-ref": "rfc3339-validator@0.1.4", + "description": "A pure python RFC3339 validator", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz" + } + ], + "name": "rfc3339-validator", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "scope": "optional", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987@1.3.8", + "description": "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz" + } + ], + "name": "rfc3987", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/rfc3987@1.3.8", + "scope": "optional", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py@0.12.0", + "description": "Python bindings to Rust's persistent data structures (rpds)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz" + } + ], + "name": "rpds-py", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/rpds-py@0.12.0", + "scope": "optional", + "type": "library", + "version": "0.12.0" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "scope": "optional", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers@2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "name": "sortedcontainers", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "scope": "optional", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "scope": "optional", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template@1.3.0", + "description": "RFC 6570 URI Template Processor", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl" + } + ], + "name": "uri-template", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/uri-template@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors@1.13", + "description": "A library for working with the color formats defined by HTML and CSS.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz" + } + ], + "name": "webcolors", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/webcolors@1.13", + "scope": "optional", + "type": "library", + "version": "1.13" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/zipp@3.17.0", + "scope": "optional", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "attrs@23.1.0" + }, + { + "ref": "boolean.py@4.0" + }, + { + "dependsOn": [ + "jsonschema@4.19.2", + "license-expression@30.1.1", + "lxml@4.9.3", + "packageurl-python@0.11.2", + "py-serializable@0.15.0", + "sortedcontainers@2.4.0" + ], + "ref": "cyclonedx-python-lib@5.1.1" + }, + { + "ref": "defusedxml@0.7.1" + }, + { + "ref": "fqdn@1.5.1" + }, + { + "ref": "idna@3.4" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-resources@6.1.1" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "ref": "jsonpointer@2.4" + }, + { + "dependsOn": [ + "importlib-resources@6.1.1", + "referencing@0.30.2" + ], + "ref": "jsonschema-specifications@2023.7.1" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "fqdn@1.5.1", + "idna@3.4", + "importlib-resources@6.1.1", + "isoduration@20.11.0", + "jsonpointer@2.4", + "jsonschema-specifications@2023.7.1", + "pkgutil-resolve-name@1.3.10", + "referencing@0.30.2", + "rfc3339-validator@0.1.4", + "rfc3987@1.3.8", + "rpds-py@0.12.0", + "uri-template@1.3.0", + "webcolors@1.13" + ], + "ref": "jsonschema@4.19.2" + }, + { + "dependsOn": [ + "boolean.py@4.0" + ], + "ref": "license-expression@30.1.1" + }, + { + "ref": "lxml@4.9.3" + }, + { + "ref": "packageurl-python@0.11.2" + }, + { + "ref": "pkgutil-resolve-name@1.3.10" + }, + { + "dependsOn": [ + "defusedxml@0.7.1" + ], + "ref": "py-serializable@0.15.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "rpds-py@0.12.0" + ], + "ref": "referencing@0.30.2" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "rfc3339-validator@0.1.4" + }, + { + "ref": "rfc3987@1.3.8" + }, + { + "ref": "rpds-py@0.12.0" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "sortedcontainers@2.4.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + }, + { + "ref": "uri-template@1.3.0" + }, + { + "ref": "webcolors@1.13" + }, + { + "dependsOn": [ + "cyclonedx-python-lib@5.1.1" + ], + "ref": "with-extras" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "my-extra" + } + ], + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.5.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.5.xml.bin new file mode 100644 index 00000000..528baa03 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.5.xml.bin @@ -0,0 +1,1399 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + my-extra + + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + optional + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + main + + + + attrs + 23.1.0 + Classes Without Boilerplate + optional + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl + from legacy-api + + 1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 + + + + https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz + from legacy-api + + 6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 + + + + + main + + + + boolean.py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean.py@4.0 + + main + + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + main + json-validation + xml-validation + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + main + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + optional + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl + from legacy-api + + 3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014 + + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz + from legacy-api + + 105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f + + + + + main + + + + idna + 3.4 + Internationalized Domain Names in Applications (IDNA) + optional + pkg:pypi/idna@3.4 + + + https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl + from legacy-api + + 90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 + + + + https://pypi.org/simple/idna/#idna-3.4.tar.gz + from legacy-api + + 814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 + + + + + main + + + + importlib-resources + 6.1.1 + Read resources from Python packages + optional + pkg:pypi/importlib-resources@6.1.1 + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl + from legacy-api + + e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6 + + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz + from legacy-api + + 3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a + + + + + main + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + optional + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + main + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + optional + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl + from legacy-api + + 15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a + + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz + from legacy-api + + 585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88 + + + + + main + + + + jsonschema + 4.19.2 + An implementation of JSON Schema validation for Python + optional + pkg:pypi/jsonschema@4.19.2 + + main + format + + + + jsonschema-specifications + 2023.7.1 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + optional + pkg:pypi/jsonschema-specifications@2023.7.1 + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl + from legacy-api + + 05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 + + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz + from legacy-api + + c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb + + + + + main + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + main + + + + lxml + 4.9.3 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + optional + pkg:pypi/lxml@4.9.3 + + main + + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + main + + + + pkgutil-resolve-name + 1.3.10 + Resolve a name to an object. + optional + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl + from legacy-api + + ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e + + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz + from legacy-api + + 357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174 + + + + + main + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + main + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + optional + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + main + + + + referencing + 0.30.2 + JSON Referencing + Python + optional + pkg:pypi/referencing@0.30.2 + + + https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl + from legacy-api + + 449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf + + + + https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz + from legacy-api + + 794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0 + + + + + main + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + optional + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl + from legacy-api + + 24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa + + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz + from legacy-api + + 138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b + + + + + main + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + optional + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl + from legacy-api + + 10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53 + + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz + from legacy-api + + d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733 + + + + + main + + + + rpds-py + 0.12.0 + Python bindings to Rust's persistent data structures (rpds) + optional + pkg:pypi/rpds-py@0.12.0 + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl + from legacy-api + + c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + 30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl + from legacy-api + + 5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl + from legacy-api + + 171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl + from legacy-api + + 57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl + from legacy-api + + 7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl + from legacy-api + + 1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl + from legacy-api + + 0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl + from legacy-api + + 33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl + from legacy-api + + d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl + from legacy-api + + 1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl + from legacy-api + + dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl + from legacy-api + + c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl + from legacy-api + + 9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + 2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl + from legacy-api + + 81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl + from legacy-api + + 08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl + from legacy-api + + 4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl + from legacy-api + + b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl + from legacy-api + + 8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl + from legacy-api + + 6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl + from legacy-api + + a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl + from legacy-api + + 0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl + from legacy-api + + b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl + from legacy-api + + 3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl + from legacy-api + + e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl + from legacy-api + + bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl + from legacy-api + + 1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + 48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl + from legacy-api + + 240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl + from legacy-api + + 25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl + from legacy-api + + a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl + from legacy-api + + b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl + from legacy-api + + cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl + from legacy-api + + cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl + from legacy-api + + e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl + from legacy-api + + 513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl + from legacy-api + + 1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl + from legacy-api + + 68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl + from legacy-api + + 6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz + from legacy-api + + 7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80 + + + + + main + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + optional + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + main + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + optional + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + main + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + optional + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz + from legacy-api + + 0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 + + + + https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl + from legacy-api + + a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363 + + + + + main + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + optional + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl + from legacy-api + + 29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf + + + + https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz + from legacy-api + + c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a + + + + + main + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + optional + pkg:pypi/zipp@3.17.0 + + + https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + 0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 + + + + https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + 84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + + + + + main + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.0.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.0.xml.bin new file mode 100644 index 00000000..1d56ec37 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.0.xml.bin @@ -0,0 +1,229 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + optional + pkg:pypi/arrow@1.3.0 + false + + + attrs + 23.1.0 + Classes Without Boilerplate + optional + pkg:pypi/attrs@23.1.0 + false + + + boolean-py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean-py@4.0 + false + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + false + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + false + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + optional + pkg:pypi/fqdn@1.5.1 + false + + + idna + 3.4 + Internationalized Domain Names in Applications (IDNA) + optional + pkg:pypi/idna@3.4 + false + + + importlib-resources + 6.1.1 + Read resources from Python packages + optional + pkg:pypi/importlib-resources@6.1.1 + false + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + optional + pkg:pypi/isoduration@20.11.0 + false + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + optional + pkg:pypi/jsonpointer@2.4 + false + + + jsonschema + 4.19.2 + An implementation of JSON Schema validation for Python + optional + pkg:pypi/jsonschema@4.19.2 + false + + + jsonschema-specifications + 2023.7.1 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + optional + pkg:pypi/jsonschema-specifications@2023.7.1 + false + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + false + + + lxml + 4.9.3 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + optional + pkg:pypi/lxml@4.9.3 + false + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + false + + + pkgutil-resolve-name + 1.3.10 + Resolve a name to an object. + optional + pkg:pypi/pkgutil-resolve-name@1.3.10 + false + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + false + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + optional + pkg:pypi/python-dateutil@2.8.2 + false + + + referencing + 0.30.2 + JSON Referencing + Python + optional + pkg:pypi/referencing@0.30.2 + false + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + optional + pkg:pypi/rfc3339-validator@0.1.4 + false + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + optional + pkg:pypi/rfc3987@1.3.8 + false + + + rpds-py + 0.12.0 + Python bindings to Rust's persistent data structures (rpds) + optional + pkg:pypi/rpds-py@0.12.0 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + optional + pkg:pypi/six@1.16.0 + false + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + false + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + optional + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + optional + pkg:pypi/uri-template@1.3.0 + false + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + optional + pkg:pypi/webcolors@1.13 + false + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + optional + pkg:pypi/zipp@3.17.0 + false + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.1.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.1.xml.bin new file mode 100644 index 00000000..9a40829b --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.1.xml.bin @@ -0,0 +1,1229 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + optional + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + attrs + 23.1.0 + Classes Without Boilerplate + optional + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz + from legacy-api + + + + + boolean-py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean-py@4.0 + + + https://pypi.org/simple/boolean-py/#boolean.py-4.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/boolean-py/#boolean.py-4.0.tar.gz + from legacy-api + + + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1.tar.gz + from legacy-api + + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.org/simple/defusedxml/#defusedxml-0.7.1-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/defusedxml/#defusedxml-0.7.1.tar.gz + from legacy-api + + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + optional + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz + from legacy-api + + + + + idna + 3.4 + Internationalized Domain Names in Applications (IDNA) + optional + pkg:pypi/idna@3.4 + + + https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/idna/#idna-3.4.tar.gz + from legacy-api + + + + + importlib-resources + 6.1.1 + Read resources from Python packages + optional + pkg:pypi/importlib-resources@6.1.1 + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + optional + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + optional + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz + from legacy-api + + + + + jsonschema + 4.19.2 + An implementation of JSON Schema validation for Python + optional + pkg:pypi/jsonschema@4.19.2 + + + https://pypi.org/simple/jsonschema/#jsonschema-4.19.2-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/jsonschema/#jsonschema-4.19.2.tar.gz + from legacy-api + + + + + jsonschema-specifications + 2023.7.1 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + optional + pkg:pypi/jsonschema-specifications@2023.7.1 + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz + from legacy-api + + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + + https://pypi.org/simple/license-expression/#license-expression-30.1.1.tar.gz + from legacy-api + + + https://pypi.org/simple/license-expression/#license_expression-30.1.1-py3-none-any.whl + from legacy-api + + + + + lxml + 4.9.3 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + optional + pkg:pypi/lxml@4.9.3 + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3.tar.gz + from legacy-api + + + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + + https://pypi.org/simple/packageurl-python/#packageurl-python-0.11.2.tar.gz + from legacy-api + + + https://pypi.org/simple/packageurl-python/#packageurl_python-0.11.2-py3-none-any.whl + from legacy-api + + + + + pkgutil-resolve-name + 1.3.10 + Resolve a name to an object. + optional + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz + from legacy-api + + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + + https://pypi.org/simple/py-serializable/#py-serializable-0.15.0.tar.gz + from legacy-api + + + https://pypi.org/simple/py-serializable/#py_serializable-0.15.0-py3-none-any.whl + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + optional + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + referencing + 0.30.2 + JSON Referencing + Python + optional + pkg:pypi/referencing@0.30.2 + + + https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz + from legacy-api + + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + optional + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz + from legacy-api + + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + optional + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz + from legacy-api + + + + + rpds-py + 0.12.0 + Python bindings to Rust's persistent data structures (rpds) + optional + pkg:pypi/rpds-py@0.12.0 + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + optional + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + + https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + optional + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + optional + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz + from legacy-api + + + https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl + from legacy-api + + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + optional + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz + from legacy-api + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + optional + pkg:pypi/zipp@3.17.0 + + + https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.2.json.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.2.json.bin new file mode 100644 index 00000000..2a8d2398 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.2.json.bin @@ -0,0 +1,1698 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs@23.1.0", + "description": "Classes Without Boilerplate", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz" + } + ], + "name": "attrs", + "purl": "pkg:pypi/attrs@23.1.0", + "scope": "optional", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean-py@4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/boolean-py/#boolean.py-4.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/boolean-py/#boolean.py-4.0.tar.gz" + } + ], + "name": "boolean-py", + "purl": "pkg:pypi/boolean-py@4.0", + "scope": "optional", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib@5.1.1", + "description": "Python library for CycloneDX", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1.tar.gz" + } + ], + "name": "cyclonedx-python-lib", + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "scope": "optional", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml@0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/defusedxml/#defusedxml-0.7.1-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/defusedxml/#defusedxml-0.7.1.tar.gz" + } + ], + "name": "defusedxml", + "purl": "pkg:pypi/defusedxml@0.7.1", + "scope": "optional", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn@1.5.1", + "description": "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz" + } + ], + "name": "fqdn", + "purl": "pkg:pypi/fqdn@1.5.1", + "scope": "optional", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna@3.4", + "description": "Internationalized Domain Names in Applications (IDNA)", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4.tar.gz" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@3.4", + "scope": "optional", + "type": "library", + "version": "3.4" + }, + { + "bom-ref": "importlib-resources@6.1.1", + "description": "Read resources from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz" + } + ], + "name": "importlib-resources", + "purl": "pkg:pypi/importlib-resources@6.1.1", + "scope": "optional", + "type": "library", + "version": "6.1.1" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "scope": "optional", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer@2.4", + "description": "Identify specific nodes in a JSON document (RFC 6901)", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz" + } + ], + "name": "jsonpointer", + "purl": "pkg:pypi/jsonpointer@2.4", + "scope": "optional", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema@4.19.2", + "description": "An implementation of JSON Schema validation for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema/#jsonschema-4.19.2-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema/#jsonschema-4.19.2.tar.gz" + } + ], + "name": "jsonschema", + "purl": "pkg:pypi/jsonschema@4.19.2", + "scope": "optional", + "type": "library", + "version": "4.19.2" + }, + { + "bom-ref": "jsonschema-specifications@2023.7.1", + "description": "The JSON Schema meta-schemas and vocabularies, exposed as a Registry", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz" + } + ], + "name": "jsonschema-specifications", + "purl": "pkg:pypi/jsonschema-specifications@2023.7.1", + "scope": "optional", + "type": "library", + "version": "2023.7.1" + }, + { + "bom-ref": "license-expression@30.1.1", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/license-expression/#license-expression-30.1.1.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/license-expression/#license_expression-30.1.1-py3-none-any.whl" + } + ], + "name": "license-expression", + "purl": "pkg:pypi/license-expression@30.1.1", + "scope": "optional", + "type": "library", + "version": "30.1.1" + }, + { + "bom-ref": "lxml@4.9.3", + "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3.tar.gz" + } + ], + "name": "lxml", + "purl": "pkg:pypi/lxml@4.9.3", + "scope": "optional", + "type": "library", + "version": "4.9.3" + }, + { + "bom-ref": "packageurl-python@0.11.2", + "description": "A purl aka. Package URL parser and builder", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/#packageurl-python-0.11.2.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/#packageurl_python-0.11.2-py3-none-any.whl" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python@0.11.2", + "scope": "optional", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "pkgutil-resolve-name@1.3.10", + "description": "Resolve a name to an object.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz" + } + ], + "name": "pkgutil-resolve-name", + "purl": "pkg:pypi/pkgutil-resolve-name@1.3.10", + "scope": "optional", + "type": "library", + "version": "1.3.10" + }, + { + "bom-ref": "py-serializable@0.15.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/py-serializable/#py-serializable-0.15.0.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/py-serializable/#py_serializable-0.15.0-py3-none-any.whl" + } + ], + "name": "py-serializable", + "purl": "pkg:pypi/py-serializable@0.15.0", + "scope": "optional", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "scope": "optional", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing@0.30.2", + "description": "JSON Referencing + Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz" + } + ], + "name": "referencing", + "purl": "pkg:pypi/referencing@0.30.2", + "scope": "optional", + "type": "library", + "version": "0.30.2" + }, + { + "bom-ref": "rfc3339-validator@0.1.4", + "description": "A pure python RFC3339 validator", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz" + } + ], + "name": "rfc3339-validator", + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "scope": "optional", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987@1.3.8", + "description": "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz" + } + ], + "name": "rfc3987", + "purl": "pkg:pypi/rfc3987@1.3.8", + "scope": "optional", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py@0.12.0", + "description": "Python bindings to Rust's persistent data structures (rpds)", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz" + } + ], + "name": "rpds-py", + "purl": "pkg:pypi/rpds-py@0.12.0", + "scope": "optional", + "type": "library", + "version": "0.12.0" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "scope": "optional", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers@2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0.tar.gz" + } + ], + "name": "sortedcontainers", + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "scope": "optional", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "scope": "optional", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template@1.3.0", + "description": "RFC 6570 URI Template Processor", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl" + } + ], + "name": "uri-template", + "purl": "pkg:pypi/uri-template@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors@1.13", + "description": "A library for working with the color formats defined by HTML and CSS.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz" + } + ], + "name": "webcolors", + "purl": "pkg:pypi/webcolors@1.13", + "scope": "optional", + "type": "library", + "version": "1.13" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0", + "scope": "optional", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "attrs@23.1.0" + }, + { + "ref": "boolean-py@4.0" + }, + { + "dependsOn": [ + "jsonschema@4.19.2", + "license-expression@30.1.1", + "lxml@4.9.3", + "packageurl-python@0.11.2", + "py-serializable@0.15.0", + "sortedcontainers@2.4.0" + ], + "ref": "cyclonedx-python-lib@5.1.1" + }, + { + "ref": "defusedxml@0.7.1" + }, + { + "ref": "fqdn@1.5.1" + }, + { + "ref": "idna@3.4" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-resources@6.1.1" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "ref": "jsonpointer@2.4" + }, + { + "dependsOn": [ + "importlib-resources@6.1.1", + "referencing@0.30.2" + ], + "ref": "jsonschema-specifications@2023.7.1" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "fqdn@1.5.1", + "idna@3.4", + "importlib-resources@6.1.1", + "isoduration@20.11.0", + "jsonpointer@2.4", + "jsonschema-specifications@2023.7.1", + "pkgutil-resolve-name@1.3.10", + "referencing@0.30.2", + "rfc3339-validator@0.1.4", + "rfc3987@1.3.8", + "rpds-py@0.12.0", + "uri-template@1.3.0", + "webcolors@1.13" + ], + "ref": "jsonschema@4.19.2" + }, + { + "dependsOn": [ + "boolean-py@4.0" + ], + "ref": "license-expression@30.1.1" + }, + { + "ref": "lxml@4.9.3" + }, + { + "ref": "packageurl-python@0.11.2" + }, + { + "ref": "pkgutil-resolve-name@1.3.10" + }, + { + "dependsOn": [ + "defusedxml@0.7.1" + ], + "ref": "py-serializable@0.15.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "rpds-py@0.12.0" + ], + "ref": "referencing@0.30.2" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "rfc3339-validator@0.1.4" + }, + { + "ref": "rfc3987@1.3.8" + }, + { + "ref": "rpds-py@0.12.0" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "sortedcontainers@2.4.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + }, + { + "ref": "uri-template@1.3.0" + }, + { + "ref": "webcolors@1.13" + }, + { + "dependsOn": [ + "cyclonedx-python-lib@5.1.1" + ], + "ref": "with-extras" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.2.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.2.xml.bin new file mode 100644 index 00000000..300bf5ad --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.2.xml.bin @@ -0,0 +1,1324 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + + + arrow + 1.3.0 + Better dates & times for Python + optional + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + attrs + 23.1.0 + Classes Without Boilerplate + optional + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz + from legacy-api + + + + + boolean-py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean-py@4.0 + + + https://pypi.org/simple/boolean-py/#boolean.py-4.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/boolean-py/#boolean.py-4.0.tar.gz + from legacy-api + + + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1.tar.gz + from legacy-api + + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.org/simple/defusedxml/#defusedxml-0.7.1-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/defusedxml/#defusedxml-0.7.1.tar.gz + from legacy-api + + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + optional + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz + from legacy-api + + + + + idna + 3.4 + Internationalized Domain Names in Applications (IDNA) + optional + pkg:pypi/idna@3.4 + + + https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/idna/#idna-3.4.tar.gz + from legacy-api + + + + + importlib-resources + 6.1.1 + Read resources from Python packages + optional + pkg:pypi/importlib-resources@6.1.1 + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + optional + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + optional + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz + from legacy-api + + + + + jsonschema + 4.19.2 + An implementation of JSON Schema validation for Python + optional + pkg:pypi/jsonschema@4.19.2 + + + https://pypi.org/simple/jsonschema/#jsonschema-4.19.2-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/jsonschema/#jsonschema-4.19.2.tar.gz + from legacy-api + + + + + jsonschema-specifications + 2023.7.1 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + optional + pkg:pypi/jsonschema-specifications@2023.7.1 + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz + from legacy-api + + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + + https://pypi.org/simple/license-expression/#license-expression-30.1.1.tar.gz + from legacy-api + + + https://pypi.org/simple/license-expression/#license_expression-30.1.1-py3-none-any.whl + from legacy-api + + + + + lxml + 4.9.3 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + optional + pkg:pypi/lxml@4.9.3 + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win32.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/lxml/#lxml-4.9.3.tar.gz + from legacy-api + + + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + + https://pypi.org/simple/packageurl-python/#packageurl-python-0.11.2.tar.gz + from legacy-api + + + https://pypi.org/simple/packageurl-python/#packageurl_python-0.11.2-py3-none-any.whl + from legacy-api + + + + + pkgutil-resolve-name + 1.3.10 + Resolve a name to an object. + optional + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz + from legacy-api + + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + + https://pypi.org/simple/py-serializable/#py-serializable-0.15.0.tar.gz + from legacy-api + + + https://pypi.org/simple/py-serializable/#py_serializable-0.15.0-py3-none-any.whl + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + optional + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + referencing + 0.30.2 + JSON Referencing + Python + optional + pkg:pypi/referencing@0.30.2 + + + https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz + from legacy-api + + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + optional + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz + from legacy-api + + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + optional + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz + from legacy-api + + + + + rpds-py + 0.12.0 + Python bindings to Rust's persistent data structures (rpds) + optional + pkg:pypi/rpds-py@0.12.0 + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + optional + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + + https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + optional + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + optional + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz + from legacy-api + + + https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl + from legacy-api + + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + optional + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz + from legacy-api + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + optional + pkg:pypi/zipp@3.17.0 + + + https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.3.json.bin new file mode 100644 index 00000000..a6d6fd0d --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.3.json.bin @@ -0,0 +1,3188 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs@23.1.0", + "description": "Classes Without Boilerplate", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz" + } + ], + "name": "attrs", + "purl": "pkg:pypi/attrs@23.1.0", + "scope": "optional", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean-py@4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/boolean-py/#boolean.py-4.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/boolean-py/#boolean.py-4.0.tar.gz" + } + ], + "name": "boolean-py", + "purl": "pkg:pypi/boolean-py@4.0", + "scope": "optional", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib@5.1.1", + "description": "Python library for CycloneDX", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1.tar.gz" + } + ], + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "scope": "optional", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml@0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/defusedxml/#defusedxml-0.7.1-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/defusedxml/#defusedxml-0.7.1.tar.gz" + } + ], + "name": "defusedxml", + "purl": "pkg:pypi/defusedxml@0.7.1", + "scope": "optional", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn@1.5.1", + "description": "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz" + } + ], + "name": "fqdn", + "purl": "pkg:pypi/fqdn@1.5.1", + "scope": "optional", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna@3.4", + "description": "Internationalized Domain Names in Applications (IDNA)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4.tar.gz" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@3.4", + "scope": "optional", + "type": "library", + "version": "3.4" + }, + { + "bom-ref": "importlib-resources@6.1.1", + "description": "Read resources from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz" + } + ], + "name": "importlib-resources", + "purl": "pkg:pypi/importlib-resources@6.1.1", + "scope": "optional", + "type": "library", + "version": "6.1.1" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "scope": "optional", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer@2.4", + "description": "Identify specific nodes in a JSON document (RFC 6901)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz" + } + ], + "name": "jsonpointer", + "purl": "pkg:pypi/jsonpointer@2.4", + "scope": "optional", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema@4.19.2", + "description": "An implementation of JSON Schema validation for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema/#jsonschema-4.19.2-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema/#jsonschema-4.19.2.tar.gz" + } + ], + "name": "jsonschema", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "format" + } + ], + "purl": "pkg:pypi/jsonschema@4.19.2", + "scope": "optional", + "type": "library", + "version": "4.19.2" + }, + { + "bom-ref": "jsonschema-specifications@2023.7.1", + "description": "The JSON Schema meta-schemas and vocabularies, exposed as a Registry", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz" + } + ], + "name": "jsonschema-specifications", + "purl": "pkg:pypi/jsonschema-specifications@2023.7.1", + "scope": "optional", + "type": "library", + "version": "2023.7.1" + }, + { + "bom-ref": "license-expression@30.1.1", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "42375df653ad85e6f5b4b0385138b2dbea1f5d66360783d8625c3e4f97f11f0c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/license-expression/#license-expression-30.1.1.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8d7e5e2de0d04fc104a4f952c440e8f08a5ba63480a0dad015b294770b7e58ec" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/license-expression/#license_expression-30.1.1-py3-none-any.whl" + } + ], + "name": "license-expression", + "purl": "pkg:pypi/license-expression@30.1.1", + "scope": "optional", + "type": "library", + "version": "30.1.1" + }, + { + "bom-ref": "lxml@4.9.3", + "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3.tar.gz" + } + ], + "name": "lxml", + "purl": "pkg:pypi/lxml@4.9.3", + "scope": "optional", + "type": "library", + "version": "4.9.3" + }, + { + "bom-ref": "packageurl-python@0.11.2", + "description": "A purl aka. Package URL parser and builder", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/#packageurl-python-0.11.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/#packageurl_python-0.11.2-py3-none-any.whl" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python@0.11.2", + "scope": "optional", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "pkgutil-resolve-name@1.3.10", + "description": "Resolve a name to an object.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz" + } + ], + "name": "pkgutil-resolve-name", + "purl": "pkg:pypi/pkgutil-resolve-name@1.3.10", + "scope": "optional", + "type": "library", + "version": "1.3.10" + }, + { + "bom-ref": "py-serializable@0.15.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/py-serializable/#py-serializable-0.15.0.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/py-serializable/#py_serializable-0.15.0-py3-none-any.whl" + } + ], + "name": "py-serializable", + "purl": "pkg:pypi/py-serializable@0.15.0", + "scope": "optional", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "scope": "optional", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing@0.30.2", + "description": "JSON Referencing + Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz" + } + ], + "name": "referencing", + "purl": "pkg:pypi/referencing@0.30.2", + "scope": "optional", + "type": "library", + "version": "0.30.2" + }, + { + "bom-ref": "rfc3339-validator@0.1.4", + "description": "A pure python RFC3339 validator", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz" + } + ], + "name": "rfc3339-validator", + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "scope": "optional", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987@1.3.8", + "description": "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz" + } + ], + "name": "rfc3987", + "purl": "pkg:pypi/rfc3987@1.3.8", + "scope": "optional", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py@0.12.0", + "description": "Python bindings to Rust's persistent data structures (rpds)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz" + } + ], + "name": "rpds-py", + "purl": "pkg:pypi/rpds-py@0.12.0", + "scope": "optional", + "type": "library", + "version": "0.12.0" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "scope": "optional", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers@2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0.tar.gz" + } + ], + "name": "sortedcontainers", + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "scope": "optional", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "scope": "optional", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template@1.3.0", + "description": "RFC 6570 URI Template Processor", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl" + } + ], + "name": "uri-template", + "purl": "pkg:pypi/uri-template@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors@1.13", + "description": "A library for working with the color formats defined by HTML and CSS.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz" + } + ], + "name": "webcolors", + "purl": "pkg:pypi/webcolors@1.13", + "scope": "optional", + "type": "library", + "version": "1.13" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0", + "scope": "optional", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "attrs@23.1.0" + }, + { + "ref": "boolean-py@4.0" + }, + { + "dependsOn": [ + "jsonschema@4.19.2", + "license-expression@30.1.1", + "lxml@4.9.3", + "packageurl-python@0.11.2", + "py-serializable@0.15.0", + "sortedcontainers@2.4.0" + ], + "ref": "cyclonedx-python-lib@5.1.1" + }, + { + "ref": "defusedxml@0.7.1" + }, + { + "ref": "fqdn@1.5.1" + }, + { + "ref": "idna@3.4" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-resources@6.1.1" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "ref": "jsonpointer@2.4" + }, + { + "dependsOn": [ + "importlib-resources@6.1.1", + "referencing@0.30.2" + ], + "ref": "jsonschema-specifications@2023.7.1" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "fqdn@1.5.1", + "idna@3.4", + "importlib-resources@6.1.1", + "isoduration@20.11.0", + "jsonpointer@2.4", + "jsonschema-specifications@2023.7.1", + "pkgutil-resolve-name@1.3.10", + "referencing@0.30.2", + "rfc3339-validator@0.1.4", + "rfc3987@1.3.8", + "rpds-py@0.12.0", + "uri-template@1.3.0", + "webcolors@1.13" + ], + "ref": "jsonschema@4.19.2" + }, + { + "dependsOn": [ + "boolean-py@4.0" + ], + "ref": "license-expression@30.1.1" + }, + { + "ref": "lxml@4.9.3" + }, + { + "ref": "packageurl-python@0.11.2" + }, + { + "ref": "pkgutil-resolve-name@1.3.10" + }, + { + "dependsOn": [ + "defusedxml@0.7.1" + ], + "ref": "py-serializable@0.15.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "rpds-py@0.12.0" + ], + "ref": "referencing@0.30.2" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "rfc3339-validator@0.1.4" + }, + { + "ref": "rfc3987@1.3.8" + }, + { + "ref": "rpds-py@0.12.0" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "sortedcontainers@2.4.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + }, + { + "ref": "uri-template@1.3.0" + }, + { + "ref": "webcolors@1.13" + }, + { + "dependsOn": [ + "cyclonedx-python-lib@5.1.1" + ], + "ref": "with-extras" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "my-extra" + } + ], + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.3.xml.bin new file mode 100644 index 00000000..d93b0190 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.3.xml.bin @@ -0,0 +1,2067 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + my-extra + + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + optional + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + attrs + 23.1.0 + Classes Without Boilerplate + optional + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl + from legacy-api + + 1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 + + + + https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz + from legacy-api + + 6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 + + + + + + boolean-py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean-py@4.0 + + + https://pypi.org/simple/boolean-py/#boolean.py-4.0-py3-none-any.whl + from legacy-api + + 2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd + + + + https://pypi.org/simple/boolean-py/#boolean.py-4.0.tar.gz + from legacy-api + + 17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4 + + + + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1-py3-none-any.whl + from legacy-api + + 2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3 + + + + https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1.tar.gz + from legacy-api + + 215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6 + + + + + main + json-validation + xml-validation + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.org/simple/defusedxml/#defusedxml-0.7.1-py2.py3-none-any.whl + from legacy-api + + a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 + + + + https://pypi.org/simple/defusedxml/#defusedxml-0.7.1.tar.gz + from legacy-api + + 1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 + + + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + optional + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl + from legacy-api + + 3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014 + + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz + from legacy-api + + 105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f + + + + + + idna + 3.4 + Internationalized Domain Names in Applications (IDNA) + optional + pkg:pypi/idna@3.4 + + + https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl + from legacy-api + + 90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 + + + + https://pypi.org/simple/idna/#idna-3.4.tar.gz + from legacy-api + + 814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 + + + + + + importlib-resources + 6.1.1 + Read resources from Python packages + optional + pkg:pypi/importlib-resources@6.1.1 + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl + from legacy-api + + e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6 + + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz + from legacy-api + + 3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a + + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + optional + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + optional + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl + from legacy-api + + 15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a + + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz + from legacy-api + + 585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88 + + + + + + jsonschema + 4.19.2 + An implementation of JSON Schema validation for Python + optional + pkg:pypi/jsonschema@4.19.2 + + + https://pypi.org/simple/jsonschema/#jsonschema-4.19.2-py3-none-any.whl + from legacy-api + + eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc + + + + https://pypi.org/simple/jsonschema/#jsonschema-4.19.2.tar.gz + from legacy-api + + c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392 + + + + + format + + + + jsonschema-specifications + 2023.7.1 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + optional + pkg:pypi/jsonschema-specifications@2023.7.1 + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl + from legacy-api + + 05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 + + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz + from legacy-api + + c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb + + + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + + https://pypi.org/simple/license-expression/#license-expression-30.1.1.tar.gz + from legacy-api + + 42375df653ad85e6f5b4b0385138b2dbea1f5d66360783d8625c3e4f97f11f0c + + + + https://pypi.org/simple/license-expression/#license_expression-30.1.1-py3-none-any.whl + from legacy-api + + 8d7e5e2de0d04fc104a4f952c440e8f08a5ba63480a0dad015b294770b7e58ec + + + + + + lxml + 4.9.3 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + optional + pkg:pypi/lxml@4.9.3 + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl + from legacy-api + + b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + 1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win32.whl + from legacy-api + + 2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win_amd64.whl + from legacy-api + + 4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl + from legacy-api + + b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl + from legacy-api + + 411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl + from legacy-api + + cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl + from legacy-api + + 0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win32.whl + from legacy-api + + cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win_amd64.whl + from legacy-api + + 97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl + from legacy-api + + 1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl + from legacy-api + + 71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl + from legacy-api + + d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl + from legacy-api + + 0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win32.whl + from legacy-api + + 0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win_amd64.whl + from legacy-api + + 25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl + from legacy-api + + d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl + from legacy-api + + 48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl + from legacy-api + + 9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl + from legacy-api + + b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-win_amd64.whl + from legacy-api + + d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + 578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win32.whl + from legacy-api + + 704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win_amd64.whl + from legacy-api + + c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl + from legacy-api + + 64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl + from legacy-api + + 4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + 14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl + from legacy-api + + 0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl + from legacy-api + + aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win32.whl + from legacy-api + + 50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win_amd64.whl + from legacy-api + + bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl + from legacy-api + + 4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl + from legacy-api + + 53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + 7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl + from legacy-api + + 081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl + from legacy-api + + 23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win32.whl + from legacy-api + + 1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win_amd64.whl + from legacy-api + + 120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl + from legacy-api + + 8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl + from legacy-api + + 6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl + from legacy-api + + 3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl + from legacy-api + + fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win32.whl + from legacy-api + + 57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win_amd64.whl + from legacy-api + + 92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl + from legacy-api + + 9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl + from legacy-api + + 303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl + from legacy-api + + 5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl + from legacy-api + + bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win32.whl + from legacy-api + + 8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win_amd64.whl + from legacy-api + + 4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + 6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl + from legacy-api + + 5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + 9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl + from legacy-api + + 3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl + from legacy-api + + ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3.tar.gz + from legacy-api + + 48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c + + + + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + + https://pypi.org/simple/packageurl-python/#packageurl-python-0.11.2.tar.gz + from legacy-api + + 01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471 + + + + https://pypi.org/simple/packageurl-python/#packageurl_python-0.11.2-py3-none-any.whl + from legacy-api + + 799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84 + + + + + + pkgutil-resolve-name + 1.3.10 + Resolve a name to an object. + optional + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl + from legacy-api + + ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e + + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz + from legacy-api + + 357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174 + + + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + + https://pypi.org/simple/py-serializable/#py-serializable-0.15.0.tar.gz + from legacy-api + + 8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771 + + + + https://pypi.org/simple/py-serializable/#py_serializable-0.15.0-py3-none-any.whl + from legacy-api + + d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2 + + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + optional + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + referencing + 0.30.2 + JSON Referencing + Python + optional + pkg:pypi/referencing@0.30.2 + + + https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl + from legacy-api + + 449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf + + + + https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz + from legacy-api + + 794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0 + + + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + optional + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl + from legacy-api + + 24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa + + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz + from legacy-api + + 138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b + + + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + optional + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl + from legacy-api + + 10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53 + + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz + from legacy-api + + d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733 + + + + + + rpds-py + 0.12.0 + Python bindings to Rust's persistent data structures (rpds) + optional + pkg:pypi/rpds-py@0.12.0 + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl + from legacy-api + + c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + 30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl + from legacy-api + + 5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl + from legacy-api + + 171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl + from legacy-api + + 57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl + from legacy-api + + 7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl + from legacy-api + + 1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl + from legacy-api + + 0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl + from legacy-api + + 33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl + from legacy-api + + d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl + from legacy-api + + 1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl + from legacy-api + + dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl + from legacy-api + + c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl + from legacy-api + + 9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + 2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl + from legacy-api + + 81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl + from legacy-api + + 08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl + from legacy-api + + 4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl + from legacy-api + + b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl + from legacy-api + + 8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl + from legacy-api + + 6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl + from legacy-api + + a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl + from legacy-api + + 0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl + from legacy-api + + b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl + from legacy-api + + 3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl + from legacy-api + + e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl + from legacy-api + + bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl + from legacy-api + + 1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + 48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl + from legacy-api + + 240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl + from legacy-api + + 25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl + from legacy-api + + a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl + from legacy-api + + b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl + from legacy-api + + cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl + from legacy-api + + cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl + from legacy-api + + e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl + from legacy-api + + 513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl + from legacy-api + + 1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl + from legacy-api + + 68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl + from legacy-api + + 6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz + from legacy-api + + 7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + optional + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + + https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0-py2.py3-none-any.whl + from legacy-api + + a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 + + + + https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0.tar.gz + from legacy-api + + 25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 + + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + optional + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + optional + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz + from legacy-api + + 0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 + + + + https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl + from legacy-api + + a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363 + + + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + optional + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl + from legacy-api + + 29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf + + + + https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz + from legacy-api + + c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a + + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + optional + pkg:pypi/zipp@3.17.0 + + + https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + 0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 + + + + https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + 84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.4.json.bin new file mode 100644 index 00000000..6eaa1df7 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.4.json.bin @@ -0,0 +1,3184 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs@23.1.0", + "description": "Classes Without Boilerplate", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz" + } + ], + "name": "attrs", + "purl": "pkg:pypi/attrs@23.1.0", + "scope": "optional", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean-py@4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/boolean-py/#boolean.py-4.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/boolean-py/#boolean.py-4.0.tar.gz" + } + ], + "name": "boolean-py", + "purl": "pkg:pypi/boolean-py@4.0", + "scope": "optional", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib@5.1.1", + "description": "Python library for CycloneDX", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1.tar.gz" + } + ], + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "scope": "optional", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml@0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/defusedxml/#defusedxml-0.7.1-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/defusedxml/#defusedxml-0.7.1.tar.gz" + } + ], + "name": "defusedxml", + "purl": "pkg:pypi/defusedxml@0.7.1", + "scope": "optional", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn@1.5.1", + "description": "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz" + } + ], + "name": "fqdn", + "purl": "pkg:pypi/fqdn@1.5.1", + "scope": "optional", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna@3.4", + "description": "Internationalized Domain Names in Applications (IDNA)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4.tar.gz" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@3.4", + "scope": "optional", + "type": "library", + "version": "3.4" + }, + { + "bom-ref": "importlib-resources@6.1.1", + "description": "Read resources from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz" + } + ], + "name": "importlib-resources", + "purl": "pkg:pypi/importlib-resources@6.1.1", + "scope": "optional", + "type": "library", + "version": "6.1.1" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "scope": "optional", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer@2.4", + "description": "Identify specific nodes in a JSON document (RFC 6901)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz" + } + ], + "name": "jsonpointer", + "purl": "pkg:pypi/jsonpointer@2.4", + "scope": "optional", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema@4.19.2", + "description": "An implementation of JSON Schema validation for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema/#jsonschema-4.19.2-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema/#jsonschema-4.19.2.tar.gz" + } + ], + "name": "jsonschema", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "format" + } + ], + "purl": "pkg:pypi/jsonschema@4.19.2", + "scope": "optional", + "type": "library", + "version": "4.19.2" + }, + { + "bom-ref": "jsonschema-specifications@2023.7.1", + "description": "The JSON Schema meta-schemas and vocabularies, exposed as a Registry", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz" + } + ], + "name": "jsonschema-specifications", + "purl": "pkg:pypi/jsonschema-specifications@2023.7.1", + "scope": "optional", + "type": "library", + "version": "2023.7.1" + }, + { + "bom-ref": "license-expression@30.1.1", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "42375df653ad85e6f5b4b0385138b2dbea1f5d66360783d8625c3e4f97f11f0c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/license-expression/#license-expression-30.1.1.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8d7e5e2de0d04fc104a4f952c440e8f08a5ba63480a0dad015b294770b7e58ec" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/license-expression/#license_expression-30.1.1-py3-none-any.whl" + } + ], + "name": "license-expression", + "purl": "pkg:pypi/license-expression@30.1.1", + "scope": "optional", + "type": "library", + "version": "30.1.1" + }, + { + "bom-ref": "lxml@4.9.3", + "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3.tar.gz" + } + ], + "name": "lxml", + "purl": "pkg:pypi/lxml@4.9.3", + "scope": "optional", + "type": "library", + "version": "4.9.3" + }, + { + "bom-ref": "packageurl-python@0.11.2", + "description": "A purl aka. Package URL parser and builder", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/#packageurl-python-0.11.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/#packageurl_python-0.11.2-py3-none-any.whl" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python@0.11.2", + "scope": "optional", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "pkgutil-resolve-name@1.3.10", + "description": "Resolve a name to an object.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz" + } + ], + "name": "pkgutil-resolve-name", + "purl": "pkg:pypi/pkgutil-resolve-name@1.3.10", + "scope": "optional", + "type": "library", + "version": "1.3.10" + }, + { + "bom-ref": "py-serializable@0.15.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/py-serializable/#py-serializable-0.15.0.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/py-serializable/#py_serializable-0.15.0-py3-none-any.whl" + } + ], + "name": "py-serializable", + "purl": "pkg:pypi/py-serializable@0.15.0", + "scope": "optional", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "scope": "optional", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing@0.30.2", + "description": "JSON Referencing + Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz" + } + ], + "name": "referencing", + "purl": "pkg:pypi/referencing@0.30.2", + "scope": "optional", + "type": "library", + "version": "0.30.2" + }, + { + "bom-ref": "rfc3339-validator@0.1.4", + "description": "A pure python RFC3339 validator", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz" + } + ], + "name": "rfc3339-validator", + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "scope": "optional", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987@1.3.8", + "description": "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz" + } + ], + "name": "rfc3987", + "purl": "pkg:pypi/rfc3987@1.3.8", + "scope": "optional", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py@0.12.0", + "description": "Python bindings to Rust's persistent data structures (rpds)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz" + } + ], + "name": "rpds-py", + "purl": "pkg:pypi/rpds-py@0.12.0", + "scope": "optional", + "type": "library", + "version": "0.12.0" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "scope": "optional", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers@2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0.tar.gz" + } + ], + "name": "sortedcontainers", + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "scope": "optional", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "scope": "optional", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template@1.3.0", + "description": "RFC 6570 URI Template Processor", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl" + } + ], + "name": "uri-template", + "purl": "pkg:pypi/uri-template@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors@1.13", + "description": "A library for working with the color formats defined by HTML and CSS.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz" + } + ], + "name": "webcolors", + "purl": "pkg:pypi/webcolors@1.13", + "scope": "optional", + "type": "library", + "version": "1.13" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0", + "scope": "optional", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "attrs@23.1.0" + }, + { + "ref": "boolean-py@4.0" + }, + { + "dependsOn": [ + "jsonschema@4.19.2", + "license-expression@30.1.1", + "lxml@4.9.3", + "packageurl-python@0.11.2", + "py-serializable@0.15.0", + "sortedcontainers@2.4.0" + ], + "ref": "cyclonedx-python-lib@5.1.1" + }, + { + "ref": "defusedxml@0.7.1" + }, + { + "ref": "fqdn@1.5.1" + }, + { + "ref": "idna@3.4" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-resources@6.1.1" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "ref": "jsonpointer@2.4" + }, + { + "dependsOn": [ + "importlib-resources@6.1.1", + "referencing@0.30.2" + ], + "ref": "jsonschema-specifications@2023.7.1" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "fqdn@1.5.1", + "idna@3.4", + "importlib-resources@6.1.1", + "isoduration@20.11.0", + "jsonpointer@2.4", + "jsonschema-specifications@2023.7.1", + "pkgutil-resolve-name@1.3.10", + "referencing@0.30.2", + "rfc3339-validator@0.1.4", + "rfc3987@1.3.8", + "rpds-py@0.12.0", + "uri-template@1.3.0", + "webcolors@1.13" + ], + "ref": "jsonschema@4.19.2" + }, + { + "dependsOn": [ + "boolean-py@4.0" + ], + "ref": "license-expression@30.1.1" + }, + { + "ref": "lxml@4.9.3" + }, + { + "ref": "packageurl-python@0.11.2" + }, + { + "ref": "pkgutil-resolve-name@1.3.10" + }, + { + "dependsOn": [ + "defusedxml@0.7.1" + ], + "ref": "py-serializable@0.15.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "rpds-py@0.12.0" + ], + "ref": "referencing@0.30.2" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "rfc3339-validator@0.1.4" + }, + { + "ref": "rfc3987@1.3.8" + }, + { + "ref": "rpds-py@0.12.0" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "sortedcontainers@2.4.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + }, + { + "ref": "uri-template@1.3.0" + }, + { + "ref": "webcolors@1.13" + }, + { + "dependsOn": [ + "cyclonedx-python-lib@5.1.1" + ], + "ref": "with-extras" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "my-extra" + } + ], + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.4.xml.bin new file mode 100644 index 00000000..30970c19 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.4.xml.bin @@ -0,0 +1,2094 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + my-extra + + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + optional + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + attrs + 23.1.0 + Classes Without Boilerplate + optional + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl + from legacy-api + + 1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 + + + + https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz + from legacy-api + + 6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 + + + + + + boolean-py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean-py@4.0 + + + https://pypi.org/simple/boolean-py/#boolean.py-4.0-py3-none-any.whl + from legacy-api + + 2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd + + + + https://pypi.org/simple/boolean-py/#boolean.py-4.0.tar.gz + from legacy-api + + 17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4 + + + + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1-py3-none-any.whl + from legacy-api + + 2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3 + + + + https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1.tar.gz + from legacy-api + + 215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6 + + + + + main + json-validation + xml-validation + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.org/simple/defusedxml/#defusedxml-0.7.1-py2.py3-none-any.whl + from legacy-api + + a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 + + + + https://pypi.org/simple/defusedxml/#defusedxml-0.7.1.tar.gz + from legacy-api + + 1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 + + + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + optional + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl + from legacy-api + + 3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014 + + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz + from legacy-api + + 105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f + + + + + + idna + 3.4 + Internationalized Domain Names in Applications (IDNA) + optional + pkg:pypi/idna@3.4 + + + https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl + from legacy-api + + 90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 + + + + https://pypi.org/simple/idna/#idna-3.4.tar.gz + from legacy-api + + 814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 + + + + + + importlib-resources + 6.1.1 + Read resources from Python packages + optional + pkg:pypi/importlib-resources@6.1.1 + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl + from legacy-api + + e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6 + + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz + from legacy-api + + 3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a + + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + optional + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + optional + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl + from legacy-api + + 15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a + + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz + from legacy-api + + 585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88 + + + + + + jsonschema + 4.19.2 + An implementation of JSON Schema validation for Python + optional + pkg:pypi/jsonschema@4.19.2 + + + https://pypi.org/simple/jsonschema/#jsonschema-4.19.2-py3-none-any.whl + from legacy-api + + eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc + + + + https://pypi.org/simple/jsonschema/#jsonschema-4.19.2.tar.gz + from legacy-api + + c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392 + + + + + format + + + + jsonschema-specifications + 2023.7.1 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + optional + pkg:pypi/jsonschema-specifications@2023.7.1 + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl + from legacy-api + + 05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 + + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz + from legacy-api + + c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb + + + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + + https://pypi.org/simple/license-expression/#license-expression-30.1.1.tar.gz + from legacy-api + + 42375df653ad85e6f5b4b0385138b2dbea1f5d66360783d8625c3e4f97f11f0c + + + + https://pypi.org/simple/license-expression/#license_expression-30.1.1-py3-none-any.whl + from legacy-api + + 8d7e5e2de0d04fc104a4f952c440e8f08a5ba63480a0dad015b294770b7e58ec + + + + + + lxml + 4.9.3 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + optional + pkg:pypi/lxml@4.9.3 + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl + from legacy-api + + b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + 1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win32.whl + from legacy-api + + 2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win_amd64.whl + from legacy-api + + 4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl + from legacy-api + + b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl + from legacy-api + + 411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl + from legacy-api + + cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl + from legacy-api + + 0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win32.whl + from legacy-api + + cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win_amd64.whl + from legacy-api + + 97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl + from legacy-api + + 1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl + from legacy-api + + 71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl + from legacy-api + + d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl + from legacy-api + + 0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win32.whl + from legacy-api + + 0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win_amd64.whl + from legacy-api + + 25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl + from legacy-api + + d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl + from legacy-api + + 48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl + from legacy-api + + 9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl + from legacy-api + + b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-win_amd64.whl + from legacy-api + + d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + 578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win32.whl + from legacy-api + + 704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win_amd64.whl + from legacy-api + + c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl + from legacy-api + + 64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl + from legacy-api + + 4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + 14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl + from legacy-api + + 0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl + from legacy-api + + aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win32.whl + from legacy-api + + 50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win_amd64.whl + from legacy-api + + bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl + from legacy-api + + 4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl + from legacy-api + + 53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + 7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl + from legacy-api + + 081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl + from legacy-api + + 23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win32.whl + from legacy-api + + 1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win_amd64.whl + from legacy-api + + 120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl + from legacy-api + + 8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl + from legacy-api + + 6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl + from legacy-api + + 3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl + from legacy-api + + fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win32.whl + from legacy-api + + 57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win_amd64.whl + from legacy-api + + 92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl + from legacy-api + + 9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl + from legacy-api + + 303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl + from legacy-api + + 5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl + from legacy-api + + bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win32.whl + from legacy-api + + 8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win_amd64.whl + from legacy-api + + 4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + 6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl + from legacy-api + + 5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + 9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl + from legacy-api + + 3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl + from legacy-api + + ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3.tar.gz + from legacy-api + + 48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c + + + + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + + https://pypi.org/simple/packageurl-python/#packageurl-python-0.11.2.tar.gz + from legacy-api + + 01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471 + + + + https://pypi.org/simple/packageurl-python/#packageurl_python-0.11.2-py3-none-any.whl + from legacy-api + + 799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84 + + + + + + pkgutil-resolve-name + 1.3.10 + Resolve a name to an object. + optional + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl + from legacy-api + + ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e + + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz + from legacy-api + + 357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174 + + + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + + https://pypi.org/simple/py-serializable/#py-serializable-0.15.0.tar.gz + from legacy-api + + 8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771 + + + + https://pypi.org/simple/py-serializable/#py_serializable-0.15.0-py3-none-any.whl + from legacy-api + + d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2 + + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + optional + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + referencing + 0.30.2 + JSON Referencing + Python + optional + pkg:pypi/referencing@0.30.2 + + + https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl + from legacy-api + + 449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf + + + + https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz + from legacy-api + + 794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0 + + + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + optional + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl + from legacy-api + + 24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa + + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz + from legacy-api + + 138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b + + + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + optional + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl + from legacy-api + + 10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53 + + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz + from legacy-api + + d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733 + + + + + + rpds-py + 0.12.0 + Python bindings to Rust's persistent data structures (rpds) + optional + pkg:pypi/rpds-py@0.12.0 + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl + from legacy-api + + c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + 30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl + from legacy-api + + 5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl + from legacy-api + + 171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl + from legacy-api + + 57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl + from legacy-api + + 7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl + from legacy-api + + 1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl + from legacy-api + + 0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl + from legacy-api + + 33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl + from legacy-api + + d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl + from legacy-api + + 1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl + from legacy-api + + dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl + from legacy-api + + c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl + from legacy-api + + 9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + 2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl + from legacy-api + + 81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl + from legacy-api + + 08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl + from legacy-api + + 4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl + from legacy-api + + b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl + from legacy-api + + 8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl + from legacy-api + + 6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl + from legacy-api + + a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl + from legacy-api + + 0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl + from legacy-api + + b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl + from legacy-api + + 3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl + from legacy-api + + e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl + from legacy-api + + bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl + from legacy-api + + 1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + 48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl + from legacy-api + + 240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl + from legacy-api + + 25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl + from legacy-api + + a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl + from legacy-api + + b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl + from legacy-api + + cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl + from legacy-api + + cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl + from legacy-api + + e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl + from legacy-api + + 513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl + from legacy-api + + 1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl + from legacy-api + + 68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl + from legacy-api + + 6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz + from legacy-api + + 7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + optional + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + + https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0-py2.py3-none-any.whl + from legacy-api + + a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 + + + + https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0.tar.gz + from legacy-api + + 25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 + + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + optional + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + optional + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz + from legacy-api + + 0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 + + + + https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl + from legacy-api + + a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363 + + + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + optional + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl + from legacy-api + + 29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf + + + + https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz + from legacy-api + + c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a + + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + optional + pkg:pypi/zipp@3.17.0 + + + https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + 0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 + + + + https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + 84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.5.json.bin new file mode 100644 index 00000000..740ee9f9 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.5.json.bin @@ -0,0 +1,3184 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "attrs@23.1.0", + "description": "Classes Without Boilerplate", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz" + } + ], + "name": "attrs", + "purl": "pkg:pypi/attrs@23.1.0", + "scope": "optional", + "type": "library", + "version": "23.1.0" + }, + { + "bom-ref": "boolean-py@4.0", + "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/boolean-py/#boolean.py-4.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/boolean-py/#boolean.py-4.0.tar.gz" + } + ], + "name": "boolean-py", + "purl": "pkg:pypi/boolean-py@4.0", + "scope": "optional", + "type": "library", + "version": "4.0" + }, + { + "bom-ref": "cyclonedx-python-lib@5.1.1", + "description": "Python library for CycloneDX", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1.tar.gz" + } + ], + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "scope": "optional", + "type": "library", + "version": "5.1.1" + }, + { + "bom-ref": "defusedxml@0.7.1", + "description": "XML bomb protection for Python stdlib modules", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/defusedxml/#defusedxml-0.7.1-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/defusedxml/#defusedxml-0.7.1.tar.gz" + } + ], + "name": "defusedxml", + "purl": "pkg:pypi/defusedxml@0.7.1", + "scope": "optional", + "type": "library", + "version": "0.7.1" + }, + { + "bom-ref": "fqdn@1.5.1", + "description": "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz" + } + ], + "name": "fqdn", + "purl": "pkg:pypi/fqdn@1.5.1", + "scope": "optional", + "type": "library", + "version": "1.5.1" + }, + { + "bom-ref": "idna@3.4", + "description": "Internationalized Domain Names in Applications (IDNA)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/idna/#idna-3.4.tar.gz" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@3.4", + "scope": "optional", + "type": "library", + "version": "3.4" + }, + { + "bom-ref": "importlib-resources@6.1.1", + "description": "Read resources from Python packages", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz" + } + ], + "name": "importlib-resources", + "purl": "pkg:pypi/importlib-resources@6.1.1", + "scope": "optional", + "type": "library", + "version": "6.1.1" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "scope": "optional", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "jsonpointer@2.4", + "description": "Identify specific nodes in a JSON document (RFC 6901)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz" + } + ], + "name": "jsonpointer", + "purl": "pkg:pypi/jsonpointer@2.4", + "scope": "optional", + "type": "library", + "version": "2.4" + }, + { + "bom-ref": "jsonschema@4.19.2", + "description": "An implementation of JSON Schema validation for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema/#jsonschema-4.19.2-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema/#jsonschema-4.19.2.tar.gz" + } + ], + "name": "jsonschema", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "format" + } + ], + "purl": "pkg:pypi/jsonschema@4.19.2", + "scope": "optional", + "type": "library", + "version": "4.19.2" + }, + { + "bom-ref": "jsonschema-specifications@2023.7.1", + "description": "The JSON Schema meta-schemas and vocabularies, exposed as a Registry", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz" + } + ], + "name": "jsonschema-specifications", + "purl": "pkg:pypi/jsonschema-specifications@2023.7.1", + "scope": "optional", + "type": "library", + "version": "2023.7.1" + }, + { + "bom-ref": "license-expression@30.1.1", + "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "42375df653ad85e6f5b4b0385138b2dbea1f5d66360783d8625c3e4f97f11f0c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/license-expression/#license-expression-30.1.1.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8d7e5e2de0d04fc104a4f952c440e8f08a5ba63480a0dad015b294770b7e58ec" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/license-expression/#license_expression-30.1.1-py3-none-any.whl" + } + ], + "name": "license-expression", + "purl": "pkg:pypi/license-expression@30.1.1", + "scope": "optional", + "type": "library", + "version": "30.1.1" + }, + { + "bom-ref": "lxml@4.9.3", + "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/lxml/#lxml-4.9.3.tar.gz" + } + ], + "name": "lxml", + "purl": "pkg:pypi/lxml@4.9.3", + "scope": "optional", + "type": "library", + "version": "4.9.3" + }, + { + "bom-ref": "packageurl-python@0.11.2", + "description": "A purl aka. Package URL parser and builder", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/#packageurl-python-0.11.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/#packageurl_python-0.11.2-py3-none-any.whl" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python@0.11.2", + "scope": "optional", + "type": "library", + "version": "0.11.2" + }, + { + "bom-ref": "pkgutil-resolve-name@1.3.10", + "description": "Resolve a name to an object.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz" + } + ], + "name": "pkgutil-resolve-name", + "purl": "pkg:pypi/pkgutil-resolve-name@1.3.10", + "scope": "optional", + "type": "library", + "version": "1.3.10" + }, + { + "bom-ref": "py-serializable@0.15.0", + "description": "Library for serializing and deserializing Python Objects to and from JSON and XML.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/py-serializable/#py-serializable-0.15.0.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/py-serializable/#py_serializable-0.15.0-py3-none-any.whl" + } + ], + "name": "py-serializable", + "purl": "pkg:pypi/py-serializable@0.15.0", + "scope": "optional", + "type": "library", + "version": "0.15.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "scope": "optional", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "referencing@0.30.2", + "description": "JSON Referencing + Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz" + } + ], + "name": "referencing", + "purl": "pkg:pypi/referencing@0.30.2", + "scope": "optional", + "type": "library", + "version": "0.30.2" + }, + { + "bom-ref": "rfc3339-validator@0.1.4", + "description": "A pure python RFC3339 validator", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz" + } + ], + "name": "rfc3339-validator", + "purl": "pkg:pypi/rfc3339-validator@0.1.4", + "scope": "optional", + "type": "library", + "version": "0.1.4" + }, + { + "bom-ref": "rfc3987@1.3.8", + "description": "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz" + } + ], + "name": "rfc3987", + "purl": "pkg:pypi/rfc3987@1.3.8", + "scope": "optional", + "type": "library", + "version": "1.3.8" + }, + { + "bom-ref": "rpds-py@0.12.0", + "description": "Python bindings to Rust's persistent data structures (rpds)", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz" + } + ], + "name": "rpds-py", + "purl": "pkg:pypi/rpds-py@0.12.0", + "scope": "optional", + "type": "library", + "version": "0.12.0" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "scope": "optional", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "sortedcontainers@2.4.0", + "description": "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0.tar.gz" + } + ], + "name": "sortedcontainers", + "purl": "pkg:pypi/sortedcontainers@2.4.0", + "scope": "optional", + "type": "library", + "version": "2.4.0" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "scope": "optional", + "type": "library", + "version": "2.8.19.14" + }, + { + "bom-ref": "uri-template@1.3.0", + "description": "RFC 6570 URI Template Processor", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl" + } + ], + "name": "uri-template", + "purl": "pkg:pypi/uri-template@1.3.0", + "scope": "optional", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "webcolors@1.13", + "description": "A library for working with the color formats defined by HTML and CSS.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz" + } + ], + "name": "webcolors", + "purl": "pkg:pypi/webcolors@1.13", + "scope": "optional", + "type": "library", + "version": "1.13" + }, + { + "bom-ref": "zipp@3.17.0", + "description": "Backport of pathlib-compatible object wrapper for zip files", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz" + } + ], + "name": "zipp", + "purl": "pkg:pypi/zipp@3.17.0", + "scope": "optional", + "type": "library", + "version": "3.17.0" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "attrs@23.1.0" + }, + { + "ref": "boolean-py@4.0" + }, + { + "dependsOn": [ + "jsonschema@4.19.2", + "license-expression@30.1.1", + "lxml@4.9.3", + "packageurl-python@0.11.2", + "py-serializable@0.15.0", + "sortedcontainers@2.4.0" + ], + "ref": "cyclonedx-python-lib@5.1.1" + }, + { + "ref": "defusedxml@0.7.1" + }, + { + "ref": "fqdn@1.5.1" + }, + { + "ref": "idna@3.4" + }, + { + "dependsOn": [ + "zipp@3.17.0" + ], + "ref": "importlib-resources@6.1.1" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "ref": "jsonpointer@2.4" + }, + { + "dependsOn": [ + "importlib-resources@6.1.1", + "referencing@0.30.2" + ], + "ref": "jsonschema-specifications@2023.7.1" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "fqdn@1.5.1", + "idna@3.4", + "importlib-resources@6.1.1", + "isoduration@20.11.0", + "jsonpointer@2.4", + "jsonschema-specifications@2023.7.1", + "pkgutil-resolve-name@1.3.10", + "referencing@0.30.2", + "rfc3339-validator@0.1.4", + "rfc3987@1.3.8", + "rpds-py@0.12.0", + "uri-template@1.3.0", + "webcolors@1.13" + ], + "ref": "jsonschema@4.19.2" + }, + { + "dependsOn": [ + "boolean-py@4.0" + ], + "ref": "license-expression@30.1.1" + }, + { + "ref": "lxml@4.9.3" + }, + { + "ref": "packageurl-python@0.11.2" + }, + { + "ref": "pkgutil-resolve-name@1.3.10" + }, + { + "dependsOn": [ + "defusedxml@0.7.1" + ], + "ref": "py-serializable@0.15.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "dependsOn": [ + "attrs@23.1.0", + "rpds-py@0.12.0" + ], + "ref": "referencing@0.30.2" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "rfc3339-validator@0.1.4" + }, + { + "ref": "rfc3987@1.3.8" + }, + { + "ref": "rpds-py@0.12.0" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "sortedcontainers@2.4.0" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + }, + { + "ref": "uri-template@1.3.0" + }, + { + "ref": "webcolors@1.13" + }, + { + "dependsOn": [ + "cyclonedx-python-lib@5.1.1" + ], + "ref": "with-extras" + }, + { + "ref": "zipp@3.17.0" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "my-extra" + } + ], + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.5.xml.bin new file mode 100644 index 00000000..8735804d --- /dev/null +++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.5.xml.bin @@ -0,0 +1,2094 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + my-extra + + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + optional + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + attrs + 23.1.0 + Classes Without Boilerplate + optional + pkg:pypi/attrs@23.1.0 + + + https://pypi.org/simple/attrs/#attrs-23.1.0-py3-none-any.whl + from legacy-api + + 1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 + + + + https://pypi.org/simple/attrs/#attrs-23.1.0.tar.gz + from legacy-api + + 6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 + + + + + + boolean-py + 4.0 + Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. + optional + pkg:pypi/boolean-py@4.0 + + + https://pypi.org/simple/boolean-py/#boolean.py-4.0-py3-none-any.whl + from legacy-api + + 2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd + + + + https://pypi.org/simple/boolean-py/#boolean.py-4.0.tar.gz + from legacy-api + + 17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4 + + + + + + cyclonedx-python-lib + 5.1.1 + Python library for CycloneDX + optional + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1-py3-none-any.whl + from legacy-api + + 2989db0cd8bb4c0c442423d71ed7a84ae059e16a2d0f932cc4bf92da7385cdb3 + + + + https://pypi.org/simple/cyclonedx-python-lib/#cyclonedx_python_lib-5.1.1.tar.gz + from legacy-api + + 215a636a4e77385d2cf4c6c9801c9bad4791849634f2c6daa45ab2c6cb0a85f6 + + + + + main + json-validation + xml-validation + + + + defusedxml + 0.7.1 + XML bomb protection for Python stdlib modules + optional + pkg:pypi/defusedxml@0.7.1 + + + https://pypi.org/simple/defusedxml/#defusedxml-0.7.1-py2.py3-none-any.whl + from legacy-api + + a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 + + + + https://pypi.org/simple/defusedxml/#defusedxml-0.7.1.tar.gz + from legacy-api + + 1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 + + + + + + fqdn + 1.5.1 + Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers + optional + pkg:pypi/fqdn@1.5.1 + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1-py3-none-any.whl + from legacy-api + + 3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014 + + + + https://pypi.org/simple/fqdn/#fqdn-1.5.1.tar.gz + from legacy-api + + 105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f + + + + + + idna + 3.4 + Internationalized Domain Names in Applications (IDNA) + optional + pkg:pypi/idna@3.4 + + + https://pypi.org/simple/idna/#idna-3.4-py3-none-any.whl + from legacy-api + + 90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 + + + + https://pypi.org/simple/idna/#idna-3.4.tar.gz + from legacy-api + + 814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 + + + + + + importlib-resources + 6.1.1 + Read resources from Python packages + optional + pkg:pypi/importlib-resources@6.1.1 + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1-py3-none-any.whl + from legacy-api + + e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6 + + + + https://pypi.org/simple/importlib-resources/#importlib_resources-6.1.1.tar.gz + from legacy-api + + 3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a + + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + optional + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + + jsonpointer + 2.4 + Identify specific nodes in a JSON document (RFC 6901) + optional + pkg:pypi/jsonpointer@2.4 + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4-py2.py3-none-any.whl + from legacy-api + + 15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a + + + + https://pypi.org/simple/jsonpointer/#jsonpointer-2.4.tar.gz + from legacy-api + + 585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88 + + + + + + jsonschema + 4.19.2 + An implementation of JSON Schema validation for Python + optional + pkg:pypi/jsonschema@4.19.2 + + + https://pypi.org/simple/jsonschema/#jsonschema-4.19.2-py3-none-any.whl + from legacy-api + + eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc + + + + https://pypi.org/simple/jsonschema/#jsonschema-4.19.2.tar.gz + from legacy-api + + c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392 + + + + + format + + + + jsonschema-specifications + 2023.7.1 + The JSON Schema meta-schemas and vocabularies, exposed as a Registry + optional + pkg:pypi/jsonschema-specifications@2023.7.1 + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1-py3-none-any.whl + from legacy-api + + 05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 + + + + https://pypi.org/simple/jsonschema-specifications/#jsonschema_specifications-2023.7.1.tar.gz + from legacy-api + + c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb + + + + + + license-expression + 30.1.1 + license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. + optional + pkg:pypi/license-expression@30.1.1 + + + https://pypi.org/simple/license-expression/#license-expression-30.1.1.tar.gz + from legacy-api + + 42375df653ad85e6f5b4b0385138b2dbea1f5d66360783d8625c3e4f97f11f0c + + + + https://pypi.org/simple/license-expression/#license_expression-30.1.1-py3-none-any.whl + from legacy-api + + 8d7e5e2de0d04fc104a4f952c440e8f08a5ba63480a0dad015b294770b7e58ec + + + + + + lxml + 4.9.3 + Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. + optional + pkg:pypi/lxml@4.9.3 + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl + from legacy-api + + b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + 1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win32.whl + from legacy-api + + 2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27m-win_amd64.whl + from legacy-api + + 4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl + from legacy-api + + b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl + from legacy-api + + 411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl + from legacy-api + + cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl + from legacy-api + + 0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl + from legacy-api + + 1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win32.whl + from legacy-api + + cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp310-cp310-win_amd64.whl + from legacy-api + + 97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl + from legacy-api + + 1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl + from legacy-api + + 71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl + from legacy-api + + d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl + from legacy-api + + 0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl + from legacy-api + + 9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win32.whl + from legacy-api + + 0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp311-cp311-win_amd64.whl + from legacy-api + + 25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl + from legacy-api + + d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl + from legacy-api + + 48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl + from legacy-api + + 9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl + from legacy-api + + b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl + from legacy-api + + fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp312-cp312-win_amd64.whl + from legacy-api + + d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + 578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win32.whl + from legacy-api + + 704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp35-cp35m-win_amd64.whl + from legacy-api + + c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl + from legacy-api + + 64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl + from legacy-api + + 4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + 14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl + from legacy-api + + 0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl + from legacy-api + + aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win32.whl + from legacy-api + + 50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp36-cp36m-win_amd64.whl + from legacy-api + + bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl + from legacy-api + + 4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl + from legacy-api + + 53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + 7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl + from legacy-api + + 081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl + from legacy-api + + 23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win32.whl + from legacy-api + + 1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp37-cp37m-win_amd64.whl + from legacy-api + + 120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl + from legacy-api + + 8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl + from legacy-api + + 6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl + from legacy-api + + 3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl + from legacy-api + + fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win32.whl + from legacy-api + + 57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp38-cp38-win_amd64.whl + from legacy-api + + 92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl + from legacy-api + + 9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl + from legacy-api + + 303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl + from legacy-api + + 5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl + from legacy-api + + b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl + from legacy-api + + bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl + from legacy-api + + d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win32.whl + from legacy-api + + 8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-cp39-cp39-win_amd64.whl + from legacy-api + + 4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + 6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl + from legacy-api + + 5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + 50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + 9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl + from legacy-api + + 3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl + from legacy-api + + ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl + from legacy-api + + 8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl + from legacy-api + + e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl + from legacy-api + + fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl + from legacy-api + + f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9 + + + + https://pypi.org/simple/lxml/#lxml-4.9.3.tar.gz + from legacy-api + + 48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c + + + + + + packageurl-python + 0.11.2 + A purl aka. Package URL parser and builder + optional + pkg:pypi/packageurl-python@0.11.2 + + + https://pypi.org/simple/packageurl-python/#packageurl-python-0.11.2.tar.gz + from legacy-api + + 01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471 + + + + https://pypi.org/simple/packageurl-python/#packageurl_python-0.11.2-py3-none-any.whl + from legacy-api + + 799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84 + + + + + + pkgutil-resolve-name + 1.3.10 + Resolve a name to an object. + optional + pkg:pypi/pkgutil-resolve-name@1.3.10 + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10-py3-none-any.whl + from legacy-api + + ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e + + + + https://pypi.org/simple/pkgutil-resolve-name/#pkgutil_resolve_name-1.3.10.tar.gz + from legacy-api + + 357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174 + + + + + + py-serializable + 0.15.0 + Library for serializing and deserializing Python Objects to and from JSON and XML. + optional + pkg:pypi/py-serializable@0.15.0 + + + https://pypi.org/simple/py-serializable/#py-serializable-0.15.0.tar.gz + from legacy-api + + 8fc41457d8ee5f5c5a12f41fd87bf1a4f2ecf9da39fee92059b728e78f320771 + + + + https://pypi.org/simple/py-serializable/#py_serializable-0.15.0-py3-none-any.whl + from legacy-api + + d3f1201b33420c481aa83f7860c7bf2c2f036ba3ea82b6e15a96696457c36cd2 + + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + optional + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + referencing + 0.30.2 + JSON Referencing + Python + optional + pkg:pypi/referencing@0.30.2 + + + https://pypi.org/simple/referencing/#referencing-0.30.2-py3-none-any.whl + from legacy-api + + 449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf + + + + https://pypi.org/simple/referencing/#referencing-0.30.2.tar.gz + from legacy-api + + 794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0 + + + + + + rfc3339-validator + 0.1.4 + A pure python RFC3339 validator + optional + pkg:pypi/rfc3339-validator@0.1.4 + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4-py2.py3-none-any.whl + from legacy-api + + 24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa + + + + https://pypi.org/simple/rfc3339-validator/#rfc3339_validator-0.1.4.tar.gz + from legacy-api + + 138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b + + + + + + rfc3987 + 1.3.8 + Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987) + optional + pkg:pypi/rfc3987@1.3.8 + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8-py2.py3-none-any.whl + from legacy-api + + 10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53 + + + + https://pypi.org/simple/rfc3987/#rfc3987-1.3.8.tar.gz + from legacy-api + + d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733 + + + + + + rpds-py + 0.12.0 + Python bindings to Rust's persistent data structures (rpds) + optional + pkg:pypi/rpds-py@0.12.0 + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl + from legacy-api + + c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl + from legacy-api + + 30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl + from legacy-api + + 5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl + from legacy-api + + 171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl + from legacy-api + + 57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win32.whl + from legacy-api + + 7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp310-none-win_amd64.whl + from legacy-api + + 1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl + from legacy-api + + 0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl + from legacy-api + + f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl + from legacy-api + + 33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl + from legacy-api + + d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl + from legacy-api + + 1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win32.whl + from legacy-api + + dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp311-none-win_amd64.whl + from legacy-api + + c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl + from legacy-api + + 9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl + from legacy-api + + 2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl + from legacy-api + + 81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl + from legacy-api + + 08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl + from legacy-api + + 4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win32.whl + from legacy-api + + b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp312-none-win_amd64.whl + from legacy-api + + 8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl + from legacy-api + + 6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl + from legacy-api + + a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl + from legacy-api + + 0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl + from legacy-api + + b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl + from legacy-api + + 3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win32.whl + from legacy-api + + e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp38-none-win_amd64.whl + from legacy-api + + bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl + from legacy-api + + 1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl + from legacy-api + + 48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + 6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl + from legacy-api + + 240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl + from legacy-api + + 25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl + from legacy-api + + a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win32.whl + from legacy-api + + b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-cp39-none-win_amd64.whl + from legacy-api + + cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl + from legacy-api + + cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl + from legacy-api + + e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl + from legacy-api + + 513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl + from legacy-api + + 1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl + from legacy-api + + 466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl + from legacy-api + + 68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + from legacy-api + + 54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl + from legacy-api + + 6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl + from legacy-api + + 47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl + from legacy-api + + 0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + from legacy-api + + efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl + from legacy-api + + 0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl + from legacy-api + + 56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl + from legacy-api + + 6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl + from legacy-api + + 5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4 + + + + https://pypi.org/simple/rpds-py/#rpds_py-0.12.0.tar.gz + from legacy-api + + 7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + optional + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + sortedcontainers + 2.4.0 + Sorted Containers -- Sorted List, Sorted Dict, Sorted Set + optional + pkg:pypi/sortedcontainers@2.4.0 + + + https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0-py2.py3-none-any.whl + from legacy-api + + a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 + + + + https://pypi.org/simple/sortedcontainers/#sortedcontainers-2.4.0.tar.gz + from legacy-api + + 25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 + + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + optional + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + uri-template + 1.3.0 + RFC 6570 URI Template Processor + optional + pkg:pypi/uri-template@1.3.0 + + + https://pypi.org/simple/uri-template/#uri-template-1.3.0.tar.gz + from legacy-api + + 0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 + + + + https://pypi.org/simple/uri-template/#uri_template-1.3.0-py3-none-any.whl + from legacy-api + + a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363 + + + + + + webcolors + 1.13 + A library for working with the color formats defined by HTML and CSS. + optional + pkg:pypi/webcolors@1.13 + + + https://pypi.org/simple/webcolors/#webcolors-1.13-py3-none-any.whl + from legacy-api + + 29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf + + + + https://pypi.org/simple/webcolors/#webcolors-1.13.tar.gz + from legacy-api + + c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a + + + + + + zipp + 3.17.0 + Backport of pathlib-compatible object wrapper for zip files + optional + pkg:pypi/zipp@3.17.0 + + + https://pypi.org/simple/zipp/#zipp-3.17.0-py3-none-any.whl + from legacy-api + + 0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 + + + + https://pypi.org/simple/zipp/#zipp-3.17.0.tar.gz + from legacy-api + + 84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-groups_lock11_1.0.xml.bin b/tests/_data/snapshots/poetry/some-groups_lock11_1.0.xml.bin new file mode 100644 index 00000000..09a1966e --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock11_1.0.xml.bin @@ -0,0 +1,54 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + false + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + false + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + false + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + false + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + false + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + diff --git a/tests/_data/snapshots/poetry/some-groups_lock11_1.1.xml.bin b/tests/_data/snapshots/poetry/some-groups_lock11_1.1.xml.bin new file mode 100644 index 00000000..49274208 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock11_1.1.xml.bin @@ -0,0 +1,117 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/some-groups_lock11_1.2.json.bin b/tests/_data/snapshots/poetry/some-groups_lock11_1.2.json.bin new file mode 100644 index 00000000..e58e8a4b --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock11_1.2.json.bin @@ -0,0 +1,210 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-groups_lock11_1.2.xml.bin b/tests/_data/snapshots/poetry/some-groups_lock11_1.2.xml.bin new file mode 100644 index 00000000..c84c6d15 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock11_1.2.xml.bin @@ -0,0 +1,157 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-groups_lock11_1.3.json.bin b/tests/_data/snapshots/poetry/some-groups_lock11_1.3.json.bin new file mode 100644 index 00000000..91ac068e --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock11_1.3.json.bin @@ -0,0 +1,350 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + }, + { + "name": "cdx:poetry:group", + "value": "groupA" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + }, + { + "name": "cdx:poetry:group", + "value": "groupA" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-groups_lock11_1.3.xml.bin b/tests/_data/snapshots/poetry/some-groups_lock11_1.3.xml.bin new file mode 100644 index 00000000..6c118f5e --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock11_1.3.xml.bin @@ -0,0 +1,225 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + dev + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + dev + groupA + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + groupA + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + dev + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-groups_lock11_1.4.json.bin b/tests/_data/snapshots/poetry/some-groups_lock11_1.4.json.bin new file mode 100644 index 00000000..a8029f73 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock11_1.4.json.bin @@ -0,0 +1,346 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + }, + { + "name": "cdx:poetry:group", + "value": "groupA" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + }, + { + "name": "cdx:poetry:group", + "value": "groupA" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-groups_lock11_1.4.xml.bin b/tests/_data/snapshots/poetry/some-groups_lock11_1.4.xml.bin new file mode 100644 index 00000000..87adbbd8 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock11_1.4.xml.bin @@ -0,0 +1,252 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + dev + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + dev + groupA + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + groupA + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + dev + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-groups_lock11_1.5.json.bin b/tests/_data/snapshots/poetry/some-groups_lock11_1.5.json.bin new file mode 100644 index 00000000..85902458 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock11_1.5.json.bin @@ -0,0 +1,346 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + }, + { + "name": "cdx:poetry:group", + "value": "groupA" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + }, + { + "name": "cdx:poetry:group", + "value": "groupA" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "dev" + } + ], + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-groups_lock11_1.5.xml.bin b/tests/_data/snapshots/poetry/some-groups_lock11_1.5.xml.bin new file mode 100644 index 00000000..f9be05a1 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock11_1.5.xml.bin @@ -0,0 +1,252 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + dev + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + dev + groupA + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + dev + groupA + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + dev + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + dev + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + dev + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-groups_lock20_1.0.xml.bin b/tests/_data/snapshots/poetry/some-groups_lock20_1.0.xml.bin new file mode 100644 index 00000000..09a1966e --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock20_1.0.xml.bin @@ -0,0 +1,54 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + false + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + false + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + false + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + false + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + false + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + false + + + diff --git a/tests/_data/snapshots/poetry/some-groups_lock20_1.1.xml.bin b/tests/_data/snapshots/poetry/some-groups_lock20_1.1.xml.bin new file mode 100644 index 00000000..49274208 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock20_1.1.xml.bin @@ -0,0 +1,117 @@ + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + diff --git a/tests/_data/snapshots/poetry/some-groups_lock20_1.2.json.bin b/tests/_data/snapshots/poetry/some-groups_lock20_1.2.json.bin new file mode 100644 index 00000000..e58e8a4b --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock20_1.2.json.bin @@ -0,0 +1,210 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-groups_lock20_1.2.xml.bin b/tests/_data/snapshots/poetry/some-groups_lock20_1.2.xml.bin new file mode 100644 index 00000000..c84c6d15 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock20_1.2.xml.bin @@ -0,0 +1,157 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-groups_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/some-groups_lock20_1.3.json.bin new file mode 100644 index 00000000..be2081c7 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock20_1.3.json.bin @@ -0,0 +1,318 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "groupA" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "groupA" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-groups_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/some-groups_lock20_1.3.xml.bin new file mode 100644 index 00000000..9661ab11 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock20_1.3.xml.bin @@ -0,0 +1,211 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + groupA + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + groupA + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-groups_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/some-groups_lock20_1.4.json.bin new file mode 100644 index 00000000..6b8eed0e --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock20_1.4.json.bin @@ -0,0 +1,314 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "groupA" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "groupA" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-groups_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/some-groups_lock20_1.4.xml.bin new file mode 100644 index 00000000..2d97e3b7 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock20_1.4.xml.bin @@ -0,0 +1,238 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + groupA + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + groupA + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/some-groups_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/some-groups_lock20_1.5.json.bin new file mode 100644 index 00000000..84edcb56 --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock20_1.5.json.bin @@ -0,0 +1,314 @@ +{ + "components": [ + { + "bom-ref": "arrow@1.3.0", + "description": "Better dates & times for Python", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz" + } + ], + "name": "arrow", + "purl": "pkg:pypi/arrow@1.3.0", + "type": "library", + "version": "1.3.0" + }, + { + "bom-ref": "colorama@0.4.6", + "description": "Cross-platform colored terminal text.", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz" + } + ], + "name": "colorama", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "groupA" + } + ], + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + }, + { + "bom-ref": "isoduration@20.11.0", + "description": "Operations with ISO 8601 durations", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz" + } + ], + "name": "isoduration", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "groupA" + } + ], + "purl": "pkg:pypi/isoduration@20.11.0", + "type": "library", + "version": "20.11.0" + }, + { + "bom-ref": "python-dateutil@2.8.2", + "description": "Extensions to the standard Python datetime module", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl" + } + ], + "name": "python-dateutil", + "purl": "pkg:pypi/python-dateutil@2.8.2", + "type": "library", + "version": "2.8.2" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/six/#six-1.16.0.tar.gz" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "toml@0.10.2", + "description": "Python Library for Tom's Obvious, Minimal Language", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/toml/#toml-0.10.2.tar.gz" + } + ], + "name": "toml", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/toml@0.10.2", + "type": "library", + "version": "0.10.2" + }, + { + "bom-ref": "types-python-dateutil@2.8.19.14", + "description": "Typing stubs for python-dateutil", + "externalReferences": [ + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz" + }, + { + "comment": "from legacy-api", + "hashes": [ + { + "alg": "SHA-256", + "content": "f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl" + } + ], + "name": "types-python-dateutil", + "purl": "pkg:pypi/types-python-dateutil@2.8.19.14", + "type": "library", + "version": "2.8.19.14" + } + ], + "dependencies": [ + { + "dependsOn": [ + "python-dateutil@2.8.2", + "types-python-dateutil@2.8.19.14" + ], + "ref": "arrow@1.3.0" + }, + { + "ref": "colorama@0.4.6" + }, + { + "dependsOn": [ + "colorama@0.4.6", + "isoduration@20.11.0", + "toml@0.10.2" + ], + "ref": "group-deps" + }, + { + "dependsOn": [ + "arrow@1.3.0" + ], + "ref": "isoduration@20.11.0" + }, + { + "dependsOn": [ + "six@1.16.0" + ], + "ref": "python-dateutil@2.8.2" + }, + { + "ref": "six@1.16.0" + }, + { + "ref": "toml@0.10.2" + }, + { + "ref": "types-python-dateutil@2.8.19.14" + } + ], + "metadata": { + "component": { + "bom-ref": "group-deps", + "description": "dependencies organized in groups", + "name": "group-deps", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/some-groups_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/some-groups_lock20_1.5.xml.bin new file mode 100644 index 00000000..1ea3521a --- /dev/null +++ b/tests/_data/snapshots/poetry/some-groups_lock20_1.5.xml.bin @@ -0,0 +1,238 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + group-deps + 0.1.0 + dependencies organized in groups + + + true + + + + + arrow + 1.3.0 + Better dates & times for Python + pkg:pypi/arrow@1.3.0 + + + https://pypi.org/simple/arrow/#arrow-1.3.0-py3-none-any.whl + from legacy-api + + c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 + + + + https://pypi.org/simple/arrow/#arrow-1.3.0.tar.gz + from legacy-api + + d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 + + + + + + colorama + 0.4.6 + Cross-platform colored terminal text. + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/#colorama-0.4.6-py2.py3-none-any.whl + from legacy-api + + 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + + + + https://pypi.org/simple/colorama/#colorama-0.4.6.tar.gz + from legacy-api + + 08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 + + + + + groupA + + + + isoduration + 20.11.0 + Operations with ISO 8601 durations + pkg:pypi/isoduration@20.11.0 + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0-py3-none-any.whl + from legacy-api + + b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + + + + https://pypi.org/simple/isoduration/#isoduration-20.11.0.tar.gz + from legacy-api + + ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 + + + + + groupA + + + + python-dateutil + 2.8.2 + Extensions to the standard Python datetime module + pkg:pypi/python-dateutil@2.8.2 + + + https://pypi.org/simple/python-dateutil/#python-dateutil-2.8.2.tar.gz + from legacy-api + + 0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 + + + + https://pypi.org/simple/python-dateutil/#python_dateutil-2.8.2-py2.py3-none-any.whl + from legacy-api + + 961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0 + + + https://pypi.org/simple/six/#six-1.16.0-py2.py3-none-any.whl + from legacy-api + + 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + + + + https://pypi.org/simple/six/#six-1.16.0.tar.gz + from legacy-api + + 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 + + + + + + toml + 0.10.2 + Python Library for Tom's Obvious, Minimal Language + pkg:pypi/toml@0.10.2 + + + https://pypi.org/simple/toml/#toml-0.10.2-py2.py3-none-any.whl + from legacy-api + + 806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b + + + + https://pypi.org/simple/toml/#toml-0.10.2.tar.gz + from legacy-api + + b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + + + + + main + + + + types-python-dateutil + 2.8.19.14 + Typing stubs for python-dateutil + pkg:pypi/types-python-dateutil@2.8.19.14 + + + https://pypi.org/simple/types-python-dateutil/#types-python-dateutil-2.8.19.14.tar.gz + from legacy-api + + 1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b + + + + https://pypi.org/simple/types-python-dateutil/#types_python_dateutil-2.8.19.14-py3-none-any.whl + from legacy-api + + f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock10_1.0.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock10_1.0.xml.bin new file mode 100644 index 00000000..acb06612 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock10_1.0.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock10_1.1.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock10_1.1.xml.bin new file mode 100644 index 00000000..640f73ff --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock10_1.1.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock10_1.2.json.bin b/tests/_data/snapshots/poetry/with-extras_lock10_1.2.json.bin new file mode 100644 index 00000000..64718d0c --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock10_1.2.json.bin @@ -0,0 +1,32 @@ +{ + "dependencies": [ + { + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-extras_lock10_1.2.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock10_1.2.xml.bin new file mode 100644 index 00000000..00d95863 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock10_1.2.xml.bin @@ -0,0 +1,25 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock10_1.3.json.bin b/tests/_data/snapshots/poetry/with-extras_lock10_1.3.json.bin new file mode 100644 index 00000000..24199c42 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock10_1.3.json.bin @@ -0,0 +1,38 @@ +{ + "dependencies": [ + { + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-extras_lock10_1.3.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock10_1.3.xml.bin new file mode 100644 index 00000000..f26726dc --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock10_1.3.xml.bin @@ -0,0 +1,28 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock10_1.4.json.bin b/tests/_data/snapshots/poetry/with-extras_lock10_1.4.json.bin new file mode 100644 index 00000000..2666e3fa --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock10_1.4.json.bin @@ -0,0 +1,34 @@ +{ + "dependencies": [ + { + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-extras_lock10_1.4.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock10_1.4.xml.bin new file mode 100644 index 00000000..0c32ddc5 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock10_1.4.xml.bin @@ -0,0 +1,55 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock10_1.5.json.bin b/tests/_data/snapshots/poetry/with-extras_lock10_1.5.json.bin new file mode 100644 index 00000000..b6a380f0 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock10_1.5.json.bin @@ -0,0 +1,34 @@ +{ + "dependencies": [ + { + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-extras_lock10_1.5.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock10_1.5.xml.bin new file mode 100644 index 00000000..5df22f16 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock10_1.5.xml.bin @@ -0,0 +1,55 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock11_1.0.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock11_1.0.xml.bin new file mode 100644 index 00000000..acb06612 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock11_1.0.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock11_1.1.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock11_1.1.xml.bin new file mode 100644 index 00000000..640f73ff --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock11_1.1.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock11_1.2.json.bin b/tests/_data/snapshots/poetry/with-extras_lock11_1.2.json.bin new file mode 100644 index 00000000..64718d0c --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock11_1.2.json.bin @@ -0,0 +1,32 @@ +{ + "dependencies": [ + { + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-extras_lock11_1.2.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock11_1.2.xml.bin new file mode 100644 index 00000000..00d95863 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock11_1.2.xml.bin @@ -0,0 +1,25 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock11_1.3.json.bin b/tests/_data/snapshots/poetry/with-extras_lock11_1.3.json.bin new file mode 100644 index 00000000..24199c42 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock11_1.3.json.bin @@ -0,0 +1,38 @@ +{ + "dependencies": [ + { + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-extras_lock11_1.3.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock11_1.3.xml.bin new file mode 100644 index 00000000..f26726dc --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock11_1.3.xml.bin @@ -0,0 +1,28 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock11_1.4.json.bin b/tests/_data/snapshots/poetry/with-extras_lock11_1.4.json.bin new file mode 100644 index 00000000..2666e3fa --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock11_1.4.json.bin @@ -0,0 +1,34 @@ +{ + "dependencies": [ + { + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-extras_lock11_1.4.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock11_1.4.xml.bin new file mode 100644 index 00000000..0c32ddc5 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock11_1.4.xml.bin @@ -0,0 +1,55 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock11_1.5.json.bin b/tests/_data/snapshots/poetry/with-extras_lock11_1.5.json.bin new file mode 100644 index 00000000..b6a380f0 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock11_1.5.json.bin @@ -0,0 +1,34 @@ +{ + "dependencies": [ + { + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-extras_lock11_1.5.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock11_1.5.xml.bin new file mode 100644 index 00000000..5df22f16 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock11_1.5.xml.bin @@ -0,0 +1,55 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock20_1.0.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock20_1.0.xml.bin new file mode 100644 index 00000000..acb06612 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock20_1.0.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock20_1.1.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock20_1.1.xml.bin new file mode 100644 index 00000000..640f73ff --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock20_1.1.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock20_1.2.json.bin b/tests/_data/snapshots/poetry/with-extras_lock20_1.2.json.bin new file mode 100644 index 00000000..64718d0c --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock20_1.2.json.bin @@ -0,0 +1,32 @@ +{ + "dependencies": [ + { + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-extras_lock20_1.2.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock20_1.2.xml.bin new file mode 100644 index 00000000..00d95863 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock20_1.2.xml.bin @@ -0,0 +1,25 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/with-extras_lock20_1.3.json.bin new file mode 100644 index 00000000..24199c42 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock20_1.3.json.bin @@ -0,0 +1,38 @@ +{ + "dependencies": [ + { + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-extras_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock20_1.3.xml.bin new file mode 100644 index 00000000..f26726dc --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock20_1.3.xml.bin @@ -0,0 +1,28 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/with-extras_lock20_1.4.json.bin new file mode 100644 index 00000000..2666e3fa --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock20_1.4.json.bin @@ -0,0 +1,34 @@ +{ + "dependencies": [ + { + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-extras_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock20_1.4.xml.bin new file mode 100644 index 00000000..0c32ddc5 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock20_1.4.xml.bin @@ -0,0 +1,55 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + + diff --git a/tests/_data/snapshots/poetry/with-extras_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/with-extras_lock20_1.5.json.bin new file mode 100644 index 00000000..b6a380f0 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock20_1.5.json.bin @@ -0,0 +1,34 @@ +{ + "dependencies": [ + { + "ref": "with-extras" + } + ], + "metadata": { + "component": { + "bom-ref": "with-extras", + "description": "depenndencies with extras", + "name": "with-extras", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-extras_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/with-extras_lock20_1.5.xml.bin new file mode 100644 index 00000000..5df22f16 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-extras_lock20_1.5.xml.bin @@ -0,0 +1,55 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-extras + 0.1.0 + depenndencies with extras + + + true + + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock10_1.0.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock10_1.0.xml.bin new file mode 100644 index 00000000..02dcb259 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock10_1.0.xml.bin @@ -0,0 +1,33 @@ + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + false + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + false + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + false + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock10_1.1.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock10_1.1.xml.bin new file mode 100644 index 00000000..512c4e2c --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock10_1.1.xml.bin @@ -0,0 +1,53 @@ + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock10_1.2.json.bin b/tests/_data/snapshots/poetry/with-urls_lock10_1.2.json.bin new file mode 100644 index 00000000..fdfd7f0b --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock10_1.2.json.bin @@ -0,0 +1,117 @@ +{ + "components": [ + { + "bom-ref": "Pillow@10.1.0", + "description": "Python Imaging Library (Fork)", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "Pillow", + "purl": "pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "10.1.0" + }, + { + "bom-ref": "numpy@1.24.4", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" + } + ], + "name": "numpy", + "purl": "pkg:pypi/numpy@1.24.4", + "type": "library", + "version": "1.24.4" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "wxPython@4.2.2a1.dev5618+1f82021f", + "description": "Cross platform GUI toolkit for Python, \"Phoenix\" version", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" + } + ], + "name": "wxPython", + "purl": "pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl", + "type": "library", + "version": "4.2.2a1.dev5618+1f82021f" + } + ], + "dependencies": [ + { + "ref": "Pillow@10.1.0" + }, + { + "ref": "numpy@1.24.4" + }, + { + "ref": "six@1.16.0" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0", + "wxPython@4.2.2a1.dev5618+1f82021f" + ], + "ref": "with-urls" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0" + ], + "ref": "wxPython@4.2.2a1.dev5618+1f82021f" + } + ], + "metadata": { + "component": { + "bom-ref": "with-urls", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-urls_lock10_1.2.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock10_1.2.xml.bin new file mode 100644 index 00000000..89c29485 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock10_1.2.xml.bin @@ -0,0 +1,88 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-urls + 0.1.0 + packages from direct urls + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock10_1.3.json.bin b/tests/_data/snapshots/poetry/with-urls_lock10_1.3.json.bin new file mode 100644 index 00000000..14c3ba63 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock10_1.3.json.bin @@ -0,0 +1,155 @@ +{ + "components": [ + { + "bom-ref": "Pillow@10.1.0", + "description": "Python Imaging Library (Fork)", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "Pillow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "purl": "pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "10.1.0" + }, + { + "bom-ref": "numpy@1.24.4", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/numpy@1.24.4", + "type": "library", + "version": "1.24.4" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "purl": "pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "wxPython@4.2.2a1.dev5618+1f82021f", + "description": "Cross platform GUI toolkit for Python, \"Phoenix\" version", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" + } + ], + "name": "wxPython", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl", + "type": "library", + "version": "4.2.2a1.dev5618+1f82021f" + } + ], + "dependencies": [ + { + "ref": "Pillow@10.1.0" + }, + { + "ref": "numpy@1.24.4" + }, + { + "ref": "six@1.16.0" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0", + "wxPython@4.2.2a1.dev5618+1f82021f" + ], + "ref": "with-urls" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0" + ], + "ref": "wxPython@4.2.2a1.dev5618+1f82021f" + } + ], + "metadata": { + "component": { + "bom-ref": "with-urls", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-urls_lock10_1.3.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock10_1.3.xml.bin new file mode 100644 index 00000000..28c2d00e --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock10_1.3.xml.bin @@ -0,0 +1,105 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + main + da59ad000d1405eaecd557175e29083a87d19f7c + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + + + main + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + main + 65486e4383f9f411da95937451205d3c7b61b9e1 + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + + + main + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock10_1.4.json.bin b/tests/_data/snapshots/poetry/with-urls_lock10_1.4.json.bin new file mode 100644 index 00000000..5a0767f9 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock10_1.4.json.bin @@ -0,0 +1,151 @@ +{ + "components": [ + { + "bom-ref": "Pillow@10.1.0", + "description": "Python Imaging Library (Fork)", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "Pillow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "purl": "pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "10.1.0" + }, + { + "bom-ref": "numpy@1.24.4", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/numpy@1.24.4", + "type": "library", + "version": "1.24.4" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "purl": "pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "wxPython@4.2.2a1.dev5618+1f82021f", + "description": "Cross platform GUI toolkit for Python, \"Phoenix\" version", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" + } + ], + "name": "wxPython", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl", + "type": "library", + "version": "4.2.2a1.dev5618+1f82021f" + } + ], + "dependencies": [ + { + "ref": "Pillow@10.1.0" + }, + { + "ref": "numpy@1.24.4" + }, + { + "ref": "six@1.16.0" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0", + "wxPython@4.2.2a1.dev5618+1f82021f" + ], + "ref": "with-urls" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0" + ], + "ref": "wxPython@4.2.2a1.dev5618+1f82021f" + } + ], + "metadata": { + "component": { + "bom-ref": "with-urls", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-urls_lock10_1.4.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock10_1.4.xml.bin new file mode 100644 index 00000000..a57c21c3 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock10_1.4.xml.bin @@ -0,0 +1,132 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + main + da59ad000d1405eaecd557175e29083a87d19f7c + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + + + main + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + main + 65486e4383f9f411da95937451205d3c7b61b9e1 + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + + + main + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock10_1.5.json.bin b/tests/_data/snapshots/poetry/with-urls_lock10_1.5.json.bin new file mode 100644 index 00000000..ef00a489 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock10_1.5.json.bin @@ -0,0 +1,151 @@ +{ + "components": [ + { + "bom-ref": "Pillow@10.1.0", + "description": "Python Imaging Library (Fork)", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "Pillow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "purl": "pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "10.1.0" + }, + { + "bom-ref": "numpy@1.24.4", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/numpy@1.24.4", + "type": "library", + "version": "1.24.4" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "purl": "pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "wxPython@4.2.2a1.dev5618+1f82021f", + "description": "Cross platform GUI toolkit for Python, \"Phoenix\" version", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" + } + ], + "name": "wxPython", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl", + "type": "library", + "version": "4.2.2a1.dev5618+1f82021f" + } + ], + "dependencies": [ + { + "ref": "Pillow@10.1.0" + }, + { + "ref": "numpy@1.24.4" + }, + { + "ref": "six@1.16.0" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0", + "wxPython@4.2.2a1.dev5618+1f82021f" + ], + "ref": "with-urls" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0" + ], + "ref": "wxPython@4.2.2a1.dev5618+1f82021f" + } + ], + "metadata": { + "component": { + "bom-ref": "with-urls", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-urls_lock10_1.5.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock10_1.5.xml.bin new file mode 100644 index 00000000..0f696633 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock10_1.5.xml.bin @@ -0,0 +1,132 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + main + da59ad000d1405eaecd557175e29083a87d19f7c + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + + + main + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + main + 65486e4383f9f411da95937451205d3c7b61b9e1 + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + + + main + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock11_1.0.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock11_1.0.xml.bin new file mode 100644 index 00000000..02dcb259 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock11_1.0.xml.bin @@ -0,0 +1,33 @@ + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + false + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + false + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + false + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock11_1.1.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock11_1.1.xml.bin new file mode 100644 index 00000000..512c4e2c --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock11_1.1.xml.bin @@ -0,0 +1,53 @@ + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock11_1.2.json.bin b/tests/_data/snapshots/poetry/with-urls_lock11_1.2.json.bin new file mode 100644 index 00000000..fdfd7f0b --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock11_1.2.json.bin @@ -0,0 +1,117 @@ +{ + "components": [ + { + "bom-ref": "Pillow@10.1.0", + "description": "Python Imaging Library (Fork)", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "Pillow", + "purl": "pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "10.1.0" + }, + { + "bom-ref": "numpy@1.24.4", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" + } + ], + "name": "numpy", + "purl": "pkg:pypi/numpy@1.24.4", + "type": "library", + "version": "1.24.4" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "wxPython@4.2.2a1.dev5618+1f82021f", + "description": "Cross platform GUI toolkit for Python, \"Phoenix\" version", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" + } + ], + "name": "wxPython", + "purl": "pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl", + "type": "library", + "version": "4.2.2a1.dev5618+1f82021f" + } + ], + "dependencies": [ + { + "ref": "Pillow@10.1.0" + }, + { + "ref": "numpy@1.24.4" + }, + { + "ref": "six@1.16.0" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0", + "wxPython@4.2.2a1.dev5618+1f82021f" + ], + "ref": "with-urls" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0" + ], + "ref": "wxPython@4.2.2a1.dev5618+1f82021f" + } + ], + "metadata": { + "component": { + "bom-ref": "with-urls", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-urls_lock11_1.2.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock11_1.2.xml.bin new file mode 100644 index 00000000..89c29485 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock11_1.2.xml.bin @@ -0,0 +1,88 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-urls + 0.1.0 + packages from direct urls + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock11_1.3.json.bin b/tests/_data/snapshots/poetry/with-urls_lock11_1.3.json.bin new file mode 100644 index 00000000..b4d0630d --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock11_1.3.json.bin @@ -0,0 +1,163 @@ +{ + "components": [ + { + "bom-ref": "Pillow@10.1.0", + "description": "Python Imaging Library (Fork)", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "Pillow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:package:source:resolved_reference", + "value": "da59ad000d1405eaecd557175e29083a87d19f7c" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "10.1.0" + } + ], + "purl": "pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "10.1.0" + }, + { + "bom-ref": "numpy@1.24.4", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/numpy@1.24.4", + "type": "library", + "version": "1.24.4" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:package:source:resolved_reference", + "value": "65486e4383f9f411da95937451205d3c7b61b9e1" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "1.16.0" + } + ], + "purl": "pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "wxPython@4.2.2a1.dev5618+1f82021f", + "description": "Cross platform GUI toolkit for Python, \"Phoenix\" version", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" + } + ], + "name": "wxPython", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl", + "type": "library", + "version": "4.2.2a1.dev5618+1f82021f" + } + ], + "dependencies": [ + { + "ref": "Pillow@10.1.0" + }, + { + "ref": "numpy@1.24.4" + }, + { + "ref": "six@1.16.0" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0", + "wxPython@4.2.2a1.dev5618+1f82021f" + ], + "ref": "with-urls" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0" + ], + "ref": "wxPython@4.2.2a1.dev5618+1f82021f" + } + ], + "metadata": { + "component": { + "bom-ref": "with-urls", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-urls_lock11_1.3.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock11_1.3.xml.bin new file mode 100644 index 00000000..ad79f909 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock11_1.3.xml.bin @@ -0,0 +1,107 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + main + da59ad000d1405eaecd557175e29083a87d19f7c + 10.1.0 + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + + + main + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + main + 65486e4383f9f411da95937451205d3c7b61b9e1 + 1.16.0 + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + + + main + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock11_1.4.json.bin b/tests/_data/snapshots/poetry/with-urls_lock11_1.4.json.bin new file mode 100644 index 00000000..daadddcc --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock11_1.4.json.bin @@ -0,0 +1,159 @@ +{ + "components": [ + { + "bom-ref": "Pillow@10.1.0", + "description": "Python Imaging Library (Fork)", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "Pillow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:package:source:resolved_reference", + "value": "da59ad000d1405eaecd557175e29083a87d19f7c" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "10.1.0" + } + ], + "purl": "pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "10.1.0" + }, + { + "bom-ref": "numpy@1.24.4", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/numpy@1.24.4", + "type": "library", + "version": "1.24.4" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:package:source:resolved_reference", + "value": "65486e4383f9f411da95937451205d3c7b61b9e1" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "1.16.0" + } + ], + "purl": "pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "wxPython@4.2.2a1.dev5618+1f82021f", + "description": "Cross platform GUI toolkit for Python, \"Phoenix\" version", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" + } + ], + "name": "wxPython", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl", + "type": "library", + "version": "4.2.2a1.dev5618+1f82021f" + } + ], + "dependencies": [ + { + "ref": "Pillow@10.1.0" + }, + { + "ref": "numpy@1.24.4" + }, + { + "ref": "six@1.16.0" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0", + "wxPython@4.2.2a1.dev5618+1f82021f" + ], + "ref": "with-urls" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0" + ], + "ref": "wxPython@4.2.2a1.dev5618+1f82021f" + } + ], + "metadata": { + "component": { + "bom-ref": "with-urls", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-urls_lock11_1.4.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock11_1.4.xml.bin new file mode 100644 index 00000000..8d5dcfb8 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock11_1.4.xml.bin @@ -0,0 +1,134 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + main + da59ad000d1405eaecd557175e29083a87d19f7c + 10.1.0 + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + + + main + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + main + 65486e4383f9f411da95937451205d3c7b61b9e1 + 1.16.0 + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + + + main + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock11_1.5.json.bin b/tests/_data/snapshots/poetry/with-urls_lock11_1.5.json.bin new file mode 100644 index 00000000..1a98f44c --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock11_1.5.json.bin @@ -0,0 +1,159 @@ +{ + "components": [ + { + "bom-ref": "Pillow@10.1.0", + "description": "Python Imaging Library (Fork)", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "Pillow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:package:source:resolved_reference", + "value": "da59ad000d1405eaecd557175e29083a87d19f7c" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "10.1.0" + } + ], + "purl": "pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "10.1.0" + }, + { + "bom-ref": "numpy@1.24.4", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/numpy@1.24.4", + "type": "library", + "version": "1.24.4" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:package:source:resolved_reference", + "value": "65486e4383f9f411da95937451205d3c7b61b9e1" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "1.16.0" + } + ], + "purl": "pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "wxPython@4.2.2a1.dev5618+1f82021f", + "description": "Cross platform GUI toolkit for Python, \"Phoenix\" version", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" + } + ], + "name": "wxPython", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl", + "type": "library", + "version": "4.2.2a1.dev5618+1f82021f" + } + ], + "dependencies": [ + { + "ref": "Pillow@10.1.0" + }, + { + "ref": "numpy@1.24.4" + }, + { + "ref": "six@1.16.0" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0", + "wxPython@4.2.2a1.dev5618+1f82021f" + ], + "ref": "with-urls" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0" + ], + "ref": "wxPython@4.2.2a1.dev5618+1f82021f" + } + ], + "metadata": { + "component": { + "bom-ref": "with-urls", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-urls_lock11_1.5.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock11_1.5.xml.bin new file mode 100644 index 00000000..8243784f --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock11_1.5.xml.bin @@ -0,0 +1,134 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + main + da59ad000d1405eaecd557175e29083a87d19f7c + 10.1.0 + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + + + main + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + main + 65486e4383f9f411da95937451205d3c7b61b9e1 + 1.16.0 + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + + + main + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock20_1.0.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock20_1.0.xml.bin new file mode 100644 index 00000000..02dcb259 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock20_1.0.xml.bin @@ -0,0 +1,33 @@ + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + false + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + false + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + false + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + false + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock20_1.1.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock20_1.1.xml.bin new file mode 100644 index 00000000..512c4e2c --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock20_1.1.xml.bin @@ -0,0 +1,53 @@ + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock20_1.2.json.bin b/tests/_data/snapshots/poetry/with-urls_lock20_1.2.json.bin new file mode 100644 index 00000000..fdfd7f0b --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock20_1.2.json.bin @@ -0,0 +1,117 @@ +{ + "components": [ + { + "bom-ref": "Pillow@10.1.0", + "description": "Python Imaging Library (Fork)", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "Pillow", + "purl": "pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "10.1.0" + }, + { + "bom-ref": "numpy@1.24.4", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" + } + ], + "name": "numpy", + "purl": "pkg:pypi/numpy@1.24.4", + "type": "library", + "version": "1.24.4" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "purl": "pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "wxPython@4.2.2a1.dev5618+1f82021f", + "description": "Cross platform GUI toolkit for Python, \"Phoenix\" version", + "externalReferences": [ + { + "comment": "from url", + "type": "distribution", + "url": "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" + } + ], + "name": "wxPython", + "purl": "pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl", + "type": "library", + "version": "4.2.2a1.dev5618+1f82021f" + } + ], + "dependencies": [ + { + "ref": "Pillow@10.1.0" + }, + { + "ref": "numpy@1.24.4" + }, + { + "ref": "six@1.16.0" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0", + "wxPython@4.2.2a1.dev5618+1f82021f" + ], + "ref": "with-urls" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0" + ], + "ref": "wxPython@4.2.2a1.dev5618+1f82021f" + } + ], + "metadata": { + "component": { + "bom-ref": "with-urls", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-urls_lock20_1.2.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock20_1.2.xml.bin new file mode 100644 index 00000000..89c29485 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock20_1.2.xml.bin @@ -0,0 +1,88 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-urls + 0.1.0 + packages from direct urls + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/with-urls_lock20_1.3.json.bin new file mode 100644 index 00000000..4b7970f5 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock20_1.3.json.bin @@ -0,0 +1,175 @@ +{ + "components": [ + { + "bom-ref": "Pillow@10.1.0", + "description": "Python Imaging Library (Fork)", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "Pillow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:package:source:resolved_reference", + "value": "da59ad000d1405eaecd557175e29083a87d19f7c" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "10.1.0" + } + ], + "purl": "pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "10.1.0" + }, + { + "bom-ref": "numpy@1.24.4", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from url", + "hashes": [ + { + "alg": "SHA-256", + "content": "80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463" + } + ], + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/numpy@1.24.4", + "type": "library", + "version": "1.24.4" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:package:source:resolved_reference", + "value": "65486e4383f9f411da95937451205d3c7b61b9e1" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "1.16.0" + } + ], + "purl": "pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "wxPython@4.2.2a1.dev5618+1f82021f", + "description": "Cross platform GUI toolkit for Python, \"Phoenix\" version", + "externalReferences": [ + { + "comment": "from url", + "hashes": [ + { + "alg": "SHA-256", + "content": "6ebb5019c6b999941a6cddd298dff7951d826239d663f6ce698b9547ae72d6b9" + } + ], + "type": "distribution", + "url": "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" + } + ], + "name": "wxPython", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl", + "type": "library", + "version": "4.2.2a1.dev5618+1f82021f" + } + ], + "dependencies": [ + { + "ref": "Pillow@10.1.0" + }, + { + "ref": "numpy@1.24.4" + }, + { + "ref": "six@1.16.0" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0", + "wxPython@4.2.2a1.dev5618+1f82021f" + ], + "ref": "with-urls" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0" + ], + "ref": "wxPython@4.2.2a1.dev5618+1f82021f" + } + ], + "metadata": { + "component": { + "bom-ref": "with-urls", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-urls_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock20_1.3.xml.bin new file mode 100644 index 00000000..530aa048 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock20_1.3.xml.bin @@ -0,0 +1,113 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + main + da59ad000d1405eaecd557175e29083a87d19f7c + 10.1.0 + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + 80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463 + + + + + main + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + main + 65486e4383f9f411da95937451205d3c7b61b9e1 + 1.16.0 + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + 6ebb5019c6b999941a6cddd298dff7951d826239d663f6ce698b9547ae72d6b9 + + + + + main + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/with-urls_lock20_1.4.json.bin new file mode 100644 index 00000000..9d6e60d9 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock20_1.4.json.bin @@ -0,0 +1,171 @@ +{ + "components": [ + { + "bom-ref": "Pillow@10.1.0", + "description": "Python Imaging Library (Fork)", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "Pillow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:package:source:resolved_reference", + "value": "da59ad000d1405eaecd557175e29083a87d19f7c" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "10.1.0" + } + ], + "purl": "pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "10.1.0" + }, + { + "bom-ref": "numpy@1.24.4", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from url", + "hashes": [ + { + "alg": "SHA-256", + "content": "80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463" + } + ], + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/numpy@1.24.4", + "type": "library", + "version": "1.24.4" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:package:source:resolved_reference", + "value": "65486e4383f9f411da95937451205d3c7b61b9e1" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "1.16.0" + } + ], + "purl": "pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "wxPython@4.2.2a1.dev5618+1f82021f", + "description": "Cross platform GUI toolkit for Python, \"Phoenix\" version", + "externalReferences": [ + { + "comment": "from url", + "hashes": [ + { + "alg": "SHA-256", + "content": "6ebb5019c6b999941a6cddd298dff7951d826239d663f6ce698b9547ae72d6b9" + } + ], + "type": "distribution", + "url": "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" + } + ], + "name": "wxPython", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl", + "type": "library", + "version": "4.2.2a1.dev5618+1f82021f" + } + ], + "dependencies": [ + { + "ref": "Pillow@10.1.0" + }, + { + "ref": "numpy@1.24.4" + }, + { + "ref": "six@1.16.0" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0", + "wxPython@4.2.2a1.dev5618+1f82021f" + ], + "ref": "with-urls" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0" + ], + "ref": "wxPython@4.2.2a1.dev5618+1f82021f" + } + ], + "metadata": { + "component": { + "bom-ref": "with-urls", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-urls_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock20_1.4.xml.bin new file mode 100644 index 00000000..e85e44d1 --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock20_1.4.xml.bin @@ -0,0 +1,140 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + main + da59ad000d1405eaecd557175e29083a87d19f7c + 10.1.0 + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + 80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463 + + + + + main + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + main + 65486e4383f9f411da95937451205d3c7b61b9e1 + 1.16.0 + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + 6ebb5019c6b999941a6cddd298dff7951d826239d663f6ce698b9547ae72d6b9 + + + + + main + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/poetry/with-urls_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/with-urls_lock20_1.5.json.bin new file mode 100644 index 00000000..a90489ee --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock20_1.5.json.bin @@ -0,0 +1,171 @@ +{ + "components": [ + { + "bom-ref": "Pillow@10.1.0", + "description": "Python Imaging Library (Fork)", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c" + } + ], + "name": "Pillow", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:package:source:resolved_reference", + "value": "da59ad000d1405eaecd557175e29083a87d19f7c" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "10.1.0" + } + ], + "purl": "pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c", + "type": "library", + "version": "10.1.0" + }, + { + "bom-ref": "numpy@1.24.4", + "description": "Fundamental package for array computing in Python", + "externalReferences": [ + { + "comment": "from url", + "hashes": [ + { + "alg": "SHA-256", + "content": "80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463" + } + ], + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz" + } + ], + "name": "numpy", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/numpy@1.24.4", + "type": "library", + "version": "1.24.4" + }, + { + "bom-ref": "six@1.16.0", + "description": "Python 2 and 3 compatibility utilities", + "externalReferences": [ + { + "comment": "from VCS", + "type": "vcs", + "url": "git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1" + } + ], + "name": "six", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + }, + { + "name": "cdx:poetry:package:source:resolved_reference", + "value": "65486e4383f9f411da95937451205d3c7b61b9e1" + }, + { + "name": "cdx:poetry:source:package:reference", + "value": "1.16.0" + } + ], + "purl": "pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1", + "type": "library", + "version": "1.16.0" + }, + { + "bom-ref": "wxPython@4.2.2a1.dev5618+1f82021f", + "description": "Cross platform GUI toolkit for Python, \"Phoenix\" version", + "externalReferences": [ + { + "comment": "from url", + "hashes": [ + { + "alg": "SHA-256", + "content": "6ebb5019c6b999941a6cddd298dff7951d826239d663f6ce698b9547ae72d6b9" + } + ], + "type": "distribution", + "url": "https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl" + } + ], + "name": "wxPython", + "properties": [ + { + "name": "cdx:poetry:group", + "value": "main" + } + ], + "purl": "pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl", + "type": "library", + "version": "4.2.2a1.dev5618+1f82021f" + } + ], + "dependencies": [ + { + "ref": "Pillow@10.1.0" + }, + { + "ref": "numpy@1.24.4" + }, + { + "ref": "six@1.16.0" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0", + "wxPython@4.2.2a1.dev5618+1f82021f" + ], + "ref": "with-urls" + }, + { + "dependsOn": [ + "Pillow@10.1.0", + "numpy@1.24.4", + "six@1.16.0" + ], + "ref": "wxPython@4.2.2a1.dev5618+1f82021f" + } + ], + "metadata": { + "component": { + "bom-ref": "with-urls", + "description": "packages from direct urls", + "name": "with-urls", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/poetry/with-urls_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/with-urls_lock20_1.5.xml.bin new file mode 100644 index 00000000..9c4228bb --- /dev/null +++ b/tests/_data/snapshots/poetry/with-urls_lock20_1.5.xml.bin @@ -0,0 +1,140 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-urls + 0.1.0 + packages from direct urls + + + true + + + + + Pillow + 10.1.0 + Python Imaging Library (Fork) + pkg:pypi/pillow@10.1.0?vcs_url=git%2Bhttps://github.com/python-pillow/Pillow.git%40da59ad000d1405eaecd557175e29083a87d19f7c + + + git+https://github.com/python-pillow/Pillow.git#da59ad000d1405eaecd557175e29083a87d19f7c + from VCS + + + + main + da59ad000d1405eaecd557175e29083a87d19f7c + 10.1.0 + + + + numpy + 1.24.4 + Fundamental package for array computing in Python + pkg:pypi/numpy@1.24.4 + + + https://files.pythonhosted.org/packages/a4/9b/027bec52c633f6556dba6b722d9a0befb40498b9ceddd29cbe67a45a127c/numpy-1.24.4.tar.gz + from url + + 80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463 + + + + + main + + + + six + 1.16.0 + Python 2 and 3 compatibility utilities + pkg:pypi/six@1.16.0?vcs_url=git%2Bssh://git%40github.com/benjaminp/six.git%4065486e4383f9f411da95937451205d3c7b61b9e1 + + + git+ssh://git@github.com/benjaminp/six.git#65486e4383f9f411da95937451205d3c7b61b9e1 + from VCS + + + + main + 65486e4383f9f411da95937451205d3c7b61b9e1 + 1.16.0 + + + + wxPython + 4.2.2a1.dev5618+1f82021f + Cross platform GUI toolkit for Python, "Phoenix" version + pkg:pypi/wxpython@4.2.2a1.dev5618%2B1f82021f?download_url=https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618%2B1f82021f-cp38-cp38-win32.whl + + + https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.2.2a1.dev5618+1f82021f-cp38-cp38-win32.whl + from url + + 6ebb5019c6b999941a6cddd298dff7951d826239d663f6ce698b9547ae72d6b9 + + + + + main + + + + + + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_frozen_1.0.xml.bin b/tests/_data/snapshots/requirements/file_frozen_1.0.xml.bin new file mode 100644 index 00000000..aef72016 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_frozen_1.0.xml.bin @@ -0,0 +1,19 @@ + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + false + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + false + + + diff --git a/tests/_data/snapshots/requirements/file_frozen_1.1.xml.bin b/tests/_data/snapshots/requirements/file_frozen_1.1.xml.bin new file mode 100644 index 00000000..884f106e --- /dev/null +++ b/tests/_data/snapshots/requirements/file_frozen_1.1.xml.bin @@ -0,0 +1,29 @@ + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/file_frozen_1.2.json.bin b/tests/_data/snapshots/requirements/file_frozen_1.2.json.bin new file mode 100644 index 00000000..b310506a --- /dev/null +++ b/tests/_data/snapshots/requirements/file_frozen_1.2.json.bin @@ -0,0 +1,107 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: colorama==0.4.6", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + } + ], + "dependencies": [ + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_frozen_1.2.xml.bin b/tests/_data/snapshots/requirements/file_frozen_1.2.xml.bin new file mode 100644 index 00000000..3513da77 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_frozen_1.2.xml.bin @@ -0,0 +1,82 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_frozen_1.3.json.bin b/tests/_data/snapshots/requirements/file_frozen_1.3.json.bin new file mode 100644 index 00000000..1a155d4d --- /dev/null +++ b/tests/_data/snapshots/requirements/file_frozen_1.3.json.bin @@ -0,0 +1,123 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: colorama==0.4.6", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + } + ], + "dependencies": [ + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_frozen_1.3.xml.bin b/tests/_data/snapshots/requirements/file_frozen_1.3.xml.bin new file mode 100644 index 00000000..dd17bee7 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_frozen_1.3.xml.bin @@ -0,0 +1,89 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_frozen_1.4.json.bin b/tests/_data/snapshots/requirements/file_frozen_1.4.json.bin new file mode 100644 index 00000000..4983dca5 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_frozen_1.4.json.bin @@ -0,0 +1,119 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: colorama==0.4.6", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + } + ], + "dependencies": [ + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_frozen_1.4.xml.bin b/tests/_data/snapshots/requirements/file_frozen_1.4.xml.bin new file mode 100644 index 00000000..c0bf64b0 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_frozen_1.4.xml.bin @@ -0,0 +1,116 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_frozen_1.5.json.bin b/tests/_data/snapshots/requirements/file_frozen_1.5.json.bin new file mode 100644 index 00000000..d47b7f69 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_frozen_1.5.json.bin @@ -0,0 +1,119 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: colorama==0.4.6", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + } + ], + "dependencies": [ + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_frozen_1.5.xml.bin b/tests/_data/snapshots/requirements/file_frozen_1.5.xml.bin new file mode 100644 index 00000000..ca2880eb --- /dev/null +++ b/tests/_data/snapshots/requirements/file_frozen_1.5.xml.bin @@ -0,0 +1,116 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_local_1.0.xml.bin b/tests/_data/snapshots/requirements/file_local_1.0.xml.bin new file mode 100644 index 00000000..716b9580 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_local_1.0.xml.bin @@ -0,0 +1,41 @@ + + + + + foo + + requirements line 11: foo @ file://../foo + false + + + numpy + 1.9.2 + requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl + false + + + unknown + + requirements line 2: ./myproject/chardet + false + + + unknown + + requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + false + + + unknown + + requirements line 8: -e ./myproject/idna.whl + false + + + unknown + + requirements line 17: ./downloads/numpy-1.26.1.tar.gz + false + + + diff --git a/tests/_data/snapshots/requirements/file_local_1.1.xml.bin b/tests/_data/snapshots/requirements/file_local_1.1.xml.bin new file mode 100644 index 00000000..8cb3212f --- /dev/null +++ b/tests/_data/snapshots/requirements/file_local_1.1.xml.bin @@ -0,0 +1,71 @@ + + + + + foo + + requirements line 11: foo @ file://../foo + + + file://../foo + explicit local path + + + + + numpy + 1.9.2 + requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl + + + ./downloads/numpy-1.9.2-cp34-none-win32.whl + explicit local path + + + + + unknown + + requirements line 2: ./myproject/chardet + + + ./myproject/chardet + explicit local path + + + + + unknown + + requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + ./myproject/requests + explicit local path + + + + + unknown + + requirements line 8: -e ./myproject/idna.whl + + + ./myproject/idna.whl + explicit local path + + + + + unknown + + requirements line 17: ./downloads/numpy-1.26.1.tar.gz + + + ./downloads/numpy-1.26.1.tar.gz + explicit local path + + + + + diff --git a/tests/_data/snapshots/requirements/file_local_1.2.json.bin b/tests/_data/snapshots/requirements/file_local_1.2.json.bin new file mode 100644 index 00000000..4d3b1d8c --- /dev/null +++ b/tests/_data/snapshots/requirements/file_local_1.2.json.bin @@ -0,0 +1,173 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: foo @ file://../foo", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "file://../foo" + } + ], + "name": "foo", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L14", + "description": "requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.9.2-cp34-none-win32.whl" + } + ], + "name": "numpy", + "type": "library", + "version": "1.9.2" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: ./myproject/chardet", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/chardet" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/requests" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: -e ./myproject/idna.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/idna.whl" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L17", + "description": "requirements line 17: ./downloads/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L14" + }, + { + "ref": "requirements-L17" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L8" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_local_1.2.xml.bin b/tests/_data/snapshots/requirements/file_local_1.2.xml.bin new file mode 100644 index 00000000..b03d2cd5 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_local_1.2.xml.bin @@ -0,0 +1,128 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + foo + + requirements line 11: foo @ file://../foo + + + file://../foo + explicit local path + + + + + numpy + 1.9.2 + requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl + + + ./downloads/numpy-1.9.2-cp34-none-win32.whl + explicit local path + + + + + unknown + + requirements line 2: ./myproject/chardet + + + ./myproject/chardet + explicit local path + + + + + unknown + + requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + ./myproject/requests + explicit local path + + + + + unknown + + requirements line 8: -e ./myproject/idna.whl + + + ./myproject/idna.whl + explicit local path + + + + + unknown + + requirements line 17: ./downloads/numpy-1.26.1.tar.gz + + + ./downloads/numpy-1.26.1.tar.gz + explicit local path + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_local_1.3.json.bin b/tests/_data/snapshots/requirements/file_local_1.3.json.bin new file mode 100644 index 00000000..9a38c93d --- /dev/null +++ b/tests/_data/snapshots/requirements/file_local_1.3.json.bin @@ -0,0 +1,185 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: foo @ file://../foo", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "file://../foo" + } + ], + "name": "foo", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L14", + "description": "requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.9.2-cp34-none-win32.whl" + } + ], + "name": "numpy", + "type": "library", + "version": "1.9.2" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: ./myproject/chardet", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/chardet" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", + "externalReferences": [ + { + "comment": "explicit local path", + "hashes": [ + { + "alg": "SHA-256", + "content": "27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804" + } + ], + "type": "other", + "url": "./myproject/requests" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: -e ./myproject/idna.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/idna.whl" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L17", + "description": "requirements line 17: ./downloads/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L14" + }, + { + "ref": "requirements-L17" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L8" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_local_1.3.xml.bin b/tests/_data/snapshots/requirements/file_local_1.3.xml.bin new file mode 100644 index 00000000..e1618e94 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_local_1.3.xml.bin @@ -0,0 +1,134 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + foo + + requirements line 11: foo @ file://../foo + + + file://../foo + explicit local path + + + + + numpy + 1.9.2 + requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl + + + ./downloads/numpy-1.9.2-cp34-none-win32.whl + explicit local path + + + + + unknown + + requirements line 2: ./myproject/chardet + + + ./myproject/chardet + explicit local path + + + + + unknown + + requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + ./myproject/requests + explicit local path + + 27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + + + + unknown + + requirements line 8: -e ./myproject/idna.whl + + + ./myproject/idna.whl + explicit local path + + + + + unknown + + requirements line 17: ./downloads/numpy-1.26.1.tar.gz + + + ./downloads/numpy-1.26.1.tar.gz + explicit local path + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_local_1.4.json.bin b/tests/_data/snapshots/requirements/file_local_1.4.json.bin new file mode 100644 index 00000000..960e8bce --- /dev/null +++ b/tests/_data/snapshots/requirements/file_local_1.4.json.bin @@ -0,0 +1,176 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: foo @ file://../foo", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "file://../foo" + } + ], + "name": "foo", + "type": "library" + }, + { + "bom-ref": "requirements-L14", + "description": "requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.9.2-cp34-none-win32.whl" + } + ], + "name": "numpy", + "type": "library", + "version": "1.9.2" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: ./myproject/chardet", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/chardet" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", + "externalReferences": [ + { + "comment": "explicit local path", + "hashes": [ + { + "alg": "SHA-256", + "content": "27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804" + } + ], + "type": "other", + "url": "./myproject/requests" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: -e ./myproject/idna.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/idna.whl" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L17", + "description": "requirements line 17: ./downloads/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L14" + }, + { + "ref": "requirements-L17" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L8" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_local_1.4.xml.bin b/tests/_data/snapshots/requirements/file_local_1.4.xml.bin new file mode 100644 index 00000000..0a1ef26d --- /dev/null +++ b/tests/_data/snapshots/requirements/file_local_1.4.xml.bin @@ -0,0 +1,156 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + foo + requirements line 11: foo @ file://../foo + + + file://../foo + explicit local path + + + + + numpy + 1.9.2 + requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl + + + ./downloads/numpy-1.9.2-cp34-none-win32.whl + explicit local path + + + + + unknown + requirements line 2: ./myproject/chardet + + + ./myproject/chardet + explicit local path + + + + + unknown + requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + ./myproject/requests + explicit local path + + 27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + + + + unknown + requirements line 8: -e ./myproject/idna.whl + + + ./myproject/idna.whl + explicit local path + + + + + unknown + requirements line 17: ./downloads/numpy-1.26.1.tar.gz + + + ./downloads/numpy-1.26.1.tar.gz + explicit local path + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_local_1.5.json.bin b/tests/_data/snapshots/requirements/file_local_1.5.json.bin new file mode 100644 index 00000000..a040c790 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_local_1.5.json.bin @@ -0,0 +1,176 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: foo @ file://../foo", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "file://../foo" + } + ], + "name": "foo", + "type": "library" + }, + { + "bom-ref": "requirements-L14", + "description": "requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.9.2-cp34-none-win32.whl" + } + ], + "name": "numpy", + "type": "library", + "version": "1.9.2" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: ./myproject/chardet", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/chardet" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", + "externalReferences": [ + { + "comment": "explicit local path", + "hashes": [ + { + "alg": "SHA-256", + "content": "27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804" + } + ], + "type": "other", + "url": "./myproject/requests" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: -e ./myproject/idna.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/idna.whl" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L17", + "description": "requirements line 17: ./downloads/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L14" + }, + { + "ref": "requirements-L17" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L8" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_local_1.5.xml.bin b/tests/_data/snapshots/requirements/file_local_1.5.xml.bin new file mode 100644 index 00000000..9a1df7d5 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_local_1.5.xml.bin @@ -0,0 +1,156 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + foo + requirements line 11: foo @ file://../foo + + + file://../foo + explicit local path + + + + + numpy + 1.9.2 + requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl + + + ./downloads/numpy-1.9.2-cp34-none-win32.whl + explicit local path + + + + + unknown + requirements line 2: ./myproject/chardet + + + ./myproject/chardet + explicit local path + + + + + unknown + requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + ./myproject/requests + explicit local path + + 27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + + + + unknown + requirements line 8: -e ./myproject/idna.whl + + + ./myproject/idna.whl + explicit local path + + + + + unknown + requirements line 17: ./downloads/numpy-1.26.1.tar.gz + + + ./downloads/numpy-1.26.1.tar.gz + explicit local path + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_nested_1.0.xml.bin b/tests/_data/snapshots/requirements/file_nested_1.0.xml.bin new file mode 100644 index 00000000..aef72016 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_nested_1.0.xml.bin @@ -0,0 +1,19 @@ + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + false + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + false + + + diff --git a/tests/_data/snapshots/requirements/file_nested_1.1.xml.bin b/tests/_data/snapshots/requirements/file_nested_1.1.xml.bin new file mode 100644 index 00000000..884f106e --- /dev/null +++ b/tests/_data/snapshots/requirements/file_nested_1.1.xml.bin @@ -0,0 +1,29 @@ + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/file_nested_1.2.json.bin b/tests/_data/snapshots/requirements/file_nested_1.2.json.bin new file mode 100644 index 00000000..b310506a --- /dev/null +++ b/tests/_data/snapshots/requirements/file_nested_1.2.json.bin @@ -0,0 +1,107 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: colorama==0.4.6", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + } + ], + "dependencies": [ + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_nested_1.2.xml.bin b/tests/_data/snapshots/requirements/file_nested_1.2.xml.bin new file mode 100644 index 00000000..3513da77 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_nested_1.2.xml.bin @@ -0,0 +1,82 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_nested_1.3.json.bin b/tests/_data/snapshots/requirements/file_nested_1.3.json.bin new file mode 100644 index 00000000..1a155d4d --- /dev/null +++ b/tests/_data/snapshots/requirements/file_nested_1.3.json.bin @@ -0,0 +1,123 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: colorama==0.4.6", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + } + ], + "dependencies": [ + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_nested_1.3.xml.bin b/tests/_data/snapshots/requirements/file_nested_1.3.xml.bin new file mode 100644 index 00000000..dd17bee7 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_nested_1.3.xml.bin @@ -0,0 +1,89 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_nested_1.4.json.bin b/tests/_data/snapshots/requirements/file_nested_1.4.json.bin new file mode 100644 index 00000000..4983dca5 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_nested_1.4.json.bin @@ -0,0 +1,119 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: colorama==0.4.6", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + } + ], + "dependencies": [ + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_nested_1.4.xml.bin b/tests/_data/snapshots/requirements/file_nested_1.4.xml.bin new file mode 100644 index 00000000..c0bf64b0 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_nested_1.4.xml.bin @@ -0,0 +1,116 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_nested_1.5.json.bin b/tests/_data/snapshots/requirements/file_nested_1.5.json.bin new file mode 100644 index 00000000..d47b7f69 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_nested_1.5.json.bin @@ -0,0 +1,119 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: colorama==0.4.6", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + } + ], + "dependencies": [ + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_nested_1.5.xml.bin b/tests/_data/snapshots/requirements/file_nested_1.5.xml.bin new file mode 100644 index 00000000..ca2880eb --- /dev/null +++ b/tests/_data/snapshots/requirements/file_nested_1.5.xml.bin @@ -0,0 +1,116 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.0.xml.bin b/tests/_data/snapshots/requirements/file_private-packages_1.0.xml.bin new file mode 100644 index 00000000..197a5c57 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_private-packages_1.0.xml.bin @@ -0,0 +1,12 @@ + + + + + my-package + 1.2.3 + requirements line 7: my-package==1.2.3 + pkg:pypi/my-package@1.2.3 + false + + + diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.1.xml.bin b/tests/_data/snapshots/requirements/file_private-packages_1.1.xml.bin new file mode 100644 index 00000000..010a891d --- /dev/null +++ b/tests/_data/snapshots/requirements/file_private-packages_1.1.xml.bin @@ -0,0 +1,25 @@ + + + + + my-package + 1.2.3 + requirements line 7: my-package==1.2.3 + pkg:pypi/my-package@1.2.3 + + + https://legacy1.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://legacy2.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://pypackages.acme.org/simple//my-package/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.2.json.bin b/tests/_data/snapshots/requirements/file_private-packages_1.2.json.bin new file mode 100644 index 00000000..753b96de --- /dev/null +++ b/tests/_data/snapshots/requirements/file_private-packages_1.2.json.bin @@ -0,0 +1,99 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: my-package==1.2.3", + "externalReferences": [ + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy1.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy2.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypackages.acme.org/simple//my-package/" + } + ], + "name": "my-package", + "purl": "pkg:pypi/my-package@1.2.3", + "type": "library", + "version": "1.2.3" + } + ], + "dependencies": [ + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.2.xml.bin b/tests/_data/snapshots/requirements/file_private-packages_1.2.xml.bin new file mode 100644 index 00000000..1796a28e --- /dev/null +++ b/tests/_data/snapshots/requirements/file_private-packages_1.2.xml.bin @@ -0,0 +1,77 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + my-package + 1.2.3 + requirements line 7: my-package==1.2.3 + pkg:pypi/my-package@1.2.3 + + + https://legacy1.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://legacy2.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://pypackages.acme.org/simple//my-package/ + implicit dist url + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.3.json.bin b/tests/_data/snapshots/requirements/file_private-packages_1.3.json.bin new file mode 100644 index 00000000..3c684131 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_private-packages_1.3.json.bin @@ -0,0 +1,105 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: my-package==1.2.3", + "externalReferences": [ + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy1.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy2.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypackages.acme.org/simple//my-package/" + } + ], + "name": "my-package", + "purl": "pkg:pypi/my-package@1.2.3", + "type": "library", + "version": "1.2.3" + } + ], + "dependencies": [ + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.3.xml.bin b/tests/_data/snapshots/requirements/file_private-packages_1.3.xml.bin new file mode 100644 index 00000000..e4d01b8f --- /dev/null +++ b/tests/_data/snapshots/requirements/file_private-packages_1.3.xml.bin @@ -0,0 +1,80 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + my-package + 1.2.3 + requirements line 7: my-package==1.2.3 + pkg:pypi/my-package@1.2.3 + + + https://legacy1.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://legacy2.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://pypackages.acme.org/simple//my-package/ + implicit dist url + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.4.json.bin b/tests/_data/snapshots/requirements/file_private-packages_1.4.json.bin new file mode 100644 index 00000000..2fee87a9 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_private-packages_1.4.json.bin @@ -0,0 +1,101 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: my-package==1.2.3", + "externalReferences": [ + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy1.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy2.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypackages.acme.org/simple//my-package/" + } + ], + "name": "my-package", + "purl": "pkg:pypi/my-package@1.2.3", + "type": "library", + "version": "1.2.3" + } + ], + "dependencies": [ + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.4.xml.bin b/tests/_data/snapshots/requirements/file_private-packages_1.4.xml.bin new file mode 100644 index 00000000..9874fcef --- /dev/null +++ b/tests/_data/snapshots/requirements/file_private-packages_1.4.xml.bin @@ -0,0 +1,107 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + my-package + 1.2.3 + requirements line 7: my-package==1.2.3 + pkg:pypi/my-package@1.2.3 + + + https://legacy1.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://legacy2.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://pypackages.acme.org/simple//my-package/ + implicit dist url + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.5.json.bin b/tests/_data/snapshots/requirements/file_private-packages_1.5.json.bin new file mode 100644 index 00000000..7f68c0dd --- /dev/null +++ b/tests/_data/snapshots/requirements/file_private-packages_1.5.json.bin @@ -0,0 +1,101 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: my-package==1.2.3", + "externalReferences": [ + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy1.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy2.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypackages.acme.org/simple//my-package/" + } + ], + "name": "my-package", + "purl": "pkg:pypi/my-package@1.2.3", + "type": "library", + "version": "1.2.3" + } + ], + "dependencies": [ + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.5.xml.bin b/tests/_data/snapshots/requirements/file_private-packages_1.5.xml.bin new file mode 100644 index 00000000..ebd1ce40 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_private-packages_1.5.xml.bin @@ -0,0 +1,107 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + my-package + 1.2.3 + requirements line 7: my-package==1.2.3 + pkg:pypi/my-package@1.2.3 + + + https://legacy1.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://legacy2.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://pypackages.acme.org/simple//my-package/ + implicit dist url + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.0.xml.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.0.xml.bin new file mode 100644 index 00000000..5382704a --- /dev/null +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.0.xml.bin @@ -0,0 +1,26 @@ + + + + + packageurl-python + + requirements line 6: packageurl-python>=0.9.4 + pkg:pypi/packageurl-python + false + + + requirements_parser + + requirements line 7: requirements_parser>=0.2.0 + pkg:pypi/requirements-parser + false + + + setuptools + + requirements line 8: setuptools>=50.3.2 + pkg:pypi/setuptools + false + + + diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.1.xml.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.1.xml.bin new file mode 100644 index 00000000..9143afde --- /dev/null +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.1.xml.bin @@ -0,0 +1,41 @@ + + + + + packageurl-python + + requirements line 6: packageurl-python>=0.9.4 + pkg:pypi/packageurl-python + + + https://pypi.org/simple/packageurl-python/ + implicit dist url + + + + + requirements_parser + + requirements line 7: requirements_parser>=0.2.0 + pkg:pypi/requirements-parser + + + https://pypi.org/simple/requirements_parser/ + implicit dist url + + + + + setuptools + + requirements line 8: setuptools>=50.3.2 + pkg:pypi/setuptools + + + https://pypi.org/simple/setuptools/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.2.json.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.2.json.bin new file mode 100644 index 00000000..895b3a68 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.2.json.bin @@ -0,0 +1,125 @@ +{ + "components": [ + { + "bom-ref": "requirements-L6", + "description": "requirements line 6: packageurl-python>=0.9.4", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: requirements_parser>=0.2.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requirements_parser/" + } + ], + "name": "requirements_parser", + "purl": "pkg:pypi/requirements-parser", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: setuptools>=50.3.2", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/setuptools/" + } + ], + "name": "setuptools", + "purl": "pkg:pypi/setuptools", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "requirements-L6" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L8" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.2.xml.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.2.xml.bin new file mode 100644 index 00000000..9044b8e3 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.2.xml.bin @@ -0,0 +1,95 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + packageurl-python + + requirements line 6: packageurl-python>=0.9.4 + pkg:pypi/packageurl-python + + + https://pypi.org/simple/packageurl-python/ + implicit dist url + + + + + requirements_parser + + requirements line 7: requirements_parser>=0.2.0 + pkg:pypi/requirements-parser + + + https://pypi.org/simple/requirements_parser/ + implicit dist url + + + + + setuptools + + requirements line 8: setuptools>=50.3.2 + pkg:pypi/setuptools + + + https://pypi.org/simple/setuptools/ + implicit dist url + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.json.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.json.bin new file mode 100644 index 00000000..98f06000 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.json.bin @@ -0,0 +1,131 @@ +{ + "components": [ + { + "bom-ref": "requirements-L6", + "description": "requirements line 6: packageurl-python>=0.9.4", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: requirements_parser>=0.2.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requirements_parser/" + } + ], + "name": "requirements_parser", + "purl": "pkg:pypi/requirements-parser", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: setuptools>=50.3.2", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/setuptools/" + } + ], + "name": "setuptools", + "purl": "pkg:pypi/setuptools", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "requirements-L6" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L8" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.xml.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.xml.bin new file mode 100644 index 00000000..828994c4 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.xml.bin @@ -0,0 +1,98 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + packageurl-python + + requirements line 6: packageurl-python>=0.9.4 + pkg:pypi/packageurl-python + + + https://pypi.org/simple/packageurl-python/ + implicit dist url + + + + + requirements_parser + + requirements line 7: requirements_parser>=0.2.0 + pkg:pypi/requirements-parser + + + https://pypi.org/simple/requirements_parser/ + implicit dist url + + + + + setuptools + + requirements line 8: setuptools>=50.3.2 + pkg:pypi/setuptools + + + https://pypi.org/simple/setuptools/ + implicit dist url + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.json.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.json.bin new file mode 100644 index 00000000..22a54c59 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.json.bin @@ -0,0 +1,124 @@ +{ + "components": [ + { + "bom-ref": "requirements-L6", + "description": "requirements line 6: packageurl-python>=0.9.4", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python", + "type": "library" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: requirements_parser>=0.2.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requirements_parser/" + } + ], + "name": "requirements_parser", + "purl": "pkg:pypi/requirements-parser", + "type": "library" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: setuptools>=50.3.2", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/setuptools/" + } + ], + "name": "setuptools", + "purl": "pkg:pypi/setuptools", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "requirements-L6" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L8" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.xml.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.xml.bin new file mode 100644 index 00000000..49ebd84a --- /dev/null +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.xml.bin @@ -0,0 +1,122 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + packageurl-python + requirements line 6: packageurl-python>=0.9.4 + pkg:pypi/packageurl-python + + + https://pypi.org/simple/packageurl-python/ + implicit dist url + + + + + requirements_parser + requirements line 7: requirements_parser>=0.2.0 + pkg:pypi/requirements-parser + + + https://pypi.org/simple/requirements_parser/ + implicit dist url + + + + + setuptools + requirements line 8: setuptools>=50.3.2 + pkg:pypi/setuptools + + + https://pypi.org/simple/setuptools/ + implicit dist url + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.json.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.json.bin new file mode 100644 index 00000000..2604f871 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.json.bin @@ -0,0 +1,124 @@ +{ + "components": [ + { + "bom-ref": "requirements-L6", + "description": "requirements line 6: packageurl-python>=0.9.4", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python", + "type": "library" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: requirements_parser>=0.2.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requirements_parser/" + } + ], + "name": "requirements_parser", + "purl": "pkg:pypi/requirements-parser", + "type": "library" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: setuptools>=50.3.2", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/setuptools/" + } + ], + "name": "setuptools", + "purl": "pkg:pypi/setuptools", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "requirements-L6" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L8" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.xml.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.xml.bin new file mode 100644 index 00000000..183b9b0c --- /dev/null +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.xml.bin @@ -0,0 +1,122 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + packageurl-python + requirements line 6: packageurl-python>=0.9.4 + pkg:pypi/packageurl-python + + + https://pypi.org/simple/packageurl-python/ + implicit dist url + + + + + requirements_parser + requirements line 7: requirements_parser>=0.2.0 + pkg:pypi/requirements-parser + + + https://pypi.org/simple/requirements_parser/ + implicit dist url + + + + + setuptools + requirements line 8: setuptools>=50.3.2 + pkg:pypi/setuptools + + + https://pypi.org/simple/setuptools/ + implicit dist url + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.0.xml.bin b/tests/_data/snapshots/requirements/file_with-comments_1.0.xml.bin new file mode 100644 index 00000000..8302ef11 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-comments_1.0.xml.bin @@ -0,0 +1,40 @@ + + + + + certifi + 2021.5.30 + requirements line 1: certifi==2021.5.30 + pkg:pypi/certifi@2021.5.30 + false + + + chardet + 4.0.0 + requirements line 2: chardet==4.0.0 + pkg:pypi/chardet@4.0.0 + false + + + idna + 2.10 + requirements line 3: idna==2.10 + pkg:pypi/idna@2.10 + false + + + requests + 2.25.1 + requirements line 4: requests==2.25.1 + pkg:pypi/requests@2.25.1 + false + + + urllib3 + 1.26.5 + requirements line 5: urllib3==1.26.5 + pkg:pypi/urllib3@1.26.5 + false + + + diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.1.xml.bin b/tests/_data/snapshots/requirements/file_with-comments_1.1.xml.bin new file mode 100644 index 00000000..a49b1a98 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-comments_1.1.xml.bin @@ -0,0 +1,65 @@ + + + + + certifi + 2021.5.30 + requirements line 1: certifi==2021.5.30 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + 4.0.0 + requirements line 2: chardet==4.0.0 + pkg:pypi/chardet@4.0.0 + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + idna + 2.10 + requirements line 3: idna==2.10 + pkg:pypi/idna@2.10 + + + https://pypi.org/simple/idna/ + implicit dist url + + + + + requests + 2.25.1 + requirements line 4: requests==2.25.1 + pkg:pypi/requests@2.25.1 + + + https://pypi.org/simple/requests/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 5: urllib3==1.26.5 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.2.json.bin b/tests/_data/snapshots/requirements/file_with-comments_1.2.json.bin new file mode 100644 index 00000000..f7f52c2c --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-comments_1.2.json.bin @@ -0,0 +1,161 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi==2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet==4.0.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@4.0.0", + "type": "library", + "version": "4.0.0" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: idna==2.10", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@2.10", + "type": "library", + "version": "2.10" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: requests==2.25.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requests/" + } + ], + "name": "requests", + "purl": "pkg:pypi/requests@2.25.1", + "type": "library", + "version": "2.25.1" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: urllib3==1.26.5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.2.xml.bin b/tests/_data/snapshots/requirements/file_with-comments_1.2.xml.bin new file mode 100644 index 00000000..7037b0fc --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-comments_1.2.xml.bin @@ -0,0 +1,121 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + certifi + 2021.5.30 + requirements line 1: certifi==2021.5.30 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + 4.0.0 + requirements line 2: chardet==4.0.0 + pkg:pypi/chardet@4.0.0 + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + idna + 2.10 + requirements line 3: idna==2.10 + pkg:pypi/idna@2.10 + + + https://pypi.org/simple/idna/ + implicit dist url + + + + + requests + 2.25.1 + requirements line 4: requests==2.25.1 + pkg:pypi/requests@2.25.1 + + + https://pypi.org/simple/requests/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 5: urllib3==1.26.5 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.3.json.bin b/tests/_data/snapshots/requirements/file_with-comments_1.3.json.bin new file mode 100644 index 00000000..be168f13 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-comments_1.3.json.bin @@ -0,0 +1,167 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi==2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet==4.0.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@4.0.0", + "type": "library", + "version": "4.0.0" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: idna==2.10", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@2.10", + "type": "library", + "version": "2.10" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: requests==2.25.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requests/" + } + ], + "name": "requests", + "purl": "pkg:pypi/requests@2.25.1", + "type": "library", + "version": "2.25.1" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: urllib3==1.26.5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.3.xml.bin b/tests/_data/snapshots/requirements/file_with-comments_1.3.xml.bin new file mode 100644 index 00000000..9c87d8d4 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-comments_1.3.xml.bin @@ -0,0 +1,124 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + certifi + 2021.5.30 + requirements line 1: certifi==2021.5.30 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + 4.0.0 + requirements line 2: chardet==4.0.0 + pkg:pypi/chardet@4.0.0 + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + idna + 2.10 + requirements line 3: idna==2.10 + pkg:pypi/idna@2.10 + + + https://pypi.org/simple/idna/ + implicit dist url + + + + + requests + 2.25.1 + requirements line 4: requests==2.25.1 + pkg:pypi/requests@2.25.1 + + + https://pypi.org/simple/requests/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 5: urllib3==1.26.5 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.4.json.bin b/tests/_data/snapshots/requirements/file_with-comments_1.4.json.bin new file mode 100644 index 00000000..e6ceefaa --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-comments_1.4.json.bin @@ -0,0 +1,163 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi==2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet==4.0.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@4.0.0", + "type": "library", + "version": "4.0.0" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: idna==2.10", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@2.10", + "type": "library", + "version": "2.10" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: requests==2.25.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requests/" + } + ], + "name": "requests", + "purl": "pkg:pypi/requests@2.25.1", + "type": "library", + "version": "2.25.1" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: urllib3==1.26.5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.4.xml.bin b/tests/_data/snapshots/requirements/file_with-comments_1.4.xml.bin new file mode 100644 index 00000000..be40617c --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-comments_1.4.xml.bin @@ -0,0 +1,151 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + certifi + 2021.5.30 + requirements line 1: certifi==2021.5.30 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + 4.0.0 + requirements line 2: chardet==4.0.0 + pkg:pypi/chardet@4.0.0 + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + idna + 2.10 + requirements line 3: idna==2.10 + pkg:pypi/idna@2.10 + + + https://pypi.org/simple/idna/ + implicit dist url + + + + + requests + 2.25.1 + requirements line 4: requests==2.25.1 + pkg:pypi/requests@2.25.1 + + + https://pypi.org/simple/requests/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 5: urllib3==1.26.5 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.5.json.bin b/tests/_data/snapshots/requirements/file_with-comments_1.5.json.bin new file mode 100644 index 00000000..2154f2fb --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-comments_1.5.json.bin @@ -0,0 +1,163 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi==2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet==4.0.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@4.0.0", + "type": "library", + "version": "4.0.0" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: idna==2.10", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@2.10", + "type": "library", + "version": "2.10" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: requests==2.25.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requests/" + } + ], + "name": "requests", + "purl": "pkg:pypi/requests@2.25.1", + "type": "library", + "version": "2.25.1" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: urllib3==1.26.5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.5.xml.bin b/tests/_data/snapshots/requirements/file_with-comments_1.5.xml.bin new file mode 100644 index 00000000..82d91657 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-comments_1.5.xml.bin @@ -0,0 +1,151 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + certifi + 2021.5.30 + requirements line 1: certifi==2021.5.30 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + 4.0.0 + requirements line 2: chardet==4.0.0 + pkg:pypi/chardet@4.0.0 + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + idna + 2.10 + requirements line 3: idna==2.10 + pkg:pypi/idna@2.10 + + + https://pypi.org/simple/idna/ + implicit dist url + + + + + requests + 2.25.1 + requirements line 4: requests==2.25.1 + pkg:pypi/requests@2.25.1 + + + https://pypi.org/simple/requests/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 5: urllib3==1.26.5 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.0.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.0.xml.bin new file mode 100644 index 00000000..1f0fb594 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-extras_1.0.xml.bin @@ -0,0 +1,12 @@ + + + + + cyclonedx-python-lib + 5.1.1 + requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + false + + + diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.1.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.1.xml.bin new file mode 100644 index 00000000..8bb743d6 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-extras_1.1.xml.bin @@ -0,0 +1,17 @@ + + + + + cyclonedx-python-lib + 5.1.1 + requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.2.json.bin b/tests/_data/snapshots/requirements/file_with-extras_1.2.json.bin new file mode 100644 index 00000000..7dcde577 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-extras_1.2.json.bin @@ -0,0 +1,89 @@ +{ + "components": [ + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/" + } + ], + "name": "cyclonedx-python-lib", + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "type": "library", + "version": "5.1.1" + } + ], + "dependencies": [ + { + "ref": "requirements-L3" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.2.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.2.xml.bin new file mode 100644 index 00000000..1eb84df9 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-extras_1.2.xml.bin @@ -0,0 +1,69 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + cyclonedx-python-lib + 5.1.1 + requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + implicit dist url + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.3.json.bin b/tests/_data/snapshots/requirements/file_with-extras_1.3.json.bin new file mode 100644 index 00000000..52d42e29 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-extras_1.3.json.bin @@ -0,0 +1,105 @@ +{ + "components": [ + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/" + } + ], + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "type": "library", + "version": "5.1.1" + } + ], + "dependencies": [ + { + "ref": "requirements-L3" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.3.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.3.xml.bin new file mode 100644 index 00000000..041cc4bf --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-extras_1.3.xml.bin @@ -0,0 +1,76 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + cyclonedx-python-lib + 5.1.1 + requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + implicit dist url + + + + json-validation + xml-validation + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.4.json.bin b/tests/_data/snapshots/requirements/file_with-extras_1.4.json.bin new file mode 100644 index 00000000..99134644 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-extras_1.4.json.bin @@ -0,0 +1,101 @@ +{ + "components": [ + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/" + } + ], + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "type": "library", + "version": "5.1.1" + } + ], + "dependencies": [ + { + "ref": "requirements-L3" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.4.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.4.xml.bin new file mode 100644 index 00000000..aa2e029d --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-extras_1.4.xml.bin @@ -0,0 +1,103 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + cyclonedx-python-lib + 5.1.1 + requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + implicit dist url + + + + json-validation + xml-validation + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.5.json.bin b/tests/_data/snapshots/requirements/file_with-extras_1.5.json.bin new file mode 100644 index 00000000..816a9804 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-extras_1.5.json.bin @@ -0,0 +1,101 @@ +{ + "components": [ + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/" + } + ], + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "type": "library", + "version": "5.1.1" + } + ], + "dependencies": [ + { + "ref": "requirements-L3" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.5.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.5.xml.bin new file mode 100644 index 00000000..eadf49f4 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-extras_1.5.xml.bin @@ -0,0 +1,103 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + cyclonedx-python-lib + 5.1.1 + requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + implicit dist url + + + + json-validation + xml-validation + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.0.xml.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.0.xml.bin new file mode 100644 index 00000000..f415b179 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.0.xml.bin @@ -0,0 +1,40 @@ + + + + + FooProject + 1.2 + requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + false + + + certifi + 2021.5.30 + requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + pkg:pypi/certifi@2021.5.30 + false + + + colorama + + requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + false + + + something + 1.33.7 + requirements line 21: something == 1.33.7 --hash=foo:something-invalid + pkg:pypi/something@1.33.7 + false + + + urllib3 + 1.26.5 + requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + pkg:pypi/urllib3@1.26.5 + false + + + diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.1.xml.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.1.xml.bin new file mode 100644 index 00000000..181133d8 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.1.xml.bin @@ -0,0 +1,65 @@ + + + + + FooProject + 1.2 + requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + + + + certifi + 2021.5.30 + requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + colorama + + requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + + + https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + explicit dist url + + + + + something + 1.33.7 + requirements line 21: something == 1.33.7 --hash=foo:something-invalid + pkg:pypi/something@1.33.7 + + + https://pypi.org/simple/something/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.2.json.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.2.json.bin new file mode 100644 index 00000000..ab177505 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.2.json.bin @@ -0,0 +1,161 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L16", + "description": "requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L21", + "description": "requirements line 21: something == 1.33.7 --hash=foo:something-invalid", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/something/" + } + ], + "name": "something", + "purl": "pkg:pypi/something@1.33.7", + "type": "library", + "version": "1.33.7" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L16" + }, + { + "ref": "requirements-L21" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.2.xml.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.2.xml.bin new file mode 100644 index 00000000..5b7ba0a8 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.2.xml.bin @@ -0,0 +1,121 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + FooProject + 1.2 + requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + + + + certifi + 2021.5.30 + requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + colorama + + requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + + + https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + explicit dist url + + + + + something + 1.33.7 + requirements line 21: something == 1.33.7 --hash=foo:something-invalid + pkg:pypi/something@1.33.7 + + + https://pypi.org/simple/something/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.3.json.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.3.json.bin new file mode 100644 index 00000000..7517fa27 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.3.json.bin @@ -0,0 +1,207 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee" + }, + { + "alg": "SHA-256", + "content": "50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L16", + "description": "requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a", + "externalReferences": [ + { + "comment": "explicit dist url", + "hashes": [ + { + "alg": "MD5", + "content": "9854316552d41419b678d39af443a75f" + }, + { + "alg": "SHA-1", + "content": "aa1fc7722b9128a3c945048de03f5b4e55157c6a" + } + ], + "type": "distribution", + "url": "https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L21", + "description": "requirements line 21: something == 1.33.7 --hash=foo:something-invalid", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/something/" + } + ], + "name": "something", + "purl": "pkg:pypi/something@1.33.7", + "type": "library", + "version": "1.33.7" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c" + }, + { + "alg": "SHA-256", + "content": "a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L16" + }, + { + "ref": "requirements-L21" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.3.xml.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.3.xml.bin new file mode 100644 index 00000000..009476f8 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.3.xml.bin @@ -0,0 +1,140 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + FooProject + 1.2 + requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + certifi + 2021.5.30 + requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + 2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee + 50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + + + + + + colorama + + requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + + + https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + explicit dist url + + 9854316552d41419b678d39af443a75f + aa1fc7722b9128a3c945048de03f5b4e55157c6a + + + + + + something + 1.33.7 + requirements line 21: something == 1.33.7 --hash=foo:something-invalid + pkg:pypi/something@1.33.7 + + + https://pypi.org/simple/something/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + 753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c + a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.4.json.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.4.json.bin new file mode 100644 index 00000000..99c0a8f9 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.4.json.bin @@ -0,0 +1,202 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee" + }, + { + "alg": "SHA-256", + "content": "50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L16", + "description": "requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a", + "externalReferences": [ + { + "comment": "explicit dist url", + "hashes": [ + { + "alg": "MD5", + "content": "9854316552d41419b678d39af443a75f" + }, + { + "alg": "SHA-1", + "content": "aa1fc7722b9128a3c945048de03f5b4e55157c6a" + } + ], + "type": "distribution", + "url": "https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz", + "type": "library" + }, + { + "bom-ref": "requirements-L21", + "description": "requirements line 21: something == 1.33.7 --hash=foo:something-invalid", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/something/" + } + ], + "name": "something", + "purl": "pkg:pypi/something@1.33.7", + "type": "library", + "version": "1.33.7" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c" + }, + { + "alg": "SHA-256", + "content": "a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L16" + }, + { + "ref": "requirements-L21" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.4.xml.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.4.xml.bin new file mode 100644 index 00000000..069637b1 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.4.xml.bin @@ -0,0 +1,166 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + FooProject + 1.2 + requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + certifi + 2021.5.30 + requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + 2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee + 50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + + + + + + colorama + requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + + + https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + explicit dist url + + 9854316552d41419b678d39af443a75f + aa1fc7722b9128a3c945048de03f5b4e55157c6a + + + + + + something + 1.33.7 + requirements line 21: something == 1.33.7 --hash=foo:something-invalid + pkg:pypi/something@1.33.7 + + + https://pypi.org/simple/something/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + 753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c + a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.5.json.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.5.json.bin new file mode 100644 index 00000000..5779dd45 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.5.json.bin @@ -0,0 +1,202 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee" + }, + { + "alg": "SHA-256", + "content": "50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L16", + "description": "requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a", + "externalReferences": [ + { + "comment": "explicit dist url", + "hashes": [ + { + "alg": "MD5", + "content": "9854316552d41419b678d39af443a75f" + }, + { + "alg": "SHA-1", + "content": "aa1fc7722b9128a3c945048de03f5b4e55157c6a" + } + ], + "type": "distribution", + "url": "https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz", + "type": "library" + }, + { + "bom-ref": "requirements-L21", + "description": "requirements line 21: something == 1.33.7 --hash=foo:something-invalid", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/something/" + } + ], + "name": "something", + "purl": "pkg:pypi/something@1.33.7", + "type": "library", + "version": "1.33.7" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c" + }, + { + "alg": "SHA-256", + "content": "a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L16" + }, + { + "ref": "requirements-L21" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.5.xml.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.5.xml.bin new file mode 100644 index 00000000..674809ba --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.5.xml.bin @@ -0,0 +1,166 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + FooProject + 1.2 + requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + certifi + 2021.5.30 + requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + 2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee + 50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + + + + + + colorama + requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + + + https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + explicit dist url + + 9854316552d41419b678d39af443a75f + aa1fc7722b9128a3c945048de03f5b4e55157c6a + + + + + + something + 1.33.7 + requirements line 21: something == 1.33.7 --hash=foo:something-invalid + pkg:pypi/something@1.33.7 + + + https://pypi.org/simple/something/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + 753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c + a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.0.xml.bin b/tests/_data/snapshots/requirements/file_with-urls_1.0.xml.bin new file mode 100644 index 00000000..68562923 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-urls_1.0.xml.bin @@ -0,0 +1,53 @@ + + + + + package-four + + requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four + false + + + package-one + + requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one + pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one + false + + + package-three + + requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three + pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three + false + + + package-two + + requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two + pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two + false + + + unknown + + requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + false + + + urllib3 + + requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + false + + + wxPython-Phoenix + 3.0.3.dev1820+49a8884 + requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl + false + + + diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.1.xml.bin b/tests/_data/snapshots/requirements/file_with-urls_1.1.xml.bin new file mode 100644 index 00000000..6c4e9f53 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-urls_1.1.xml.bin @@ -0,0 +1,88 @@ + + + + + package-four + + requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four + + + git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + explicit dist url + + + + + package-one + + requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one + pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one + + + git+https://github.com/path/to/package-one@41b95ec#egg=package-one + explicit dist url + + + + + package-three + + requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three + pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three + + + git+https://github.com/path/to/package-three@0.1#egg=package-three + explicit dist url + + + + + package-two + + requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two + pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two + + + git+https://github.com/path/to/package-two@master#egg=package-two + explicit dist url + + + + + unknown + + requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + + + https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + explicit dist url + + + + + urllib3 + + requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + explicit dist url + + + + + wxPython-Phoenix + 3.0.3.dev1820+49a8884 + requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl + + + http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + explicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.2.json.bin b/tests/_data/snapshots/requirements/file_with-urls_1.2.json.bin new file mode 100644 index 00000000..8ee9ce35 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-urls_1.2.json.bin @@ -0,0 +1,196 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four" + } + ], + "name": "package-four", + "purl": "pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-one@41b95ec#egg=package-one" + } + ], + "name": "package-one", + "purl": "pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L9", + "description": "requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-three@0.1#egg=package-three" + } + ], + "name": "package-three", + "purl": "pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-two@master#egg=package-two" + } + ], + "name": "package-two", + "purl": "pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L19", + "description": "requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L23", + "description": "requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L15", + "description": "requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl" + } + ], + "name": "wxPython-Phoenix", + "purl": "pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl", + "type": "library", + "version": "3.0.3.dev1820+49a8884" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L15" + }, + { + "ref": "requirements-L19" + }, + { + "ref": "requirements-L23" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L9" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.2.xml.bin b/tests/_data/snapshots/requirements/file_with-urls_1.2.xml.bin new file mode 100644 index 00000000..9070e5be --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-urls_1.2.xml.bin @@ -0,0 +1,146 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + package-four + + requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four + + + git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + explicit dist url + + + + + package-one + + requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one + pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one + + + git+https://github.com/path/to/package-one@41b95ec#egg=package-one + explicit dist url + + + + + package-three + + requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three + pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three + + + git+https://github.com/path/to/package-three@0.1#egg=package-three + explicit dist url + + + + + package-two + + requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two + pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two + + + git+https://github.com/path/to/package-two@master#egg=package-two + explicit dist url + + + + + unknown + + requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + + + https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + explicit dist url + + + + + urllib3 + + requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + explicit dist url + + + + + wxPython-Phoenix + 3.0.3.dev1820+49a8884 + requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl + + + http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + explicit dist url + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.3.json.bin b/tests/_data/snapshots/requirements/file_with-urls_1.3.json.bin new file mode 100644 index 00000000..61de566f --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-urls_1.3.json.bin @@ -0,0 +1,202 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four" + } + ], + "name": "package-four", + "purl": "pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-one@41b95ec#egg=package-one" + } + ], + "name": "package-one", + "purl": "pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L9", + "description": "requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-three@0.1#egg=package-three" + } + ], + "name": "package-three", + "purl": "pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-two@master#egg=package-two" + } + ], + "name": "package-two", + "purl": "pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L19", + "description": "requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L23", + "description": "requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L15", + "description": "requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl" + } + ], + "name": "wxPython-Phoenix", + "purl": "pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl", + "type": "library", + "version": "3.0.3.dev1820+49a8884" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L15" + }, + { + "ref": "requirements-L19" + }, + { + "ref": "requirements-L23" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L9" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.3.xml.bin b/tests/_data/snapshots/requirements/file_with-urls_1.3.xml.bin new file mode 100644 index 00000000..6bc10c75 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-urls_1.3.xml.bin @@ -0,0 +1,149 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + package-four + + requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four + + + git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + explicit dist url + + + + + package-one + + requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one + pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one + + + git+https://github.com/path/to/package-one@41b95ec#egg=package-one + explicit dist url + + + + + package-three + + requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three + pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three + + + git+https://github.com/path/to/package-three@0.1#egg=package-three + explicit dist url + + + + + package-two + + requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two + pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two + + + git+https://github.com/path/to/package-two@master#egg=package-two + explicit dist url + + + + + unknown + + requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + + + https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + explicit dist url + + + + + urllib3 + + requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + explicit dist url + + + + + wxPython-Phoenix + 3.0.3.dev1820+49a8884 + requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl + + + http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + explicit dist url + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.4.json.bin b/tests/_data/snapshots/requirements/file_with-urls_1.4.json.bin new file mode 100644 index 00000000..0e5258eb --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-urls_1.4.json.bin @@ -0,0 +1,192 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four" + } + ], + "name": "package-four", + "purl": "pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four", + "type": "library" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-one@41b95ec#egg=package-one" + } + ], + "name": "package-one", + "purl": "pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one", + "type": "library" + }, + { + "bom-ref": "requirements-L9", + "description": "requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-three@0.1#egg=package-three" + } + ], + "name": "package-three", + "purl": "pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three", + "type": "library" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-two@master#egg=package-two" + } + ], + "name": "package-two", + "purl": "pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two", + "type": "library" + }, + { + "bom-ref": "requirements-L19", + "description": "requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L23", + "description": "requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library" + }, + { + "bom-ref": "requirements-L15", + "description": "requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl" + } + ], + "name": "wxPython-Phoenix", + "purl": "pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl", + "type": "library", + "version": "3.0.3.dev1820+49a8884" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L15" + }, + { + "ref": "requirements-L19" + }, + { + "ref": "requirements-L23" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L9" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.4.xml.bin b/tests/_data/snapshots/requirements/file_with-urls_1.4.xml.bin new file mode 100644 index 00000000..661f5087 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-urls_1.4.xml.bin @@ -0,0 +1,170 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + package-four + requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four + + + git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + explicit dist url + + + + + package-one + requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one + pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one + + + git+https://github.com/path/to/package-one@41b95ec#egg=package-one + explicit dist url + + + + + package-three + requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three + pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three + + + git+https://github.com/path/to/package-three@0.1#egg=package-three + explicit dist url + + + + + package-two + requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two + pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two + + + git+https://github.com/path/to/package-two@master#egg=package-two + explicit dist url + + + + + unknown + requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + + + https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + explicit dist url + + + + + urllib3 + requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + explicit dist url + + + + + wxPython-Phoenix + 3.0.3.dev1820+49a8884 + requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl + + + http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + explicit dist url + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.5.json.bin b/tests/_data/snapshots/requirements/file_with-urls_1.5.json.bin new file mode 100644 index 00000000..9f87097c --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-urls_1.5.json.bin @@ -0,0 +1,192 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four" + } + ], + "name": "package-four", + "purl": "pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four", + "type": "library" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-one@41b95ec#egg=package-one" + } + ], + "name": "package-one", + "purl": "pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one", + "type": "library" + }, + { + "bom-ref": "requirements-L9", + "description": "requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-three@0.1#egg=package-three" + } + ], + "name": "package-three", + "purl": "pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three", + "type": "library" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-two@master#egg=package-two" + } + ], + "name": "package-two", + "purl": "pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two", + "type": "library" + }, + { + "bom-ref": "requirements-L19", + "description": "requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L23", + "description": "requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library" + }, + { + "bom-ref": "requirements-L15", + "description": "requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl" + } + ], + "name": "wxPython-Phoenix", + "purl": "pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl", + "type": "library", + "version": "3.0.3.dev1820+49a8884" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L15" + }, + { + "ref": "requirements-L19" + }, + { + "ref": "requirements-L23" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L9" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.5.xml.bin b/tests/_data/snapshots/requirements/file_with-urls_1.5.xml.bin new file mode 100644 index 00000000..79816cf5 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_with-urls_1.5.xml.bin @@ -0,0 +1,170 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + package-four + requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four + + + git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + explicit dist url + + + + + package-one + requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one + pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one + + + git+https://github.com/path/to/package-one@41b95ec#egg=package-one + explicit dist url + + + + + package-three + requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three + pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three + + + git+https://github.com/path/to/package-three@0.1#egg=package-three + explicit dist url + + + + + package-two + requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two + pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two + + + git+https://github.com/path/to/package-two@master#egg=package-two + explicit dist url + + + + + unknown + requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + + + https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + explicit dist url + + + + + urllib3 + requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + explicit dist url + + + + + wxPython-Phoenix + 3.0.3.dev1820+49a8884 + requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl + + + http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + explicit dist url + + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.0.xml.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.0.xml.bin new file mode 100644 index 00000000..2c1666d8 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.0.xml.bin @@ -0,0 +1,26 @@ + + + + + certifi + + requirements line 1: certifi>=2021.5.30 + pkg:pypi/certifi + false + + + chardet + + requirements line 2: chardet >= 4.0.0 , < 5 + pkg:pypi/chardet + false + + + urllib3 + + requirements line 3: urllib3 + pkg:pypi/urllib3 + false + + + diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.1.xml.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.1.xml.bin new file mode 100644 index 00000000..0a6ec589 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.1.xml.bin @@ -0,0 +1,41 @@ + + + + + certifi + + requirements line 1: certifi>=2021.5.30 + pkg:pypi/certifi + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + + requirements line 2: chardet >= 4.0.0 , < 5 + pkg:pypi/chardet + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + urllib3 + + requirements line 3: urllib3 + pkg:pypi/urllib3 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.2.json.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.2.json.bin new file mode 100644 index 00000000..50e4dd1a --- /dev/null +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.2.json.bin @@ -0,0 +1,125 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi>=2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet >= 4.0.0 , < 5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: urllib3", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.2.xml.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.2.xml.bin new file mode 100644 index 00000000..a6d9bd9a --- /dev/null +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.2.xml.bin @@ -0,0 +1,95 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + + + certifi + + requirements line 1: certifi>=2021.5.30 + pkg:pypi/certifi + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + + requirements line 2: chardet >= 4.0.0 , < 5 + pkg:pypi/chardet + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + urllib3 + + requirements line 3: urllib3 + pkg:pypi/urllib3 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.json.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.json.bin new file mode 100644 index 00000000..7a1ac173 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.json.bin @@ -0,0 +1,131 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi>=2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet >= 4.0.0 , < 5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: urllib3", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "other", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.xml.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.xml.bin new file mode 100644 index 00000000..53a23229 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.xml.bin @@ -0,0 +1,98 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + certifi + + requirements line 1: certifi>=2021.5.30 + pkg:pypi/certifi + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + + requirements line 2: chardet >= 4.0.0 , < 5 + pkg:pypi/chardet + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + urllib3 + + requirements line 3: urllib3 + pkg:pypi/urllib3 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.json.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.json.bin new file mode 100644 index 00000000..409a79fb --- /dev/null +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.json.bin @@ -0,0 +1,124 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi>=2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi", + "type": "library" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet >= 4.0.0 , < 5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet", + "type": "library" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: urllib3", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.xml.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.xml.bin new file mode 100644 index 00000000..23f134be --- /dev/null +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.xml.bin @@ -0,0 +1,122 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + certifi + requirements line 1: certifi>=2021.5.30 + pkg:pypi/certifi + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + requirements line 2: chardet >= 4.0.0 , < 5 + pkg:pypi/chardet + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + urllib3 + requirements line 3: urllib3 + pkg:pypi/urllib3 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.json.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.json.bin new file mode 100644 index 00000000..911b3c56 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.json.bin @@ -0,0 +1,124 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi>=2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi", + "type": "library" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet >= 4.0.0 , < 5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet", + "type": "library" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: urllib3", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "some `reuqirements.txt` a root-component with all metadata", + "externalReferences": [ + { + "comment": "from pyproject urls: documentation", + "type": "documentation", + "url": "https://oss.acme.org/my-project/docs/" + }, + { + "comment": "from pyproject urls: Bug Tracker", + "type": "issue-tracker", + "url": "https://oss.acme.org/my-project/bugs/" + }, + { + "comment": "from pyproject urls: Funding", + "type": "other", + "url": "https://oss.acme.org/my-project/funding/" + }, + { + "comment": "from pyproject urls: Change log", + "type": "release-notes", + "url": "https://oss.acme.org/my-project/changelog/" + }, + { + "comment": "from pyproject urls: repository", + "type": "vcs", + "url": "https://oss.acme.org/my-project.git" + }, + { + "comment": "from pyproject urls: homepage", + "type": "website", + "url": "https://oss.acme.org/my-project/" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "testing-requirements-txt", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.xml.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.xml.bin new file mode 100644 index 00000000..85acbb02 --- /dev/null +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.xml.bin @@ -0,0 +1,122 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + testing-requirements-txt + 0.1.0 + some `reuqirements.txt` a root-component with all metadata + + Apache-2.0 OR MIT + + + + https://oss.acme.org/my-project/docs/ + from pyproject urls: documentation + + + https://oss.acme.org/my-project/bugs/ + from pyproject urls: Bug Tracker + + + https://oss.acme.org/my-project/funding/ + from pyproject urls: Funding + + + https://oss.acme.org/my-project/changelog/ + from pyproject urls: Change log + + + https://oss.acme.org/my-project.git + from pyproject urls: repository + + + https://oss.acme.org/my-project/ + from pyproject urls: homepage + + + + + true + + + + + certifi + requirements line 1: certifi>=2021.5.30 + pkg:pypi/certifi + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + requirements line 2: chardet >= 4.0.0 , < 5 + pkg:pypi/chardet + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + urllib3 + requirements line 3: urllib3 + pkg:pypi/urllib3 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_frozen_1.0.xml.bin b/tests/_data/snapshots/requirements/stream_frozen_1.0.xml.bin new file mode 100644 index 00000000..aef72016 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_frozen_1.0.xml.bin @@ -0,0 +1,19 @@ + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + false + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + false + + + diff --git a/tests/_data/snapshots/requirements/stream_frozen_1.1.xml.bin b/tests/_data/snapshots/requirements/stream_frozen_1.1.xml.bin new file mode 100644 index 00000000..884f106e --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_frozen_1.1.xml.bin @@ -0,0 +1,29 @@ + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/stream_frozen_1.2.json.bin b/tests/_data/snapshots/requirements/stream_frozen_1.2.json.bin new file mode 100644 index 00000000..54b59ce1 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_frozen_1.2.json.bin @@ -0,0 +1,60 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: colorama==0.4.6", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + } + ], + "dependencies": [ + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + } + ], + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_frozen_1.2.xml.bin b/tests/_data/snapshots/requirements/stream_frozen_1.2.xml.bin new file mode 100644 index 00000000..0bb8014a --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_frozen_1.2.xml.bin @@ -0,0 +1,47 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_frozen_1.3.json.bin b/tests/_data/snapshots/requirements/stream_frozen_1.3.json.bin new file mode 100644 index 00000000..068fac17 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_frozen_1.3.json.bin @@ -0,0 +1,76 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: colorama==0.4.6", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + } + ], + "dependencies": [ + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_frozen_1.3.xml.bin b/tests/_data/snapshots/requirements/stream_frozen_1.3.xml.bin new file mode 100644 index 00000000..ee8e01bf --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_frozen_1.3.xml.bin @@ -0,0 +1,54 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_frozen_1.4.json.bin b/tests/_data/snapshots/requirements/stream_frozen_1.4.json.bin new file mode 100644 index 00000000..061b38f4 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_frozen_1.4.json.bin @@ -0,0 +1,72 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: colorama==0.4.6", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + } + ], + "dependencies": [ + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_frozen_1.4.xml.bin b/tests/_data/snapshots/requirements/stream_frozen_1.4.xml.bin new file mode 100644 index 00000000..727195a8 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_frozen_1.4.xml.bin @@ -0,0 +1,81 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_frozen_1.5.json.bin b/tests/_data/snapshots/requirements/stream_frozen_1.5.json.bin new file mode 100644 index 00000000..34f08357 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_frozen_1.5.json.bin @@ -0,0 +1,72 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: colorama==0.4.6", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/colorama/" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama@0.4.6", + "type": "library", + "version": "0.4.6" + } + ], + "dependencies": [ + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_frozen_1.5.xml.bin b/tests/_data/snapshots/requirements/stream_frozen_1.5.xml.bin new file mode 100644 index 00000000..2e7f305e --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_frozen_1.5.xml.bin @@ -0,0 +1,81 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + FooProject + 1.2 + requirements line 7: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + colorama + 0.4.6 + requirements line 4: colorama==0.4.6 + pkg:pypi/colorama@0.4.6 + + + https://pypi.org/simple/colorama/ + implicit dist url + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_local_1.0.xml.bin b/tests/_data/snapshots/requirements/stream_local_1.0.xml.bin new file mode 100644 index 00000000..716b9580 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_local_1.0.xml.bin @@ -0,0 +1,41 @@ + + + + + foo + + requirements line 11: foo @ file://../foo + false + + + numpy + 1.9.2 + requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl + false + + + unknown + + requirements line 2: ./myproject/chardet + false + + + unknown + + requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + false + + + unknown + + requirements line 8: -e ./myproject/idna.whl + false + + + unknown + + requirements line 17: ./downloads/numpy-1.26.1.tar.gz + false + + + diff --git a/tests/_data/snapshots/requirements/stream_local_1.1.xml.bin b/tests/_data/snapshots/requirements/stream_local_1.1.xml.bin new file mode 100644 index 00000000..8cb3212f --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_local_1.1.xml.bin @@ -0,0 +1,71 @@ + + + + + foo + + requirements line 11: foo @ file://../foo + + + file://../foo + explicit local path + + + + + numpy + 1.9.2 + requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl + + + ./downloads/numpy-1.9.2-cp34-none-win32.whl + explicit local path + + + + + unknown + + requirements line 2: ./myproject/chardet + + + ./myproject/chardet + explicit local path + + + + + unknown + + requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + ./myproject/requests + explicit local path + + + + + unknown + + requirements line 8: -e ./myproject/idna.whl + + + ./myproject/idna.whl + explicit local path + + + + + unknown + + requirements line 17: ./downloads/numpy-1.26.1.tar.gz + + + ./downloads/numpy-1.26.1.tar.gz + explicit local path + + + + + diff --git a/tests/_data/snapshots/requirements/stream_local_1.2.json.bin b/tests/_data/snapshots/requirements/stream_local_1.2.json.bin new file mode 100644 index 00000000..93744060 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_local_1.2.json.bin @@ -0,0 +1,126 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: foo @ file://../foo", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "file://../foo" + } + ], + "name": "foo", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L14", + "description": "requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.9.2-cp34-none-win32.whl" + } + ], + "name": "numpy", + "type": "library", + "version": "1.9.2" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: ./myproject/chardet", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/chardet" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/requests" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: -e ./myproject/idna.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/idna.whl" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L17", + "description": "requirements line 17: ./downloads/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L14" + }, + { + "ref": "requirements-L17" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L8" + } + ], + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_local_1.2.xml.bin b/tests/_data/snapshots/requirements/stream_local_1.2.xml.bin new file mode 100644 index 00000000..30ea9c4d --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_local_1.2.xml.bin @@ -0,0 +1,93 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + foo + + requirements line 11: foo @ file://../foo + + + file://../foo + explicit local path + + + + + numpy + 1.9.2 + requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl + + + ./downloads/numpy-1.9.2-cp34-none-win32.whl + explicit local path + + + + + unknown + + requirements line 2: ./myproject/chardet + + + ./myproject/chardet + explicit local path + + + + + unknown + + requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + ./myproject/requests + explicit local path + + + + + unknown + + requirements line 8: -e ./myproject/idna.whl + + + ./myproject/idna.whl + explicit local path + + + + + unknown + + requirements line 17: ./downloads/numpy-1.26.1.tar.gz + + + ./downloads/numpy-1.26.1.tar.gz + explicit local path + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_local_1.3.json.bin b/tests/_data/snapshots/requirements/stream_local_1.3.json.bin new file mode 100644 index 00000000..3305ce77 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_local_1.3.json.bin @@ -0,0 +1,138 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: foo @ file://../foo", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "file://../foo" + } + ], + "name": "foo", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L14", + "description": "requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.9.2-cp34-none-win32.whl" + } + ], + "name": "numpy", + "type": "library", + "version": "1.9.2" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: ./myproject/chardet", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/chardet" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", + "externalReferences": [ + { + "comment": "explicit local path", + "hashes": [ + { + "alg": "SHA-256", + "content": "27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804" + } + ], + "type": "other", + "url": "./myproject/requests" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: -e ./myproject/idna.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/idna.whl" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L17", + "description": "requirements line 17: ./downloads/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L14" + }, + { + "ref": "requirements-L17" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L8" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_local_1.3.xml.bin b/tests/_data/snapshots/requirements/stream_local_1.3.xml.bin new file mode 100644 index 00000000..d5004cdd --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_local_1.3.xml.bin @@ -0,0 +1,99 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + + + foo + + requirements line 11: foo @ file://../foo + + + file://../foo + explicit local path + + + + + numpy + 1.9.2 + requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl + + + ./downloads/numpy-1.9.2-cp34-none-win32.whl + explicit local path + + + + + unknown + + requirements line 2: ./myproject/chardet + + + ./myproject/chardet + explicit local path + + + + + unknown + + requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + ./myproject/requests + explicit local path + + 27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + + + + unknown + + requirements line 8: -e ./myproject/idna.whl + + + ./myproject/idna.whl + explicit local path + + + + + unknown + + requirements line 17: ./downloads/numpy-1.26.1.tar.gz + + + ./downloads/numpy-1.26.1.tar.gz + explicit local path + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_local_1.4.json.bin b/tests/_data/snapshots/requirements/stream_local_1.4.json.bin new file mode 100644 index 00000000..c2aae1ed --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_local_1.4.json.bin @@ -0,0 +1,129 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: foo @ file://../foo", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "file://../foo" + } + ], + "name": "foo", + "type": "library" + }, + { + "bom-ref": "requirements-L14", + "description": "requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.9.2-cp34-none-win32.whl" + } + ], + "name": "numpy", + "type": "library", + "version": "1.9.2" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: ./myproject/chardet", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/chardet" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", + "externalReferences": [ + { + "comment": "explicit local path", + "hashes": [ + { + "alg": "SHA-256", + "content": "27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804" + } + ], + "type": "other", + "url": "./myproject/requests" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: -e ./myproject/idna.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/idna.whl" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L17", + "description": "requirements line 17: ./downloads/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L14" + }, + { + "ref": "requirements-L17" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L8" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_local_1.4.xml.bin b/tests/_data/snapshots/requirements/stream_local_1.4.xml.bin new file mode 100644 index 00000000..0c9851a0 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_local_1.4.xml.bin @@ -0,0 +1,121 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + foo + requirements line 11: foo @ file://../foo + + + file://../foo + explicit local path + + + + + numpy + 1.9.2 + requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl + + + ./downloads/numpy-1.9.2-cp34-none-win32.whl + explicit local path + + + + + unknown + requirements line 2: ./myproject/chardet + + + ./myproject/chardet + explicit local path + + + + + unknown + requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + ./myproject/requests + explicit local path + + 27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + + + + unknown + requirements line 8: -e ./myproject/idna.whl + + + ./myproject/idna.whl + explicit local path + + + + + unknown + requirements line 17: ./downloads/numpy-1.26.1.tar.gz + + + ./downloads/numpy-1.26.1.tar.gz + explicit local path + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_local_1.5.json.bin b/tests/_data/snapshots/requirements/stream_local_1.5.json.bin new file mode 100644 index 00000000..26d5a67f --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_local_1.5.json.bin @@ -0,0 +1,129 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: foo @ file://../foo", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "file://../foo" + } + ], + "name": "foo", + "type": "library" + }, + { + "bom-ref": "requirements-L14", + "description": "requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.9.2-cp34-none-win32.whl" + } + ], + "name": "numpy", + "type": "library", + "version": "1.9.2" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: ./myproject/chardet", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/chardet" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", + "externalReferences": [ + { + "comment": "explicit local path", + "hashes": [ + { + "alg": "SHA-256", + "content": "27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804" + } + ], + "type": "other", + "url": "./myproject/requests" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: -e ./myproject/idna.whl", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./myproject/idna.whl" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L17", + "description": "requirements line 17: ./downloads/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit local path", + "type": "other", + "url": "./downloads/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L14" + }, + { + "ref": "requirements-L17" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L8" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_local_1.5.xml.bin b/tests/_data/snapshots/requirements/stream_local_1.5.xml.bin new file mode 100644 index 00000000..3f9475c4 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_local_1.5.xml.bin @@ -0,0 +1,121 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + foo + requirements line 11: foo @ file://../foo + + + file://../foo + explicit local path + + + + + numpy + 1.9.2 + requirements line 14: ./downloads/numpy-1.9.2-cp34-none-win32.whl + + + ./downloads/numpy-1.9.2-cp34-none-win32.whl + explicit local path + + + + + unknown + requirements line 2: ./myproject/chardet + + + ./myproject/chardet + explicit local path + + + + + unknown + requirements line 5: ./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + ./myproject/requests + explicit local path + + 27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 + + + + + + unknown + requirements line 8: -e ./myproject/idna.whl + + + ./myproject/idna.whl + explicit local path + + + + + unknown + requirements line 17: ./downloads/numpy-1.26.1.tar.gz + + + ./downloads/numpy-1.26.1.tar.gz + explicit local path + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_nested_1.0.xml.bin b/tests/_data/snapshots/requirements/stream_nested_1.0.xml.bin new file mode 100644 index 00000000..acb06612 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_nested_1.0.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/requirements/stream_nested_1.1.xml.bin b/tests/_data/snapshots/requirements/stream_nested_1.1.xml.bin new file mode 100644 index 00000000..640f73ff --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_nested_1.1.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/requirements/stream_nested_1.2.json.bin b/tests/_data/snapshots/requirements/stream_nested_1.2.json.bin new file mode 100644 index 00000000..6dcf4e3f --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_nested_1.2.json.bin @@ -0,0 +1,20 @@ +{ + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_nested_1.2.xml.bin b/tests/_data/snapshots/requirements/stream_nested_1.2.xml.bin new file mode 100644 index 00000000..d91fc191 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_nested_1.2.xml.bin @@ -0,0 +1,17 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + diff --git a/tests/_data/snapshots/requirements/stream_nested_1.3.json.bin b/tests/_data/snapshots/requirements/stream_nested_1.3.json.bin new file mode 100644 index 00000000..b5de47bc --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_nested_1.3.json.bin @@ -0,0 +1,26 @@ +{ + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_nested_1.3.xml.bin b/tests/_data/snapshots/requirements/stream_nested_1.3.xml.bin new file mode 100644 index 00000000..f275e185 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_nested_1.3.xml.bin @@ -0,0 +1,20 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + diff --git a/tests/_data/snapshots/requirements/stream_nested_1.4.json.bin b/tests/_data/snapshots/requirements/stream_nested_1.4.json.bin new file mode 100644 index 00000000..b15333df --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_nested_1.4.json.bin @@ -0,0 +1,22 @@ +{ + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_nested_1.4.xml.bin b/tests/_data/snapshots/requirements/stream_nested_1.4.xml.bin new file mode 100644 index 00000000..2e149caf --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_nested_1.4.xml.bin @@ -0,0 +1,47 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + diff --git a/tests/_data/snapshots/requirements/stream_nested_1.5.json.bin b/tests/_data/snapshots/requirements/stream_nested_1.5.json.bin new file mode 100644 index 00000000..10545fd6 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_nested_1.5.json.bin @@ -0,0 +1,22 @@ +{ + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_nested_1.5.xml.bin b/tests/_data/snapshots/requirements/stream_nested_1.5.xml.bin new file mode 100644 index 00000000..c1edb281 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_nested_1.5.xml.bin @@ -0,0 +1,47 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + diff --git a/tests/_data/snapshots/requirements/stream_private-packages_1.0.xml.bin b/tests/_data/snapshots/requirements/stream_private-packages_1.0.xml.bin new file mode 100644 index 00000000..197a5c57 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_private-packages_1.0.xml.bin @@ -0,0 +1,12 @@ + + + + + my-package + 1.2.3 + requirements line 7: my-package==1.2.3 + pkg:pypi/my-package@1.2.3 + false + + + diff --git a/tests/_data/snapshots/requirements/stream_private-packages_1.1.xml.bin b/tests/_data/snapshots/requirements/stream_private-packages_1.1.xml.bin new file mode 100644 index 00000000..010a891d --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_private-packages_1.1.xml.bin @@ -0,0 +1,25 @@ + + + + + my-package + 1.2.3 + requirements line 7: my-package==1.2.3 + pkg:pypi/my-package@1.2.3 + + + https://legacy1.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://legacy2.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://pypackages.acme.org/simple//my-package/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/stream_private-packages_1.2.json.bin b/tests/_data/snapshots/requirements/stream_private-packages_1.2.json.bin new file mode 100644 index 00000000..9430918e --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_private-packages_1.2.json.bin @@ -0,0 +1,52 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: my-package==1.2.3", + "externalReferences": [ + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy1.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy2.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypackages.acme.org/simple//my-package/" + } + ], + "name": "my-package", + "purl": "pkg:pypi/my-package@1.2.3", + "type": "library", + "version": "1.2.3" + } + ], + "dependencies": [ + { + "ref": "requirements-L7" + } + ], + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_private-packages_1.2.xml.bin b/tests/_data/snapshots/requirements/stream_private-packages_1.2.xml.bin new file mode 100644 index 00000000..2cf41d2c --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_private-packages_1.2.xml.bin @@ -0,0 +1,42 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + my-package + 1.2.3 + requirements line 7: my-package==1.2.3 + pkg:pypi/my-package@1.2.3 + + + https://legacy1.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://legacy2.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://pypackages.acme.org/simple//my-package/ + implicit dist url + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_private-packages_1.3.json.bin b/tests/_data/snapshots/requirements/stream_private-packages_1.3.json.bin new file mode 100644 index 00000000..bde98fda --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_private-packages_1.3.json.bin @@ -0,0 +1,58 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: my-package==1.2.3", + "externalReferences": [ + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy1.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy2.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypackages.acme.org/simple//my-package/" + } + ], + "name": "my-package", + "purl": "pkg:pypi/my-package@1.2.3", + "type": "library", + "version": "1.2.3" + } + ], + "dependencies": [ + { + "ref": "requirements-L7" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_private-packages_1.3.xml.bin b/tests/_data/snapshots/requirements/stream_private-packages_1.3.xml.bin new file mode 100644 index 00000000..db5d2edd --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_private-packages_1.3.xml.bin @@ -0,0 +1,45 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + + + my-package + 1.2.3 + requirements line 7: my-package==1.2.3 + pkg:pypi/my-package@1.2.3 + + + https://legacy1.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://legacy2.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://pypackages.acme.org/simple//my-package/ + implicit dist url + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_private-packages_1.4.json.bin b/tests/_data/snapshots/requirements/stream_private-packages_1.4.json.bin new file mode 100644 index 00000000..599e5d39 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_private-packages_1.4.json.bin @@ -0,0 +1,54 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: my-package==1.2.3", + "externalReferences": [ + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy1.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy2.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypackages.acme.org/simple//my-package/" + } + ], + "name": "my-package", + "purl": "pkg:pypi/my-package@1.2.3", + "type": "library", + "version": "1.2.3" + } + ], + "dependencies": [ + { + "ref": "requirements-L7" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_private-packages_1.4.xml.bin b/tests/_data/snapshots/requirements/stream_private-packages_1.4.xml.bin new file mode 100644 index 00000000..f823ed66 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_private-packages_1.4.xml.bin @@ -0,0 +1,72 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + my-package + 1.2.3 + requirements line 7: my-package==1.2.3 + pkg:pypi/my-package@1.2.3 + + + https://legacy1.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://legacy2.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://pypackages.acme.org/simple//my-package/ + implicit dist url + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_private-packages_1.5.json.bin b/tests/_data/snapshots/requirements/stream_private-packages_1.5.json.bin new file mode 100644 index 00000000..bd816962 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_private-packages_1.5.json.bin @@ -0,0 +1,54 @@ +{ + "components": [ + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: my-package==1.2.3", + "externalReferences": [ + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy1.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist extra-url", + "type": "distribution", + "url": "https://legacy2.pypackages.acme.org/simple//my-package/" + }, + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypackages.acme.org/simple//my-package/" + } + ], + "name": "my-package", + "purl": "pkg:pypi/my-package@1.2.3", + "type": "library", + "version": "1.2.3" + } + ], + "dependencies": [ + { + "ref": "requirements-L7" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_private-packages_1.5.xml.bin b/tests/_data/snapshots/requirements/stream_private-packages_1.5.xml.bin new file mode 100644 index 00000000..5c7fb76e --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_private-packages_1.5.xml.bin @@ -0,0 +1,72 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + my-package + 1.2.3 + requirements line 7: my-package==1.2.3 + pkg:pypi/my-package@1.2.3 + + + https://legacy1.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://legacy2.pypackages.acme.org/simple//my-package/ + implicit dist extra-url + + + https://pypackages.acme.org/simple//my-package/ + implicit dist url + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.0.xml.bin b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.0.xml.bin new file mode 100644 index 00000000..5382704a --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.0.xml.bin @@ -0,0 +1,26 @@ + + + + + packageurl-python + + requirements line 6: packageurl-python>=0.9.4 + pkg:pypi/packageurl-python + false + + + requirements_parser + + requirements line 7: requirements_parser>=0.2.0 + pkg:pypi/requirements-parser + false + + + setuptools + + requirements line 8: setuptools>=50.3.2 + pkg:pypi/setuptools + false + + + diff --git a/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.1.xml.bin b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.1.xml.bin new file mode 100644 index 00000000..9143afde --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.1.xml.bin @@ -0,0 +1,41 @@ + + + + + packageurl-python + + requirements line 6: packageurl-python>=0.9.4 + pkg:pypi/packageurl-python + + + https://pypi.org/simple/packageurl-python/ + implicit dist url + + + + + requirements_parser + + requirements line 7: requirements_parser>=0.2.0 + pkg:pypi/requirements-parser + + + https://pypi.org/simple/requirements_parser/ + implicit dist url + + + + + setuptools + + requirements line 8: setuptools>=50.3.2 + pkg:pypi/setuptools + + + https://pypi.org/simple/setuptools/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.2.json.bin b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.2.json.bin new file mode 100644 index 00000000..5ab249db --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.2.json.bin @@ -0,0 +1,78 @@ +{ + "components": [ + { + "bom-ref": "requirements-L6", + "description": "requirements line 6: packageurl-python>=0.9.4", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: requirements_parser>=0.2.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requirements_parser/" + } + ], + "name": "requirements_parser", + "purl": "pkg:pypi/requirements-parser", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: setuptools>=50.3.2", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/setuptools/" + } + ], + "name": "setuptools", + "purl": "pkg:pypi/setuptools", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "requirements-L6" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L8" + } + ], + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.2.xml.bin b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.2.xml.bin new file mode 100644 index 00000000..79629f3e --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.2.xml.bin @@ -0,0 +1,60 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + packageurl-python + + requirements line 6: packageurl-python>=0.9.4 + pkg:pypi/packageurl-python + + + https://pypi.org/simple/packageurl-python/ + implicit dist url + + + + + requirements_parser + + requirements line 7: requirements_parser>=0.2.0 + pkg:pypi/requirements-parser + + + https://pypi.org/simple/requirements_parser/ + implicit dist url + + + + + setuptools + + requirements line 8: setuptools>=50.3.2 + pkg:pypi/setuptools + + + https://pypi.org/simple/setuptools/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.3.json.bin b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.3.json.bin new file mode 100644 index 00000000..08abcc42 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.3.json.bin @@ -0,0 +1,84 @@ +{ + "components": [ + { + "bom-ref": "requirements-L6", + "description": "requirements line 6: packageurl-python>=0.9.4", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: requirements_parser>=0.2.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requirements_parser/" + } + ], + "name": "requirements_parser", + "purl": "pkg:pypi/requirements-parser", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: setuptools>=50.3.2", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/setuptools/" + } + ], + "name": "setuptools", + "purl": "pkg:pypi/setuptools", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "requirements-L6" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L8" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.3.xml.bin b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.3.xml.bin new file mode 100644 index 00000000..dc238323 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.3.xml.bin @@ -0,0 +1,63 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + + + packageurl-python + + requirements line 6: packageurl-python>=0.9.4 + pkg:pypi/packageurl-python + + + https://pypi.org/simple/packageurl-python/ + implicit dist url + + + + + requirements_parser + + requirements line 7: requirements_parser>=0.2.0 + pkg:pypi/requirements-parser + + + https://pypi.org/simple/requirements_parser/ + implicit dist url + + + + + setuptools + + requirements line 8: setuptools>=50.3.2 + pkg:pypi/setuptools + + + https://pypi.org/simple/setuptools/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.4.json.bin b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.4.json.bin new file mode 100644 index 00000000..4e3191ed --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.4.json.bin @@ -0,0 +1,77 @@ +{ + "components": [ + { + "bom-ref": "requirements-L6", + "description": "requirements line 6: packageurl-python>=0.9.4", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python", + "type": "library" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: requirements_parser>=0.2.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requirements_parser/" + } + ], + "name": "requirements_parser", + "purl": "pkg:pypi/requirements-parser", + "type": "library" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: setuptools>=50.3.2", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/setuptools/" + } + ], + "name": "setuptools", + "purl": "pkg:pypi/setuptools", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "requirements-L6" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L8" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.4.xml.bin b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.4.xml.bin new file mode 100644 index 00000000..76c28c3d --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.4.xml.bin @@ -0,0 +1,87 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + packageurl-python + requirements line 6: packageurl-python>=0.9.4 + pkg:pypi/packageurl-python + + + https://pypi.org/simple/packageurl-python/ + implicit dist url + + + + + requirements_parser + requirements line 7: requirements_parser>=0.2.0 + pkg:pypi/requirements-parser + + + https://pypi.org/simple/requirements_parser/ + implicit dist url + + + + + setuptools + requirements line 8: setuptools>=50.3.2 + pkg:pypi/setuptools + + + https://pypi.org/simple/setuptools/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.5.json.bin b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.5.json.bin new file mode 100644 index 00000000..a84dc58c --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.5.json.bin @@ -0,0 +1,77 @@ +{ + "components": [ + { + "bom-ref": "requirements-L6", + "description": "requirements line 6: packageurl-python>=0.9.4", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/packageurl-python/" + } + ], + "name": "packageurl-python", + "purl": "pkg:pypi/packageurl-python", + "type": "library" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: requirements_parser>=0.2.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requirements_parser/" + } + ], + "name": "requirements_parser", + "purl": "pkg:pypi/requirements-parser", + "type": "library" + }, + { + "bom-ref": "requirements-L8", + "description": "requirements line 8: setuptools>=50.3.2", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/setuptools/" + } + ], + "name": "setuptools", + "purl": "pkg:pypi/setuptools", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "requirements-L6" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L8" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.5.xml.bin b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.5.xml.bin new file mode 100644 index 00000000..80d2b709 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_regression-issue448.cp1252.txt_1.5.xml.bin @@ -0,0 +1,87 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + packageurl-python + requirements line 6: packageurl-python>=0.9.4 + pkg:pypi/packageurl-python + + + https://pypi.org/simple/packageurl-python/ + implicit dist url + + + + + requirements_parser + requirements line 7: requirements_parser>=0.2.0 + pkg:pypi/requirements-parser + + + https://pypi.org/simple/requirements_parser/ + implicit dist url + + + + + setuptools + requirements line 8: setuptools>=50.3.2 + pkg:pypi/setuptools + + + https://pypi.org/simple/setuptools/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-comments_1.0.xml.bin b/tests/_data/snapshots/requirements/stream_with-comments_1.0.xml.bin new file mode 100644 index 00000000..8302ef11 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-comments_1.0.xml.bin @@ -0,0 +1,40 @@ + + + + + certifi + 2021.5.30 + requirements line 1: certifi==2021.5.30 + pkg:pypi/certifi@2021.5.30 + false + + + chardet + 4.0.0 + requirements line 2: chardet==4.0.0 + pkg:pypi/chardet@4.0.0 + false + + + idna + 2.10 + requirements line 3: idna==2.10 + pkg:pypi/idna@2.10 + false + + + requests + 2.25.1 + requirements line 4: requests==2.25.1 + pkg:pypi/requests@2.25.1 + false + + + urllib3 + 1.26.5 + requirements line 5: urllib3==1.26.5 + pkg:pypi/urllib3@1.26.5 + false + + + diff --git a/tests/_data/snapshots/requirements/stream_with-comments_1.1.xml.bin b/tests/_data/snapshots/requirements/stream_with-comments_1.1.xml.bin new file mode 100644 index 00000000..a49b1a98 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-comments_1.1.xml.bin @@ -0,0 +1,65 @@ + + + + + certifi + 2021.5.30 + requirements line 1: certifi==2021.5.30 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + 4.0.0 + requirements line 2: chardet==4.0.0 + pkg:pypi/chardet@4.0.0 + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + idna + 2.10 + requirements line 3: idna==2.10 + pkg:pypi/idna@2.10 + + + https://pypi.org/simple/idna/ + implicit dist url + + + + + requests + 2.25.1 + requirements line 4: requests==2.25.1 + pkg:pypi/requests@2.25.1 + + + https://pypi.org/simple/requests/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 5: urllib3==1.26.5 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-comments_1.2.json.bin b/tests/_data/snapshots/requirements/stream_with-comments_1.2.json.bin new file mode 100644 index 00000000..a4ebb28b --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-comments_1.2.json.bin @@ -0,0 +1,114 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi==2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet==4.0.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@4.0.0", + "type": "library", + "version": "4.0.0" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: idna==2.10", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@2.10", + "type": "library", + "version": "2.10" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: requests==2.25.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requests/" + } + ], + "name": "requests", + "purl": "pkg:pypi/requests@2.25.1", + "type": "library", + "version": "2.25.1" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: urllib3==1.26.5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L5" + } + ], + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-comments_1.2.xml.bin b/tests/_data/snapshots/requirements/stream_with-comments_1.2.xml.bin new file mode 100644 index 00000000..b1706738 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-comments_1.2.xml.bin @@ -0,0 +1,86 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + certifi + 2021.5.30 + requirements line 1: certifi==2021.5.30 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + 4.0.0 + requirements line 2: chardet==4.0.0 + pkg:pypi/chardet@4.0.0 + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + idna + 2.10 + requirements line 3: idna==2.10 + pkg:pypi/idna@2.10 + + + https://pypi.org/simple/idna/ + implicit dist url + + + + + requests + 2.25.1 + requirements line 4: requests==2.25.1 + pkg:pypi/requests@2.25.1 + + + https://pypi.org/simple/requests/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 5: urllib3==1.26.5 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-comments_1.3.json.bin b/tests/_data/snapshots/requirements/stream_with-comments_1.3.json.bin new file mode 100644 index 00000000..7b3d8776 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-comments_1.3.json.bin @@ -0,0 +1,120 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi==2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet==4.0.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@4.0.0", + "type": "library", + "version": "4.0.0" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: idna==2.10", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@2.10", + "type": "library", + "version": "2.10" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: requests==2.25.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requests/" + } + ], + "name": "requests", + "purl": "pkg:pypi/requests@2.25.1", + "type": "library", + "version": "2.25.1" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: urllib3==1.26.5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L5" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-comments_1.3.xml.bin b/tests/_data/snapshots/requirements/stream_with-comments_1.3.xml.bin new file mode 100644 index 00000000..d9d799e8 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-comments_1.3.xml.bin @@ -0,0 +1,89 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + + + certifi + 2021.5.30 + requirements line 1: certifi==2021.5.30 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + 4.0.0 + requirements line 2: chardet==4.0.0 + pkg:pypi/chardet@4.0.0 + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + idna + 2.10 + requirements line 3: idna==2.10 + pkg:pypi/idna@2.10 + + + https://pypi.org/simple/idna/ + implicit dist url + + + + + requests + 2.25.1 + requirements line 4: requests==2.25.1 + pkg:pypi/requests@2.25.1 + + + https://pypi.org/simple/requests/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 5: urllib3==1.26.5 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-comments_1.4.json.bin b/tests/_data/snapshots/requirements/stream_with-comments_1.4.json.bin new file mode 100644 index 00000000..c99c861c --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-comments_1.4.json.bin @@ -0,0 +1,116 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi==2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet==4.0.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@4.0.0", + "type": "library", + "version": "4.0.0" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: idna==2.10", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@2.10", + "type": "library", + "version": "2.10" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: requests==2.25.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requests/" + } + ], + "name": "requests", + "purl": "pkg:pypi/requests@2.25.1", + "type": "library", + "version": "2.25.1" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: urllib3==1.26.5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L5" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-comments_1.4.xml.bin b/tests/_data/snapshots/requirements/stream_with-comments_1.4.xml.bin new file mode 100644 index 00000000..c011eb93 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-comments_1.4.xml.bin @@ -0,0 +1,116 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + certifi + 2021.5.30 + requirements line 1: certifi==2021.5.30 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + 4.0.0 + requirements line 2: chardet==4.0.0 + pkg:pypi/chardet@4.0.0 + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + idna + 2.10 + requirements line 3: idna==2.10 + pkg:pypi/idna@2.10 + + + https://pypi.org/simple/idna/ + implicit dist url + + + + + requests + 2.25.1 + requirements line 4: requests==2.25.1 + pkg:pypi/requests@2.25.1 + + + https://pypi.org/simple/requests/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 5: urllib3==1.26.5 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-comments_1.5.json.bin b/tests/_data/snapshots/requirements/stream_with-comments_1.5.json.bin new file mode 100644 index 00000000..726eaaae --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-comments_1.5.json.bin @@ -0,0 +1,116 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi==2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet==4.0.0", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@4.0.0", + "type": "library", + "version": "4.0.0" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: idna==2.10", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/idna/" + } + ], + "name": "idna", + "purl": "pkg:pypi/idna@2.10", + "type": "library", + "version": "2.10" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: requests==2.25.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/requests/" + } + ], + "name": "requests", + "purl": "pkg:pypi/requests@2.25.1", + "type": "library", + "version": "2.25.1" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: urllib3==1.26.5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L5" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-comments_1.5.xml.bin b/tests/_data/snapshots/requirements/stream_with-comments_1.5.xml.bin new file mode 100644 index 00000000..129e6e6a --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-comments_1.5.xml.bin @@ -0,0 +1,116 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + certifi + 2021.5.30 + requirements line 1: certifi==2021.5.30 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + 4.0.0 + requirements line 2: chardet==4.0.0 + pkg:pypi/chardet@4.0.0 + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + idna + 2.10 + requirements line 3: idna==2.10 + pkg:pypi/idna@2.10 + + + https://pypi.org/simple/idna/ + implicit dist url + + + + + requests + 2.25.1 + requirements line 4: requests==2.25.1 + pkg:pypi/requests@2.25.1 + + + https://pypi.org/simple/requests/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 5: urllib3==1.26.5 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.0.xml.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.0.xml.bin new file mode 100644 index 00000000..1f0fb594 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-extras_1.0.xml.bin @@ -0,0 +1,12 @@ + + + + + cyclonedx-python-lib + 5.1.1 + requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + false + + + diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.1.xml.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.1.xml.bin new file mode 100644 index 00000000..8bb743d6 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-extras_1.1.xml.bin @@ -0,0 +1,17 @@ + + + + + cyclonedx-python-lib + 5.1.1 + requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.2.json.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.2.json.bin new file mode 100644 index 00000000..7c6c6183 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-extras_1.2.json.bin @@ -0,0 +1,42 @@ +{ + "components": [ + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/" + } + ], + "name": "cyclonedx-python-lib", + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "type": "library", + "version": "5.1.1" + } + ], + "dependencies": [ + { + "ref": "requirements-L3" + } + ], + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.2.xml.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.2.xml.bin new file mode 100644 index 00000000..83835cb1 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-extras_1.2.xml.bin @@ -0,0 +1,34 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + cyclonedx-python-lib + 5.1.1 + requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + implicit dist url + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.3.json.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.3.json.bin new file mode 100644 index 00000000..b4cf779a --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-extras_1.3.json.bin @@ -0,0 +1,58 @@ +{ + "components": [ + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/" + } + ], + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "type": "library", + "version": "5.1.1" + } + ], + "dependencies": [ + { + "ref": "requirements-L3" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.3.xml.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.3.xml.bin new file mode 100644 index 00000000..b29201bb --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-extras_1.3.xml.bin @@ -0,0 +1,41 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + + + cyclonedx-python-lib + 5.1.1 + requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + implicit dist url + + + + json-validation + xml-validation + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.4.json.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.4.json.bin new file mode 100644 index 00000000..f0cfb8fa --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-extras_1.4.json.bin @@ -0,0 +1,54 @@ +{ + "components": [ + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/" + } + ], + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "type": "library", + "version": "5.1.1" + } + ], + "dependencies": [ + { + "ref": "requirements-L3" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.4.xml.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.4.xml.bin new file mode 100644 index 00000000..b7f56e22 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-extras_1.4.xml.bin @@ -0,0 +1,68 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + cyclonedx-python-lib + 5.1.1 + requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + implicit dist url + + + + json-validation + xml-validation + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.5.json.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.5.json.bin new file mode 100644 index 00000000..325e006a --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-extras_1.5.json.bin @@ -0,0 +1,54 @@ +{ + "components": [ + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/cyclonedx-python-lib/" + } + ], + "name": "cyclonedx-python-lib", + "properties": [ + { + "name": "cdx:python:package:required-extra", + "value": "json-validation" + }, + { + "name": "cdx:python:package:required-extra", + "value": "xml-validation" + } + ], + "purl": "pkg:pypi/cyclonedx-python-lib@5.1.1", + "type": "library", + "version": "5.1.1" + } + ], + "dependencies": [ + { + "ref": "requirements-L3" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.5.xml.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.5.xml.bin new file mode 100644 index 00000000..74aec2b5 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-extras_1.5.xml.bin @@ -0,0 +1,68 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + cyclonedx-python-lib + 5.1.1 + requirements line 3: cyclonedx-python-lib[json-validation,xml-validation] == 5.1.1 + pkg:pypi/cyclonedx-python-lib@5.1.1 + + + https://pypi.org/simple/cyclonedx-python-lib/ + implicit dist url + + + + json-validation + xml-validation + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-hashes_1.0.xml.bin b/tests/_data/snapshots/requirements/stream_with-hashes_1.0.xml.bin new file mode 100644 index 00000000..f415b179 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-hashes_1.0.xml.bin @@ -0,0 +1,40 @@ + + + + + FooProject + 1.2 + requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + false + + + certifi + 2021.5.30 + requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + pkg:pypi/certifi@2021.5.30 + false + + + colorama + + requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + false + + + something + 1.33.7 + requirements line 21: something == 1.33.7 --hash=foo:something-invalid + pkg:pypi/something@1.33.7 + false + + + urllib3 + 1.26.5 + requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + pkg:pypi/urllib3@1.26.5 + false + + + diff --git a/tests/_data/snapshots/requirements/stream_with-hashes_1.1.xml.bin b/tests/_data/snapshots/requirements/stream_with-hashes_1.1.xml.bin new file mode 100644 index 00000000..181133d8 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-hashes_1.1.xml.bin @@ -0,0 +1,65 @@ + + + + + FooProject + 1.2 + requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + + + + certifi + 2021.5.30 + requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + colorama + + requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + + + https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + explicit dist url + + + + + something + 1.33.7 + requirements line 21: something == 1.33.7 --hash=foo:something-invalid + pkg:pypi/something@1.33.7 + + + https://pypi.org/simple/something/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-hashes_1.2.json.bin b/tests/_data/snapshots/requirements/stream_with-hashes_1.2.json.bin new file mode 100644 index 00000000..785ae11a --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-hashes_1.2.json.bin @@ -0,0 +1,114 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L16", + "description": "requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L21", + "description": "requirements line 21: something == 1.33.7 --hash=foo:something-invalid", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/something/" + } + ], + "name": "something", + "purl": "pkg:pypi/something@1.33.7", + "type": "library", + "version": "1.33.7" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L16" + }, + { + "ref": "requirements-L21" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + } + ], + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-hashes_1.2.xml.bin b/tests/_data/snapshots/requirements/stream_with-hashes_1.2.xml.bin new file mode 100644 index 00000000..0677ba56 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-hashes_1.2.xml.bin @@ -0,0 +1,86 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + FooProject + 1.2 + requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + + + + certifi + 2021.5.30 + requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + colorama + + requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + + + https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + explicit dist url + + + + + something + 1.33.7 + requirements line 21: something == 1.33.7 --hash=foo:something-invalid + pkg:pypi/something@1.33.7 + + + https://pypi.org/simple/something/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-hashes_1.3.json.bin b/tests/_data/snapshots/requirements/stream_with-hashes_1.3.json.bin new file mode 100644 index 00000000..e79cc532 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-hashes_1.3.json.bin @@ -0,0 +1,160 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee" + }, + { + "alg": "SHA-256", + "content": "50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L16", + "description": "requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a", + "externalReferences": [ + { + "comment": "explicit dist url", + "hashes": [ + { + "alg": "MD5", + "content": "9854316552d41419b678d39af443a75f" + }, + { + "alg": "SHA-1", + "content": "aa1fc7722b9128a3c945048de03f5b4e55157c6a" + } + ], + "type": "distribution", + "url": "https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L21", + "description": "requirements line 21: something == 1.33.7 --hash=foo:something-invalid", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/something/" + } + ], + "name": "something", + "purl": "pkg:pypi/something@1.33.7", + "type": "library", + "version": "1.33.7" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c" + }, + { + "alg": "SHA-256", + "content": "a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L16" + }, + { + "ref": "requirements-L21" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-hashes_1.3.xml.bin b/tests/_data/snapshots/requirements/stream_with-hashes_1.3.xml.bin new file mode 100644 index 00000000..19268fb6 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-hashes_1.3.xml.bin @@ -0,0 +1,105 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + + + FooProject + 1.2 + requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + certifi + 2021.5.30 + requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + 2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee + 50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + + + + + + colorama + + requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + + + https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + explicit dist url + + 9854316552d41419b678d39af443a75f + aa1fc7722b9128a3c945048de03f5b4e55157c6a + + + + + + something + 1.33.7 + requirements line 21: something == 1.33.7 --hash=foo:something-invalid + pkg:pypi/something@1.33.7 + + + https://pypi.org/simple/something/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + 753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c + a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-hashes_1.4.json.bin b/tests/_data/snapshots/requirements/stream_with-hashes_1.4.json.bin new file mode 100644 index 00000000..e6900ba4 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-hashes_1.4.json.bin @@ -0,0 +1,155 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee" + }, + { + "alg": "SHA-256", + "content": "50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L16", + "description": "requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a", + "externalReferences": [ + { + "comment": "explicit dist url", + "hashes": [ + { + "alg": "MD5", + "content": "9854316552d41419b678d39af443a75f" + }, + { + "alg": "SHA-1", + "content": "aa1fc7722b9128a3c945048de03f5b4e55157c6a" + } + ], + "type": "distribution", + "url": "https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz", + "type": "library" + }, + { + "bom-ref": "requirements-L21", + "description": "requirements line 21: something == 1.33.7 --hash=foo:something-invalid", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/something/" + } + ], + "name": "something", + "purl": "pkg:pypi/something@1.33.7", + "type": "library", + "version": "1.33.7" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c" + }, + { + "alg": "SHA-256", + "content": "a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L16" + }, + { + "ref": "requirements-L21" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-hashes_1.4.xml.bin b/tests/_data/snapshots/requirements/stream_with-hashes_1.4.xml.bin new file mode 100644 index 00000000..125511c5 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-hashes_1.4.xml.bin @@ -0,0 +1,131 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + FooProject + 1.2 + requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + certifi + 2021.5.30 + requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + 2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee + 50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + + + + + + colorama + requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + + + https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + explicit dist url + + 9854316552d41419b678d39af443a75f + aa1fc7722b9128a3c945048de03f5b4e55157c6a + + + + + + something + 1.33.7 + requirements line 21: something == 1.33.7 --hash=foo:something-invalid + pkg:pypi/something@1.33.7 + + + https://pypi.org/simple/something/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + 753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c + a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-hashes_1.5.json.bin b/tests/_data/snapshots/requirements/stream_with-hashes_1.5.json.bin new file mode 100644 index 00000000..ab9f4364 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-hashes_1.5.json.bin @@ -0,0 +1,155 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" + }, + { + "alg": "SHA-256", + "content": "486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/FooProject/" + } + ], + "name": "FooProject", + "purl": "pkg:pypi/fooproject@1.2", + "type": "library", + "version": "1.2" + }, + { + "bom-ref": "requirements-L4", + "description": "requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee" + }, + { + "alg": "SHA-256", + "content": "50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi@2021.5.30", + "type": "library", + "version": "2021.5.30" + }, + { + "bom-ref": "requirements-L16", + "description": "requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a", + "externalReferences": [ + { + "comment": "explicit dist url", + "hashes": [ + { + "alg": "MD5", + "content": "9854316552d41419b678d39af443a75f" + }, + { + "alg": "SHA-1", + "content": "aa1fc7722b9128a3c945048de03f5b4e55157c6a" + } + ], + "type": "distribution", + "url": "https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz" + } + ], + "name": "colorama", + "purl": "pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz", + "type": "library" + }, + { + "bom-ref": "requirements-L21", + "description": "requirements line 21: something == 1.33.7 --hash=foo:something-invalid", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/something/" + } + ], + "name": "something", + "purl": "pkg:pypi/something@1.33.7", + "type": "library", + "version": "1.33.7" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098", + "externalReferences": [ + { + "comment": "implicit dist url", + "hashes": [ + { + "alg": "SHA-256", + "content": "753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c" + }, + { + "alg": "SHA-256", + "content": "a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098" + } + ], + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3@1.26.5", + "type": "library", + "version": "1.26.5" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L16" + }, + { + "ref": "requirements-L21" + }, + { + "ref": "requirements-L4" + }, + { + "ref": "requirements-L7" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-hashes_1.5.xml.bin b/tests/_data/snapshots/requirements/stream_with-hashes_1.5.xml.bin new file mode 100644 index 00000000..ac15f36e --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-hashes_1.5.xml.bin @@ -0,0 +1,131 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + FooProject + 1.2 + requirements line 11: FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --hash=sha256:486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + pkg:pypi/fooproject@1.2 + + + https://pypi.org/simple/FooProject/ + implicit dist url + + 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 + 486ea46224d1bb4fb680f34f7c9ad96a8f24ec88be73ea8e5a6c65260e9cb8a7 + + + + + + certifi + 2021.5.30 + requirements line 4: certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + pkg:pypi/certifi@2021.5.30 + + + https://pypi.org/simple/certifi/ + implicit dist url + + 2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee + 50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 + + + + + + colorama + requirements line 16: colorama @ https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz --hash=md5:9854316552d41419b678d39af443a75f --hash=sha1:aa1fc7722b9128a3c945048de03f5b4e55157c6a + pkg:pypi/colorama?download_url=https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + + + https://github.com/tartley/colorama/archive/refs/tags/0.4.6.tar.gz + explicit dist url + + 9854316552d41419b678d39af443a75f + aa1fc7722b9128a3c945048de03f5b4e55157c6a + + + + + + something + 1.33.7 + requirements line 21: something == 1.33.7 --hash=foo:something-invalid + pkg:pypi/something@1.33.7 + + + https://pypi.org/simple/something/ + implicit dist url + + + + + urllib3 + 1.26.5 + requirements line 7: urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + pkg:pypi/urllib3@1.26.5 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + 753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c + a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-urls_1.0.xml.bin b/tests/_data/snapshots/requirements/stream_with-urls_1.0.xml.bin new file mode 100644 index 00000000..68562923 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-urls_1.0.xml.bin @@ -0,0 +1,53 @@ + + + + + package-four + + requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four + false + + + package-one + + requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one + pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one + false + + + package-three + + requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three + pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three + false + + + package-two + + requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two + pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two + false + + + unknown + + requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + false + + + urllib3 + + requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + false + + + wxPython-Phoenix + 3.0.3.dev1820+49a8884 + requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl + false + + + diff --git a/tests/_data/snapshots/requirements/stream_with-urls_1.1.xml.bin b/tests/_data/snapshots/requirements/stream_with-urls_1.1.xml.bin new file mode 100644 index 00000000..6c4e9f53 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-urls_1.1.xml.bin @@ -0,0 +1,88 @@ + + + + + package-four + + requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four + + + git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + explicit dist url + + + + + package-one + + requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one + pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one + + + git+https://github.com/path/to/package-one@41b95ec#egg=package-one + explicit dist url + + + + + package-three + + requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three + pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three + + + git+https://github.com/path/to/package-three@0.1#egg=package-three + explicit dist url + + + + + package-two + + requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two + pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two + + + git+https://github.com/path/to/package-two@master#egg=package-two + explicit dist url + + + + + unknown + + requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + + + https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + explicit dist url + + + + + urllib3 + + requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + explicit dist url + + + + + wxPython-Phoenix + 3.0.3.dev1820+49a8884 + requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl + + + http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + explicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-urls_1.2.json.bin b/tests/_data/snapshots/requirements/stream_with-urls_1.2.json.bin new file mode 100644 index 00000000..6a2396bd --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-urls_1.2.json.bin @@ -0,0 +1,149 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four" + } + ], + "name": "package-four", + "purl": "pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-one@41b95ec#egg=package-one" + } + ], + "name": "package-one", + "purl": "pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L9", + "description": "requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-three@0.1#egg=package-three" + } + ], + "name": "package-three", + "purl": "pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-two@master#egg=package-two" + } + ], + "name": "package-two", + "purl": "pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L19", + "description": "requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L23", + "description": "requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L15", + "description": "requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl" + } + ], + "name": "wxPython-Phoenix", + "purl": "pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl", + "type": "library", + "version": "3.0.3.dev1820+49a8884" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L15" + }, + { + "ref": "requirements-L19" + }, + { + "ref": "requirements-L23" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L9" + } + ], + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-urls_1.2.xml.bin b/tests/_data/snapshots/requirements/stream_with-urls_1.2.xml.bin new file mode 100644 index 00000000..9e67b581 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-urls_1.2.xml.bin @@ -0,0 +1,111 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + package-four + + requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four + + + git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + explicit dist url + + + + + package-one + + requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one + pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one + + + git+https://github.com/path/to/package-one@41b95ec#egg=package-one + explicit dist url + + + + + package-three + + requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three + pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three + + + git+https://github.com/path/to/package-three@0.1#egg=package-three + explicit dist url + + + + + package-two + + requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two + pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two + + + git+https://github.com/path/to/package-two@master#egg=package-two + explicit dist url + + + + + unknown + + requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + + + https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + explicit dist url + + + + + urllib3 + + requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + explicit dist url + + + + + wxPython-Phoenix + 3.0.3.dev1820+49a8884 + requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl + + + http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + explicit dist url + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-urls_1.3.json.bin b/tests/_data/snapshots/requirements/stream_with-urls_1.3.json.bin new file mode 100644 index 00000000..c3c05da3 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-urls_1.3.json.bin @@ -0,0 +1,155 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four" + } + ], + "name": "package-four", + "purl": "pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-one@41b95ec#egg=package-one" + } + ], + "name": "package-one", + "purl": "pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L9", + "description": "requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-three@0.1#egg=package-three" + } + ], + "name": "package-three", + "purl": "pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-two@master#egg=package-two" + } + ], + "name": "package-two", + "purl": "pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L19", + "description": "requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L23", + "description": "requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L15", + "description": "requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl" + } + ], + "name": "wxPython-Phoenix", + "purl": "pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl", + "type": "library", + "version": "3.0.3.dev1820+49a8884" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L15" + }, + { + "ref": "requirements-L19" + }, + { + "ref": "requirements-L23" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L9" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-urls_1.3.xml.bin b/tests/_data/snapshots/requirements/stream_with-urls_1.3.xml.bin new file mode 100644 index 00000000..49465b70 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-urls_1.3.xml.bin @@ -0,0 +1,114 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + + + package-four + + requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four + + + git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + explicit dist url + + + + + package-one + + requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one + pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one + + + git+https://github.com/path/to/package-one@41b95ec#egg=package-one + explicit dist url + + + + + package-three + + requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three + pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three + + + git+https://github.com/path/to/package-three@0.1#egg=package-three + explicit dist url + + + + + package-two + + requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two + pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two + + + git+https://github.com/path/to/package-two@master#egg=package-two + explicit dist url + + + + + unknown + + requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + + + https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + explicit dist url + + + + + urllib3 + + requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + explicit dist url + + + + + wxPython-Phoenix + 3.0.3.dev1820+49a8884 + requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl + + + http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + explicit dist url + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-urls_1.4.json.bin b/tests/_data/snapshots/requirements/stream_with-urls_1.4.json.bin new file mode 100644 index 00000000..06cca52c --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-urls_1.4.json.bin @@ -0,0 +1,145 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four" + } + ], + "name": "package-four", + "purl": "pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four", + "type": "library" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-one@41b95ec#egg=package-one" + } + ], + "name": "package-one", + "purl": "pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one", + "type": "library" + }, + { + "bom-ref": "requirements-L9", + "description": "requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-three@0.1#egg=package-three" + } + ], + "name": "package-three", + "purl": "pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three", + "type": "library" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-two@master#egg=package-two" + } + ], + "name": "package-two", + "purl": "pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two", + "type": "library" + }, + { + "bom-ref": "requirements-L19", + "description": "requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L23", + "description": "requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library" + }, + { + "bom-ref": "requirements-L15", + "description": "requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl" + } + ], + "name": "wxPython-Phoenix", + "purl": "pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl", + "type": "library", + "version": "3.0.3.dev1820+49a8884" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L15" + }, + { + "ref": "requirements-L19" + }, + { + "ref": "requirements-L23" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L9" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-urls_1.4.xml.bin b/tests/_data/snapshots/requirements/stream_with-urls_1.4.xml.bin new file mode 100644 index 00000000..97584405 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-urls_1.4.xml.bin @@ -0,0 +1,135 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + package-four + requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four + + + git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + explicit dist url + + + + + package-one + requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one + pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one + + + git+https://github.com/path/to/package-one@41b95ec#egg=package-one + explicit dist url + + + + + package-three + requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three + pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three + + + git+https://github.com/path/to/package-three@0.1#egg=package-three + explicit dist url + + + + + package-two + requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two + pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two + + + git+https://github.com/path/to/package-two@master#egg=package-two + explicit dist url + + + + + unknown + requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + + + https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + explicit dist url + + + + + urllib3 + requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + explicit dist url + + + + + wxPython-Phoenix + 3.0.3.dev1820+49a8884 + requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl + + + http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + explicit dist url + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_with-urls_1.5.json.bin b/tests/_data/snapshots/requirements/stream_with-urls_1.5.json.bin new file mode 100644 index 00000000..cb584904 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-urls_1.5.json.bin @@ -0,0 +1,145 @@ +{ + "components": [ + { + "bom-ref": "requirements-L11", + "description": "requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four" + } + ], + "name": "package-four", + "purl": "pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four", + "type": "library" + }, + { + "bom-ref": "requirements-L5", + "description": "requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-one@41b95ec#egg=package-one" + } + ], + "name": "package-one", + "purl": "pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one", + "type": "library" + }, + { + "bom-ref": "requirements-L9", + "description": "requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-three@0.1#egg=package-three" + } + ], + "name": "package-three", + "purl": "pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three", + "type": "library" + }, + { + "bom-ref": "requirements-L7", + "description": "requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "vcs", + "url": "git+https://github.com/path/to/package-two@master#egg=package-two" + } + ], + "name": "package-two", + "purl": "pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two", + "type": "library" + }, + { + "bom-ref": "requirements-L19", + "description": "requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz" + } + ], + "name": "unknown", + "type": "library" + }, + { + "bom-ref": "requirements-L23", + "description": "requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip", + "type": "library" + }, + { + "bom-ref": "requirements-L15", + "description": "requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl", + "externalReferences": [ + { + "comment": "explicit dist url", + "type": "distribution", + "url": "http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl" + } + ], + "name": "wxPython-Phoenix", + "purl": "pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl", + "type": "library", + "version": "3.0.3.dev1820+49a8884" + } + ], + "dependencies": [ + { + "ref": "requirements-L11" + }, + { + "ref": "requirements-L15" + }, + { + "ref": "requirements-L19" + }, + { + "ref": "requirements-L23" + }, + { + "ref": "requirements-L5" + }, + { + "ref": "requirements-L7" + }, + { + "ref": "requirements-L9" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_with-urls_1.5.xml.bin b/tests/_data/snapshots/requirements/stream_with-urls_1.5.xml.bin new file mode 100644 index 00000000..63a9925d --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_with-urls_1.5.xml.bin @@ -0,0 +1,135 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + package-four + requirements line 11: git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + pkg:pypi/package-four?vcs_url=git%2Bhttps://github.com/path/to/package-four%40releases/tag/v3.7.1%23egg%3Dpackage-four + + + git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four + explicit dist url + + + + + package-one + requirements line 5: git+https://github.com/path/to/package-one@41b95ec#egg=package-one + pkg:pypi/package-one?vcs_url=git%2Bhttps://github.com/path/to/package-one%4041b95ec%23egg%3Dpackage-one + + + git+https://github.com/path/to/package-one@41b95ec#egg=package-one + explicit dist url + + + + + package-three + requirements line 9: git+https://github.com/path/to/package-three@0.1#egg=package-three + pkg:pypi/package-three?vcs_url=git%2Bhttps://github.com/path/to/package-three%400.1%23egg%3Dpackage-three + + + git+https://github.com/path/to/package-three@0.1#egg=package-three + explicit dist url + + + + + package-two + requirements line 7: git+https://github.com/path/to/package-two@master#egg=package-two + pkg:pypi/package-two?vcs_url=git%2Bhttps://github.com/path/to/package-two%40master%23egg%3Dpackage-two + + + git+https://github.com/path/to/package-two@master#egg=package-two + explicit dist url + + + + + unknown + requirements line 19: https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + + + https://files.pythonhosted.org/packages/78/23/f78fd8311e0f710fe1d065d50b92ce0057fe877b8ed7fd41b28ad6865bfc/numpy-1.26.1.tar.gz + explicit dist url + + + + + urllib3 + requirements line 23: urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + pkg:pypi/urllib3?download_url=https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + + + https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip + explicit dist url + + + + + wxPython-Phoenix + 3.0.3.dev1820+49a8884 + requirements line 15: http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + pkg:pypi/wxpython-phoenix@3.0.3.dev1820%2B49a8884?download_url=http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820%2B49a8884-cp34-none-win_amd64.whl + + + http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl + explicit dist url + + + + + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.0.xml.bin b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.0.xml.bin new file mode 100644 index 00000000..2c1666d8 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.0.xml.bin @@ -0,0 +1,26 @@ + + + + + certifi + + requirements line 1: certifi>=2021.5.30 + pkg:pypi/certifi + false + + + chardet + + requirements line 2: chardet >= 4.0.0 , < 5 + pkg:pypi/chardet + false + + + urllib3 + + requirements line 3: urllib3 + pkg:pypi/urllib3 + false + + + diff --git a/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.1.xml.bin b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.1.xml.bin new file mode 100644 index 00000000..0a6ec589 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.1.xml.bin @@ -0,0 +1,41 @@ + + + + + certifi + + requirements line 1: certifi>=2021.5.30 + pkg:pypi/certifi + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + + requirements line 2: chardet >= 4.0.0 , < 5 + pkg:pypi/chardet + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + urllib3 + + requirements line 3: urllib3 + pkg:pypi/urllib3 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + diff --git a/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.2.json.bin b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.2.json.bin new file mode 100644 index 00000000..51e19752 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.2.json.bin @@ -0,0 +1,78 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi>=2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet >= 4.0.0 , < 5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: urllib3", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + } + ], + "metadata": { + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.2.xml.bin b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.2.xml.bin new file mode 100644 index 00000000..2e4ce077 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.2.xml.bin @@ -0,0 +1,60 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + certifi + + requirements line 1: certifi>=2021.5.30 + pkg:pypi/certifi + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + + requirements line 2: chardet >= 4.0.0 , < 5 + pkg:pypi/chardet + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + urllib3 + + requirements line 3: urllib3 + pkg:pypi/urllib3 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.3.json.bin b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.3.json.bin new file mode 100644 index 00000000..d3777e03 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.3.json.bin @@ -0,0 +1,84 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi>=2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet >= 4.0.0 , < 5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet", + "type": "library", + "version": "" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: urllib3", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3", + "type": "library", + "version": "" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-bom", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.3.xml.bin b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.3.xml.bin new file mode 100644 index 00000000..6a3dcd48 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.3.xml.bin @@ -0,0 +1,63 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + true + + + + + certifi + + requirements line 1: certifi>=2021.5.30 + pkg:pypi/certifi + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + + requirements line 2: chardet >= 4.0.0 , < 5 + pkg:pypi/chardet + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + urllib3 + + requirements line 3: urllib3 + pkg:pypi/urllib3 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.4.json.bin b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.4.json.bin new file mode 100644 index 00000000..7c973b8d --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.4.json.bin @@ -0,0 +1,77 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi>=2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi", + "type": "library" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet >= 4.0.0 , < 5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet", + "type": "library" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: urllib3", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.4.xml.bin b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.4.xml.bin new file mode 100644 index 00000000..944db4b2 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.4.xml.bin @@ -0,0 +1,87 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + certifi + requirements line 1: certifi>=2021.5.30 + pkg:pypi/certifi + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + requirements line 2: chardet >= 4.0.0 , < 5 + pkg:pypi/chardet + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + urllib3 + requirements line 3: urllib3 + pkg:pypi/urllib3 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + diff --git a/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.5.json.bin b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.5.json.bin new file mode 100644 index 00000000..1e3d62d7 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.5.json.bin @@ -0,0 +1,77 @@ +{ + "components": [ + { + "bom-ref": "requirements-L1", + "description": "requirements line 1: certifi>=2021.5.30", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/certifi/" + } + ], + "name": "certifi", + "purl": "pkg:pypi/certifi", + "type": "library" + }, + { + "bom-ref": "requirements-L2", + "description": "requirements line 2: chardet >= 4.0.0 , < 5", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/chardet/" + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet", + "type": "library" + }, + { + "bom-ref": "requirements-L3", + "description": "requirements line 3: urllib3", + "externalReferences": [ + { + "comment": "implicit dist url", + "type": "distribution", + "url": "https://pypi.org/simple/urllib3/" + } + ], + "name": "urllib3", + "purl": "pkg:pypi/urllib3", + "type": "library" + } + ], + "dependencies": [ + { + "ref": "requirements-L1" + }, + { + "ref": "requirements-L2" + }, + { + "ref": "requirements-L3" + } + ], + "metadata": { + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.5.xml.bin b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.5.xml.bin new file mode 100644 index 00000000..bab446e4 --- /dev/null +++ b/tests/_data/snapshots/requirements/stream_without-pinned-versions_1.5.xml.bin @@ -0,0 +1,87 @@ + + + + + + CycloneDX + cyclonedx-bom + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + true + + + + + certifi + requirements line 1: certifi>=2021.5.30 + pkg:pypi/certifi + + + https://pypi.org/simple/certifi/ + implicit dist url + + + + + chardet + requirements line 2: chardet >= 4.0.0 , < 5 + pkg:pypi/chardet + + + https://pypi.org/simple/chardet/ + implicit dist url + + + + + urllib3 + requirements line 3: urllib3 + pkg:pypi/urllib3 + + + https://pypi.org/simple/urllib3/ + implicit dist url + + + + + + + + + + diff --git a/tests/fixtures/conda-list-broken.txt b/tests/fixtures/conda-list-broken.txt deleted file mode 100644 index ed67b21c..00000000 --- a/tests/fixtures/conda-list-broken.txt +++ /dev/null @@ -1,2 +0,0 @@ -# This package list id malformed. -https://repo.anaconda.com/pkgs/main/linux-64/malformed_source.conda diff --git a/tests/fixtures/conda-list-build-number-text.txt b/tests/fixtures/conda-list-build-number-text.txt deleted file mode 100644 index ab3e4c27..00000000 --- a/tests/fixtures/conda-list-build-number-text.txt +++ /dev/null @@ -1,45 +0,0 @@ -# This file is part of https://github.com/CycloneDX/cyclonedx-python/issues/331 - -# This file may be used to create an environment using: -# $ conda create --name --file -# platform: linux-64 -@EXPLICIT -https://repo.anaconda.com/pkgs/main/linux-64/_libgcc_mutex-0.1-main.conda -https://repo.anaconda.com/pkgs/main/linux-64/ca-certificates-2022.2.1-h06a4308_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/ld_impl_linux-64-2.35.1-h7274673_9.conda -https://repo.anaconda.com/pkgs/main/linux-64/libstdcxx-ng-9.3.0-hd4cf53a_17.conda -https://repo.anaconda.com/pkgs/main/noarch/tzdata-2021e-hda174b7_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/libgomp-9.3.0-h5101ec6_17.conda -https://repo.anaconda.com/pkgs/main/linux-64/_openmp_mutex-4.5-1_gnu.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/libgcc-ng-9.3.0-h5101ec6_17.conda -https://repo.anaconda.com/pkgs/main/linux-64/libffi-3.3-he6710b0_2.conda -https://repo.anaconda.com/pkgs/main/linux-64/ncurses-6.3-h7f8727e_2.conda -https://repo.anaconda.com/pkgs/main/linux-64/openssl-1.1.1m-h7f8727e_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/xz-5.2.5-h7b6447c_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/yaml-0.2.5-h7b6447c_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/zlib-1.2.11-h7f8727e_4.conda -https://repo.anaconda.com/pkgs/main/linux-64/readline-8.1.2-h7f8727e_1.conda -https://repo.anaconda.com/pkgs/main/linux-64/tk-8.6.11-h1ccaba5_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/sqlite-3.38.0-hc218d9a_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/python-3.9.7-h12debd9_1.conda -https://repo.anaconda.com/pkgs/main/linux-64/certifi-2021.10.8-py39h06a4308_2.conda -https://repo.anaconda.com/pkgs/main/noarch/charset-normalizer-2.0.4-pyhd3eb1b0_0.conda -https://repo.anaconda.com/pkgs/main/noarch/colorama-0.4.4-pyhd3eb1b0_0.conda -https://repo.anaconda.com/pkgs/main/noarch/idna-3.3-pyhd3eb1b0_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/pycosat-0.6.3-py39h27cfd23_0.conda -https://repo.anaconda.com/pkgs/main/noarch/pycparser-2.21-pyhd3eb1b0_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/pysocks-1.7.1-py39h06a4308_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/ruamel_yaml-0.15.100-py39h27cfd23_0.conda -https://repo.anaconda.com/pkgs/main/noarch/six-1.16.0-pyhd3eb1b0_1.conda -https://repo.anaconda.com/pkgs/main/noarch/wheel-0.37.1-pyhd3eb1b0_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/cffi-1.15.0-py39hd667e15_1.conda -https://repo.anaconda.com/pkgs/main/linux-64/setuptools-58.0.4-py39h06a4308_0.conda -https://repo.anaconda.com/pkgs/main/noarch/tqdm-4.63.0-pyhd3eb1b0_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/brotlipy-0.7.0-py39h27cfd23_1003.conda -https://repo.anaconda.com/pkgs/main/linux-64/conda-package-handling-1.7.3-py39h27cfd23_1.conda -https://repo.anaconda.com/pkgs/main/linux-64/cryptography-36.0.0-py39h9ce1e76_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/pip-21.2.4-py39h06a4308_0.conda -https://repo.anaconda.com/pkgs/main/noarch/pyopenssl-22.0.0-pyhd3eb1b0_0.conda -https://repo.anaconda.com/pkgs/main/noarch/urllib3-1.26.8-pyhd3eb1b0_0.conda -https://repo.anaconda.com/pkgs/main/noarch/requests-2.27.1-pyhd3eb1b0_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/conda-4.12.0-py39h06a4308_0.conda diff --git a/tests/fixtures/conda-list-explicit-md5.txt b/tests/fixtures/conda-list-explicit-md5.txt deleted file mode 100644 index 4ac81284..00000000 --- a/tests/fixtures/conda-list-explicit-md5.txt +++ /dev/null @@ -1,38 +0,0 @@ -# This file may be used to create an environment using: -# $ conda create --name --file -# platform: osx-64 -@EXPLICIT -https://repo.anaconda.com/pkgs/main/osx-64/ca-certificates-2021.7.5-hecd8cb5_1.conda#c2d0ae65c08dacdcf86770b7b5bbb187 -https://repo.anaconda.com/pkgs/main/osx-64/libcxx-10.0.0-1.conda#86574bfd5bcf4921237da41c07534cdc -https://repo.anaconda.com/pkgs/main/noarch/tzdata-2021a-h52ac0ba_0.conda#d42e4db918af84a470286e4c300604a3 -https://repo.anaconda.com/pkgs/main/osx-64/xz-5.2.5-h1de35cc_0.conda#f38610dab0f2b0cb05f1b31f354113c5 -https://repo.anaconda.com/pkgs/main/osx-64/yaml-0.2.5-haf1e3a3_0.conda#73628ed86f99adf6a0cb81dd20e426cd -https://repo.anaconda.com/pkgs/main/osx-64/zlib-1.2.11-h1de35cc_3.conda#67bb31afee816662edebfc3171360ccf -https://repo.anaconda.com/pkgs/main/osx-64/libffi-3.3-hb1e8313_2.conda#0c959d444ac65555cb836cdbd3e9a2d9 -https://repo.anaconda.com/pkgs/main/osx-64/ncurses-6.2-h0a44026_1.conda#649f497ed2ff2704749256d3532d144b -https://repo.anaconda.com/pkgs/main/osx-64/openssl-1.1.1k-h9ed2024_0.conda#2ecbfa7a9684bbaaa057c6dac778abc3 -https://repo.anaconda.com/pkgs/main/osx-64/tk-8.6.10-hb0a8c7a_0.conda#2f199f5862f5b000479408673eadb88d -https://repo.anaconda.com/pkgs/main/osx-64/readline-8.1-h9ed2024_0.conda#ce1a650fddb885c47ccdb28c90a2057a -https://repo.anaconda.com/pkgs/main/osx-64/sqlite-3.36.0-hce871da_0.conda#7e47a43e94a61ad1c7a5d910c5e970fd -https://repo.anaconda.com/pkgs/main/osx-64/python-3.9.5-h88f2d9e_3.conda#f10a9a3fd6b0936cc05f9e94e06a2d94 -https://repo.anaconda.com/pkgs/main/osx-64/certifi-2021.5.30-py39hecd8cb5_0.conda#48a9d5f197fbcef83387ca18e7216068 -https://repo.anaconda.com/pkgs/main/osx-64/chardet-4.0.0-py39hecd8cb5_1003.conda#535b448899dcf60a12dc683a90be5c0c -https://repo.anaconda.com/pkgs/main/noarch/idna-2.10-pyhd3eb1b0_0.tar.bz2#153ff132f593ea80aae2eea61a629c92 -https://repo.anaconda.com/pkgs/main/osx-64/pycosat-0.6.3-py39h9ed2024_0.conda#625905706ac243fae350f4dfc63e1b2d -https://repo.anaconda.com/pkgs/main/noarch/pycparser-2.20-py_2.conda#fcfeb621c6f895f3562ff01d9d6ce959 -https://repo.anaconda.com/pkgs/main/osx-64/pysocks-1.7.1-py39hecd8cb5_0.conda#4765ca1a39ea5287cbe170734ac83e37 -https://repo.anaconda.com/pkgs/main/osx-64/python.app-3-py39h9ed2024_0.conda#8a562918b61f71b3cac387cec842cbd2 -https://repo.anaconda.com/pkgs/main/osx-64/ruamel_yaml-0.15.100-py39h9ed2024_0.conda#d7abc88ed5b3a8d9e4af95b8a64d87fe -https://repo.anaconda.com/pkgs/main/noarch/six-1.16.0-pyhd3eb1b0_0.conda#529b369e1accc75b89f2d7e184a898d0 -https://repo.anaconda.com/pkgs/main/noarch/tqdm-4.61.2-pyhd3eb1b0_1.conda#f061c1548e813e7544d0017a71651e04 -https://repo.anaconda.com/pkgs/main/noarch/wheel-0.36.2-pyhd3eb1b0_0.conda#31029affc034e8c7203202417cebd157 -https://repo.anaconda.com/pkgs/main/osx-64/cffi-1.14.6-py39h2125817_0.conda#78ee9d3613c9f3f50a9eb4acd45bc747 -https://repo.anaconda.com/pkgs/main/osx-64/conda-package-handling-1.7.3-py39h9ed2024_1.conda#04a0be0e0f5bad8d8fc7ebe4803ea446 -https://repo.anaconda.com/pkgs/main/osx-64/setuptools-52.0.0-py39hecd8cb5_0.conda#5c9e48476978303d04650c21ee55f365 -https://repo.anaconda.com/pkgs/main/osx-64/brotlipy-0.7.0-py39h9ed2024_1003.conda#a08f6f5f899aff4a07351217b36fae41 -https://repo.anaconda.com/pkgs/main/osx-64/cryptography-3.4.7-py39h2fd3fbb_0.conda#822e8758f6e705c84b01480810eb24b6 -https://repo.anaconda.com/pkgs/main/osx-64/pip-21.1.3-py39hecd8cb5_0.conda#7bae540cbc7fdc9627b588c760b05e58 -https://repo.anaconda.com/pkgs/main/noarch/pyopenssl-20.0.1-pyhd3eb1b0_1.conda#ac62ddccf2e89f7a35867b2478a278af -https://repo.anaconda.com/pkgs/main/noarch/urllib3-1.26.6-pyhd3eb1b0_1.conda#5c72bc4a5a4fc0420b0e73b3acb1f52b -https://repo.anaconda.com/pkgs/main/noarch/requests-2.25.1-pyhd3eb1b0_0.conda#9d30b41b315403c7c74793b9b8d88580 -https://repo.anaconda.com/pkgs/main/osx-64/conda-4.10.3-py39hecd8cb5_0.tar.bz2#bc36833ee4a90c212e0695675bcfe120 diff --git a/tests/fixtures/conda-list-explicit-simple.txt b/tests/fixtures/conda-list-explicit-simple.txt deleted file mode 100644 index b9cd27fb..00000000 --- a/tests/fixtures/conda-list-explicit-simple.txt +++ /dev/null @@ -1,5 +0,0 @@ -# This file may be used to create an environment using: -# $ conda create --name --file -# platform: osx-64 -@EXPLICIT -https://repo.anaconda.com/pkgs/main/osx-64/setuptools-52.0.0-py39hecd8cb5_0.conda#5c9e48476978303d04650c21ee55f365 \ No newline at end of file diff --git a/tests/fixtures/conda-list-issue462.json b/tests/fixtures/conda-list-issue462.json deleted file mode 100644 index 8e900588..00000000 --- a/tests/fixtures/conda-list-issue462.json +++ /dev/null @@ -1,252 +0,0 @@ -[ - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "main", - "channel": "pkgs/main", - "dist_name": "_libgcc_mutex-0.1-main", - "name": "_libgcc_mutex", - "platform": "linux-64", - "version": "0.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "1_gnu", - "channel": "pkgs/main", - "dist_name": "_openmp_mutex-5.1-1_gnu", - "name": "_openmp_mutex", - "platform": "linux-64", - "version": "5.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h7b6447c_0", - "channel": "pkgs/main", - "dist_name": "bzip2-1.0.8-h7b6447c_0", - "name": "bzip2", - "platform": "linux-64", - "version": "1.0.8" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h06a4308_0", - "channel": "pkgs/main", - "dist_name": "ca-certificates-2022.10.11-h06a4308_0", - "name": "ca-certificates", - "platform": "linux-64", - "version": "2022.10.11" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py310h06a4308_0", - "channel": "pkgs/main", - "dist_name": "certifi-2022.9.24-py310h06a4308_0", - "name": "certifi", - "platform": "linux-64", - "version": "2022.9.24" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h1181459_1", - "channel": "pkgs/main", - "dist_name": "ld_impl_linux-64-2.38-h1181459_1", - "name": "ld_impl_linux-64", - "platform": "linux-64", - "version": "2.38" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 6, - "build_string": "h6a678d5_6", - "channel": "pkgs/main", - "dist_name": "libffi-3.4.2-h6a678d5_6", - "name": "libffi", - "platform": "linux-64", - "version": "3.4.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h1234567_1", - "channel": "pkgs/main", - "dist_name": "libgcc-ng-11.2.0-h1234567_1", - "name": "libgcc-ng", - "platform": "linux-64", - "version": "11.2.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h1234567_1", - "channel": "pkgs/main", - "dist_name": "libgomp-11.2.0-h1234567_1", - "name": "libgomp", - "platform": "linux-64", - "version": "11.2.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h1234567_1", - "channel": "pkgs/main", - "dist_name": "libstdcxx-ng-11.2.0-h1234567_1", - "name": "libstdcxx-ng", - "platform": "linux-64", - "version": "11.2.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h5eee18b_0", - "channel": "pkgs/main", - "dist_name": "libuuid-1.41.5-h5eee18b_0", - "name": "libuuid", - "platform": "linux-64", - "version": "1.41.5" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 3, - "build_string": "h5eee18b_3", - "channel": "pkgs/main", - "dist_name": "ncurses-6.3-h5eee18b_3", - "name": "ncurses", - "platform": "linux-64", - "version": "6.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "numpy-1.23.5-pypi_0", - "name": "numpy", - "platform": "pypi", - "version": "1.23.5" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h7f8727e_0", - "channel": "pkgs/main", - "dist_name": "openssl-1.1.1s-h7f8727e_0", - "name": "openssl", - "platform": "linux-64", - "version": "1.1.1s" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py310h06a4308_0", - "channel": "pkgs/main", - "dist_name": "pip-22.3.1-py310h06a4308_0", - "name": "pip", - "platform": "linux-64", - "version": "22.3.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h7a1cb2a_1", - "channel": "pkgs/main", - "dist_name": "python-3.10.8-h7a1cb2a_1", - "name": "python", - "platform": "linux-64", - "version": "3.10.8" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h5eee18b_0", - "channel": "pkgs/main", - "dist_name": "readline-8.2-h5eee18b_0", - "name": "readline", - "platform": "linux-64", - "version": "8.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "seawater-3.3.4-pypi_0", - "name": "seawater", - "platform": "pypi", - "version": "3.3.4" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py310h06a4308_0", - "channel": "pkgs/main", - "dist_name": "setuptools-65.5.0-py310h06a4308_0", - "name": "setuptools", - "platform": "linux-64", - "version": "65.5.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h5082296_0", - "channel": "pkgs/main", - "dist_name": "sqlite-3.40.0-h5082296_0", - "name": "sqlite", - "platform": "linux-64", - "version": "3.40.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h1ccaba5_0", - "channel": "pkgs/main", - "dist_name": "tk-8.6.12-h1ccaba5_0", - "name": "tk", - "platform": "linux-64", - "version": "8.6.12" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h04d1e81_0", - "channel": "pkgs/main", - "dist_name": "tzdata-2022g-h04d1e81_0", - "name": "tzdata", - "platform": "noarch", - "version": "2022g" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "pyhd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "wheel-0.37.1-pyhd3eb1b0_0", - "name": "wheel", - "platform": "noarch", - "version": "0.37.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h5eee18b_0", - "channel": "pkgs/main", - "dist_name": "xz-5.2.8-h5eee18b_0", - "name": "xz", - "platform": "linux-64", - "version": "5.2.8" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h5eee18b_0", - "channel": "pkgs/main", - "dist_name": "zlib-1.2.13-h5eee18b_0", - "name": "zlib", - "platform": "linux-64", - "version": "1.2.13" - } -] diff --git a/tests/fixtures/conda-list-output.json b/tests/fixtures/conda-list-output.json deleted file mode 100644 index a0739965..00000000 --- a/tests/fixtures/conda-list-output.json +++ /dev/null @@ -1,342 +0,0 @@ -[ - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1003, - "build_string": "py39h9ed2024_1003", - "channel": "pkgs/main", - "dist_name": "brotlipy-0.7.0-py39h9ed2024_1003", - "name": "brotlipy", - "platform": "osx-64", - "version": "0.7.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "hecd8cb5_1", - "channel": "pkgs/main", - "dist_name": "ca-certificates-2021.7.5-hecd8cb5_1", - "name": "ca-certificates", - "platform": "osx-64", - "version": "2021.7.5" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39hecd8cb5_0", - "channel": "pkgs/main", - "dist_name": "certifi-2021.5.30-py39hecd8cb5_0", - "name": "certifi", - "platform": "osx-64", - "version": "2021.5.30" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39h2125817_0", - "channel": "pkgs/main", - "dist_name": "cffi-1.14.6-py39h2125817_0", - "name": "cffi", - "platform": "osx-64", - "version": "1.14.6" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1003, - "build_string": "py39hecd8cb5_1003", - "channel": "pkgs/main", - "dist_name": "chardet-4.0.0-py39hecd8cb5_1003", - "name": "chardet", - "platform": "osx-64", - "version": "4.0.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39hecd8cb5_0", - "channel": "pkgs/main", - "dist_name": "conda-4.10.3-py39hecd8cb5_0", - "name": "conda", - "platform": "osx-64", - "version": "4.10.3" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "py39h9ed2024_1", - "channel": "pkgs/main", - "dist_name": "conda-package-handling-1.7.3-py39h9ed2024_1", - "name": "conda-package-handling", - "platform": "osx-64", - "version": "1.7.3" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39h2fd3fbb_0", - "channel": "pkgs/main", - "dist_name": "cryptography-3.4.7-py39h2fd3fbb_0", - "name": "cryptography", - "platform": "osx-64", - "version": "3.4.7" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "pyhd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "idna-2.10-pyhd3eb1b0_0", - "name": "idna", - "platform": "noarch", - "version": "2.10" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "1", - "channel": "pkgs/main", - "dist_name": "libcxx-10.0.0-1", - "name": "libcxx", - "platform": "osx-64", - "version": "10.0.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 2, - "build_string": "hb1e8313_2", - "channel": "pkgs/main", - "dist_name": "libffi-3.3-hb1e8313_2", - "name": "libffi", - "platform": "osx-64", - "version": "3.3" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h0a44026_1", - "channel": "pkgs/main", - "dist_name": "ncurses-6.2-h0a44026_1", - "name": "ncurses", - "platform": "osx-64", - "version": "6.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h9ed2024_0", - "channel": "pkgs/main", - "dist_name": "openssl-1.1.1k-h9ed2024_0", - "name": "openssl", - "platform": "osx-64", - "version": "1.1.1k" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39hecd8cb5_0", - "channel": "pkgs/main", - "dist_name": "pip-21.1.3-py39hecd8cb5_0", - "name": "pip", - "platform": "osx-64", - "version": "21.1.3" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39h9ed2024_0", - "channel": "pkgs/main", - "dist_name": "pycosat-0.6.3-py39h9ed2024_0", - "name": "pycosat", - "platform": "osx-64", - "version": "0.6.3" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 2, - "build_string": "py_2", - "channel": "pkgs/main", - "dist_name": "pycparser-2.20-py_2", - "name": "pycparser", - "platform": "noarch", - "version": "2.20" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "pyhd3eb1b0_1", - "channel": "pkgs/main", - "dist_name": "pyopenssl-20.0.1-pyhd3eb1b0_1", - "name": "pyopenssl", - "platform": "noarch", - "version": "20.0.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39hecd8cb5_0", - "channel": "pkgs/main", - "dist_name": "pysocks-1.7.1-py39hecd8cb5_0", - "name": "pysocks", - "platform": "osx-64", - "version": "1.7.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 3, - "build_string": "h88f2d9e_3", - "channel": "pkgs/main", - "dist_name": "python-3.9.5-h88f2d9e_3", - "name": "python", - "platform": "osx-64", - "version": "3.9.5" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39h9ed2024_0", - "channel": "pkgs/main", - "dist_name": "python.app-3-py39h9ed2024_0", - "name": "python.app", - "platform": "osx-64", - "version": "3" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h9ed2024_0", - "channel": "pkgs/main", - "dist_name": "readline-8.1-h9ed2024_0", - "name": "readline", - "platform": "osx-64", - "version": "8.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "pyhd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "requests-2.25.1-pyhd3eb1b0_0", - "name": "requests", - "platform": "noarch", - "version": "2.25.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39h9ed2024_0", - "channel": "pkgs/main", - "dist_name": "ruamel_yaml-0.15.100-py39h9ed2024_0", - "name": "ruamel_yaml", - "platform": "osx-64", - "version": "0.15.100" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39hecd8cb5_0", - "channel": "pkgs/main", - "dist_name": "setuptools-52.0.0-py39hecd8cb5_0", - "name": "setuptools", - "platform": "osx-64", - "version": "52.0.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "pyhd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "six-1.16.0-pyhd3eb1b0_0", - "name": "six", - "platform": "noarch", - "version": "1.16.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "hce871da_0", - "channel": "pkgs/main", - "dist_name": "sqlite-3.36.0-hce871da_0", - "name": "sqlite", - "platform": "osx-64", - "version": "3.36.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "hb0a8c7a_0", - "channel": "pkgs/main", - "dist_name": "tk-8.6.10-hb0a8c7a_0", - "name": "tk", - "platform": "osx-64", - "version": "8.6.10" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "pyhd3eb1b0_1", - "channel": "pkgs/main", - "dist_name": "tqdm-4.61.2-pyhd3eb1b0_1", - "name": "tqdm", - "platform": "noarch", - "version": "4.61.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h52ac0ba_0", - "channel": "pkgs/main", - "dist_name": "tzdata-2021a-h52ac0ba_0", - "name": "tzdata", - "platform": "noarch", - "version": "2021a" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "pyhd3eb1b0_1", - "channel": "pkgs/main", - "dist_name": "urllib3-1.26.6-pyhd3eb1b0_1", - "name": "urllib3", - "platform": "noarch", - "version": "1.26.6" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "pyhd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "wheel-0.36.2-pyhd3eb1b0_0", - "name": "wheel", - "platform": "noarch", - "version": "0.36.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h1de35cc_0", - "channel": "pkgs/main", - "dist_name": "xz-5.2.5-h1de35cc_0", - "name": "xz", - "platform": "osx-64", - "version": "5.2.5" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "haf1e3a3_0", - "channel": "pkgs/main", - "dist_name": "yaml-0.2.5-haf1e3a3_0", - "name": "yaml", - "platform": "osx-64", - "version": "0.2.5" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 3, - "build_string": "h1de35cc_3", - "channel": "pkgs/main", - "dist_name": "zlib-1.2.11-h1de35cc_3", - "name": "zlib", - "platform": "osx-64", - "version": "1.2.11" - } -] diff --git a/tests/fixtures/pipfile-lock-no-index-example.txt b/tests/fixtures/pipfile-lock-no-index-example.txt deleted file mode 100644 index 6e1db75b..00000000 --- a/tests/fixtures/pipfile-lock-no-index-example.txt +++ /dev/null @@ -1,46 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "8ca3da46acf801a7780c6781bed1d6b7012664226203447640cda114b13aa8aa" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.9" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "anyio": { - "hashes": [ - "sha256:56ceaeed2877723578b1341f4f68c29081db189cfb40a97d1922b9513f6d7db6", - "sha256:8eccec339cb4a856c94a75d50fc1d451faf32a05ef406be462e2efc59c9838b0" - ], - "markers": "python_full_version >= '3.6.2'", - "version": "==3.3.3" - }, - "toml": { - "hashes": [ - "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", - "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" - ], - "index": "pypi", - "version": "==0.10.2" - } - }, - "develop": { - "flake8": { - "hashes": [ - "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb", - "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca" - ], - "index": "pip_conf_index_global", - "version": "==3.7.9" - } - } -} diff --git a/tests/fixtures/pipfile-lock-simple.txt b/tests/fixtures/pipfile-lock-simple.txt deleted file mode 100644 index 8d12d2a1..00000000 --- a/tests/fixtures/pipfile-lock-simple.txt +++ /dev/null @@ -1,38 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "8ca3da46acf801a7780c6781bed1d6b7012664226203447640cda114b13aa8aa" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.9" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "toml": { - "hashes": [ - "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", - "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" - ], - "index": "pypi", - "version": "==0.10.2" - } - }, - "develop": { - "flake8": { - "hashes": [ - "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb", - "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca" - ], - "index": "pip_conf_index_global", - "version": "==3.7.9" - } - } -} diff --git a/tests/fixtures/poetry-lock11-simple.txt b/tests/fixtures/poetry-lock11-simple.txt deleted file mode 100644 index de7931e9..00000000 --- a/tests/fixtures/poetry-lock11-simple.txt +++ /dev/null @@ -1,30 +0,0 @@ -[[package]] -name = "ddt" -version = "1.6.0" -description = "Data-Driven/Decorated Tests" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[metadata] -lock-version = "1.1" -python-versions = "^3.9" -content-hash = "80097fa9563a7be19fa76849b17ca2426c48bd289f946f9f08bfdf07f458ed88" - -[metadata.files] -ddt = [ - {file = "ddt-1.6.0-py2.py3-none-any.whl", hash = "sha256:e3c93b961a108b4f4d5a6c7f2263513d928baf3bb5b32af8e1c804bfb041141d"}, - {file = "ddt-1.6.0.tar.gz", hash = "sha256:f71b348731b8c78c3100bffbd951a769fbd439088d1fdbb3841eee019af80acd"}, -] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] diff --git a/tests/fixtures/poetry-lock20-simple.txt b/tests/fixtures/poetry-lock20-simple.txt deleted file mode 100644 index 90d20d32..00000000 --- a/tests/fixtures/poetry-lock20-simple.txt +++ /dev/null @@ -1,30 +0,0 @@ -# This file is automatically @generated by Poetry 1.4.1 and should not be changed by hand. - -[[package]] -name = "ddt" -version = "1.6.0" -description = "Data-Driven/Decorated Tests" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "ddt-1.6.0-py2.py3-none-any.whl", hash = "sha256:e3c93b961a108b4f4d5a6c7f2263513d928baf3bb5b32af8e1c804bfb041141d"}, - {file = "ddt-1.6.0.tar.gz", hash = "sha256:f71b348731b8c78c3100bffbd951a769fbd439088d1fdbb3841eee019af80acd"}, -] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - -[metadata] -lock-version = "2.0" -python-versions = "^3.9" -content-hash = "e808a516cc6e4eab5306d2aa5e1bc464824c23805ebaa47ffc9e64146d12c613" diff --git a/tests/fixtures/requirements-example-1.txt b/tests/fixtures/requirements-example-1.txt deleted file mode 100644 index ea71d69b..00000000 --- a/tests/fixtures/requirements-example-1.txt +++ /dev/null @@ -1,3 +0,0 @@ -packageurl-python>=0.9.4 -requirements_parser>=0.2.0 -setuptools>=50.3.2 \ No newline at end of file diff --git a/tests/fixtures/requirements-local-and-remote-packages.txt b/tests/fixtures/requirements-local-and-remote-packages.txt deleted file mode 100644 index 441452de..00000000 --- a/tests/fixtures/requirements-local-and-remote-packages.txt +++ /dev/null @@ -1,8 +0,0 @@ -./myproject/certifi # comment -./myproject/chardet --e ./myproject/idna.whl -./myproject/requests --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 -./myproject/urllib3 -https://example.com/mypackage-0.0.1-cp37-none-linux_amd64.whl # WHL filename must be conformant to PEP-440 - --r requirements-nested.txt diff --git a/tests/fixtures/requirements-multilines-with-comments.txt b/tests/fixtures/requirements-multilines-with-comments.txt deleted file mode 100644 index 163e161f..00000000 --- a/tests/fixtures/requirements-multilines-with-comments.txt +++ /dev/null @@ -1,3 +0,0 @@ -certifi==2021.5.30 \ - --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee -# via requests \ No newline at end of file diff --git a/tests/fixtures/requirements-nested.txt b/tests/fixtures/requirements-nested.txt deleted file mode 100644 index cf4d7c0a..00000000 --- a/tests/fixtures/requirements-nested.txt +++ /dev/null @@ -1 +0,0 @@ -./downloads/numpy-1.9.2-cp34-none-win32.whl diff --git a/tests/fixtures/requirements-private-packages.txt b/tests/fixtures/requirements-private-packages.txt deleted file mode 100644 index dca55ced..00000000 --- a/tests/fixtures/requirements-private-packages.txt +++ /dev/null @@ -1,3 +0,0 @@ ---extra-index-url https://mypi.org/simple/ - -mypackage==1.2.3 diff --git a/tests/fixtures/requirements-simple.txt b/tests/fixtures/requirements-simple.txt deleted file mode 100644 index 890d7da2..00000000 --- a/tests/fixtures/requirements-simple.txt +++ /dev/null @@ -1 +0,0 @@ -setuptools==50.3.2 \ No newline at end of file diff --git a/tests/fixtures/requirements-with-hashes.txt b/tests/fixtures/requirements-with-hashes.txt deleted file mode 100644 index 03ec1169..00000000 --- a/tests/fixtures/requirements-with-hashes.txt +++ /dev/null @@ -1,5 +0,0 @@ -certifi==2021.5.30 --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 # via requests -chardet==4.0.0 --hash=sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa --hash=sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5 # via requests -idna==2.10 --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 # via requests -requests==2.25.1 --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 --hash=sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e # via -r requirements.in -urllib3==1.26.5 --hash=sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c --hash=sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098 # via requests \ No newline at end of file diff --git a/tests/fixtures/requirements-with-urls.txt b/tests/fixtures/requirements-with-urls.txt deleted file mode 100644 index d6df7180..00000000 --- a/tests/fixtures/requirements-with-urls.txt +++ /dev/null @@ -1,4 +0,0 @@ -git+https://github.com/path/to/package-one@41b95ec#egg=package-one # commit hash -git+https://github.com/path/to/package-two@master#egg=package-two # master branch -git+https://github.com/path/to/package-three@0.1#egg=package-three # tag -git+https://github.com/path/to/package-four@releases/tag/v3.7.1#egg=package-four # release tag diff --git a/tests/fixtures/requirements-without-pinned-versions.txt b/tests/fixtures/requirements-without-pinned-versions.txt deleted file mode 100644 index b25c0778..00000000 --- a/tests/fixtures/requirements-without-pinned-versions.txt +++ /dev/null @@ -1,5 +0,0 @@ -certifi==2021.5.30 # via requests -chardet>=4.0.0 # via requests -idna -requests -urllib3 \ No newline at end of file diff --git a/cyclonedx_py/_internal/parser/__init__.py b/tests/functional/__init__.py similarity index 73% rename from cyclonedx_py/_internal/parser/__init__.py rename to tests/functional/__init__.py index 254e5c11..c2926fb2 100644 --- a/cyclonedx_py/_internal/parser/__init__.py +++ b/tests/functional/__init__.py @@ -1,5 +1,5 @@ -# encoding: utf-8 - +# This file is part of CycloneDX Python Lib +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -14,10 +14,3 @@ # # SPDX-License-Identifier: Apache-2.0 # Copyright (c) OWASP Foundation. All Rights Reserved. - -""" -Set of concrete classes and methods which allow for quick creation of a Bom instance from your environment or Python -project. - -Use a Parser instead of programmatically creating a Bom as a developer. -""" diff --git a/cyclonedx_py/_internal/parser/_cdx_properties.py b/tests/functional/test_license_trove_classifier.py similarity index 59% rename from cyclonedx_py/_internal/parser/_cdx_properties.py rename to tests/functional/test_license_trove_classifier.py index 220b1a3e..9b554575 100644 --- a/cyclonedx_py/_internal/parser/_cdx_properties.py +++ b/tests/functional/test_license_trove_classifier.py @@ -1,5 +1,5 @@ -# encoding: utf-8 - +# This file is part of CycloneDX Python Lib +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -16,16 +16,17 @@ # Copyright (c) OWASP Foundation. All Rights Reserved. -from enum import Enum - +from unittest import TestCase -class Poetry(Enum): - """See https://github.com/CycloneDX/cyclonedx-property-taxonomy/blob/main/cdx/poetry.md""" +from cyclonedx.spdx import is_supported_id +from ddt import ddt, named_data - PackageGroup = 'cdx:poetry:package:group' +from cyclonedx_py._internal.utils.license_trove_classifier import __TO_SPDX_MAP as TO_SPDX_MAP -class Pipenv(Enum): - """See https://github.com/CycloneDX/cyclonedx-property-taxonomy/blob/main/cdx/pipenv.md""" +@ddt +class TestLicenseTroveClassifier(TestCase): - PackageCategory = 'cdx:pipenv:package:category' + @named_data(*TO_SPDX_MAP.items()) + def test_map_is_known_id(self, mapped: str) -> None: + self.assertTrue(is_supported_id(mapped)) diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py index 308d97e7..c2926fb2 100644 --- a/tests/integration/__init__.py +++ b/tests/integration/__init__.py @@ -1,5 +1,3 @@ -# encoding: utf-8 - # This file is part of CycloneDX Python Lib # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/tests/integration/test_can_call_module.py b/tests/integration/test_can_call_module.py deleted file mode 100644 index b9c19047..00000000 --- a/tests/integration/test_can_call_module.py +++ /dev/null @@ -1,42 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -import subprocess # nosec B404 -import sys -from unittest import TestCase - -import cyclonedx_py - - -class TestCli(TestCase): - - def test_callable_as_module(self) -> None: - args = [sys.executable, '-m', cyclonedx_py.__name__, '--help'] - - # Test whether the call passed, is fair enough for now. - # Additional tests may come later, to check output etc. - ran = subprocess.run( # nosec B603 - args, - stdout=subprocess.PIPE, stderr=subprocess.PIPE, - shell=False - ) - - self.assertEqual(0, ran.returncode, msg='subprocess returned unexpected non-zero\n' - f'out: {ran.stdout}\n' - f'err: {ran.stderr}') diff --git a/tests/integration/test_cli.py b/tests/integration/test_cli.py new file mode 100644 index 00000000..410bebb0 --- /dev/null +++ b/tests/integration/test_cli.py @@ -0,0 +1,35 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +from subprocess import run # nosec:B404 +from sys import executable +from unittest import TestCase + +from cyclonedx_py import __version__ + + +class TestPipenv(TestCase): + + def test_call_as_module(self) -> None: + # show that this thing is callable as a module + # show that the version is the one expected + res = run( # nosec:B603 + (executable, '-m', 'cyclonedx_py', '--version'), + capture_output=True, encoding='utf8', shell=False) + self.assertEqual(0, res.returncode, '\n'.join((res.stdout, res.stderr))) + self.assertIn(__version__, res.stdout) diff --git a/tests/integration/test_cli_environment.py b/tests/integration/test_cli_environment.py new file mode 100644 index 00000000..2ee1c913 --- /dev/null +++ b/tests/integration/test_cli_environment.py @@ -0,0 +1,199 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + +import random +from contextlib import redirect_stderr, redirect_stdout +from glob import glob +from io import StringIO +from os import name as os_name +from os.path import basename, dirname, join +from subprocess import run # nosec:B404 +from sys import executable +from typing import Any, Generator +from unittest import TestCase, skipIf + +from cyclonedx.schema import OutputFormat, SchemaVersion +from ddt import ddt, named_data + +from cyclonedx_py._internal.cli import run as run_cli +from tests import INFILES_DIRECTORY, INIT_TESTBEDS, SUPPORTED_OF_SV, SnapshotMixin, make_comparable + +initfiles = glob(join(INFILES_DIRECTORY, 'environment', '*', 'init.py')) +test_data = tuple( + (f'{basename(projectdir)}-{sv.name}-{of.name}', projectdir, sv, of) + for projectdir in map(dirname, initfiles) + for of, sv in SUPPORTED_OF_SV +) + + +def test_data_file_filter(s: str) -> Generator[Any, None, None]: + return ((n, d, sv, of) for n, d, sv, of in test_data if s in n) + + +@ddt +class TestCliEnvironment(TestCase, SnapshotMixin): + + @classmethod + def __setup_testbeds_init(cls) -> None: + for initfile in initfiles: + print('setup init testbed:', initfile) + res = run((executable, initfile), + capture_output=True, encoding='utf8', errors='replace', shell=False) # nosec:B603 + if res.returncode != 0: + raise RuntimeError( + f'failed init: {initfile}\nstdout: {res.stdout}\nstderr: {res.stderr}\n') + + @classmethod + def setUpClass(cls) -> None: + if INIT_TESTBEDS: + cls.__setup_testbeds_init() + + @named_data( + ('does-not-exist', 'something-that-must-not-exist.testing', 'No such file or directory'), + ('no-env', join(INFILES_DIRECTORY, 'environment', 'broken-env'), 'Failed to find python in directory'), + ) + def test_fails_with_python_not_found(self, wrong_python: str, expected_error: str) -> None: + _, _, sv, of = random.choice(test_data) # nosec B311 + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'environment', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--outfile=-', + wrong_python]) + err = err.getvalue() + out = out.getvalue() + self.assertNotEqual(0, res, err) + self.assertIn(expected_error, err) + + @named_data( + ('exit-non-zero', join(INFILES_DIRECTORY, 'environment', 'broken-env', 'non-zero.py'), 'Fail fetching `path`'), + ('no-json', join(INFILES_DIRECTORY, 'environment', 'broken-env', 'broken-json.py'), 'JSONDecodeError'), + ) + @skipIf(os_name == 'nt', 'cannot run on win') + def test_fails_with_python_unexpected(self, wrong_python: str, expected_error: str) -> None: + _, _, sv, of = random.choice(test_data) # nosec B311 + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'environment', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--outfile=-', + wrong_python]) + err = err.getvalue() + out = out.getvalue() + self.assertNotEqual(0, res, err) + self.assertIn(expected_error, err) + + def test_with_pyproject_not_found(self) -> None: + _, projectdir, sv, of = random.choice(test_data) # nosec B311 + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'environment', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--outfile=-', + '--pyproject=something-that-must-not-exist.testing', + projectdir + ]) + err = err.getvalue() + out = out.getvalue() + self.assertNotEqual(0, res, err) + self.assertIn('Could not open pyproject file: something-that-must-not-exist.testing', err) + + def test_with_current_python(self) -> None: + sv = SchemaVersion.V1_5 + of = random.choice((OutputFormat.XML, OutputFormat.JSON)) # nosec B311 + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'environment', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + # no project dir -> search in current python + ]) + err = err.getvalue() + sbom1 = out.getvalue() + self.assertEqual(0, res, err) + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'environment', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + executable # explicitly current python + ]) + err = err.getvalue() + sbom2 = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqual( + make_comparable(sbom1, of), + make_comparable(sbom2, of) + ) + + @named_data(*test_data) + def test_with_file_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'environment', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + f'--pyproject={join(projectdir, "pyproject.toml")}', + join(projectdir, '.venv')]) + err = err.getvalue() + out = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqualSnapshot(out, 'venv', projectdir, sv, of) + + def assertEqualSnapshot(self, actual: str, # noqa:N802 + purpose: str, + projectdir: str, + sv: SchemaVersion, + of: OutputFormat + ) -> None: + super().assertEqualSnapshot( + make_comparable(actual, of), + join('environment', f'{purpose}_{basename(projectdir)}_{sv.to_version()}.{of.name.lower()}') + ) diff --git a/tests/integration/test_cli_pipenv.py b/tests/integration/test_cli_pipenv.py new file mode 100644 index 00000000..adc98f51 --- /dev/null +++ b/tests/integration/test_cli_pipenv.py @@ -0,0 +1,177 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +import random +from contextlib import redirect_stderr, redirect_stdout +from glob import glob +from io import StringIO +from os.path import basename, dirname, join +from typing import Any, Generator +from unittest import TestCase + +from cyclonedx.schema import OutputFormat, SchemaVersion +from ddt import ddt, named_data + +from cyclonedx_py._internal.cli import run as run_cli +from tests import INFILES_DIRECTORY, SUPPORTED_OF_SV, SnapshotMixin, make_comparable + +lockfiles = glob(join(INFILES_DIRECTORY, 'pipenv', '*', 'Pipfile.lock')) +projectdirs = list(dirname(lockfile) for lockfile in lockfiles) + +test_data = tuple( + (f'{basename(projectdir)}-{sv.name}-{of.name}', projectdir, sv, of) + for projectdir in projectdirs + for of, sv in SUPPORTED_OF_SV +) + + +def test_data_file_filter(s: str) -> Generator[Any, None, None]: + return ((n, d, sv, of) for n, d, sv, of in test_data if s in n) + + +@ddt +class TestCliPipenv(TestCase, SnapshotMixin): + + def test_fails_with_dir_not_found(self) -> None: + _, projectdir, sv, of = random.choice(test_data) # nosec B311 + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'pipenv', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--outfile=-', + 'something-that-must-not-exist.testing']) + err = err.getvalue() + out = out.getvalue() + self.assertNotEqual(0, res, err) + self.assertIn('Could not open lock file: something-that-must-not-exist.testing', err) + + def test_with_pyproject_not_found(self) -> None: + _, projectdir, sv, of = random.choice(test_data) # nosec B311 + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'pipenv', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--outfile=-', + '--pyproject=something-that-must-not-exist.testing', + projectdir + ]) + err = err.getvalue() + out = out.getvalue() + self.assertNotEqual(0, res, err) + self.assertIn('Could not open pyproject file: something-that-must-not-exist.testing', err) + + @named_data(*test_data) + def test_with_file_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'pipenv', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + f'--pyproject={join(projectdir, "pyproject.toml")}', + projectdir]) + err = err.getvalue() + out = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqualSnapshot(out, 'file', projectdir, sv, of) + + @named_data(*test_data_file_filter('category-deps')) + def test_with_categories_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'pipenv', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + '--categories', 'categoryB,groupA packages,dev-packages', + projectdir]) + err = err.getvalue() + out = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqualSnapshot(out, 'some-categories', projectdir, sv, of) + + @named_data(*test_data_file_filter('default-and-dev')) + def test_with_dev_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'pipenv', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + '--dev', + projectdir]) + err = err.getvalue() + out = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqualSnapshot(out, 'with-dev', projectdir, sv, of) + + @named_data(*test_data_file_filter('private-packages')) + def test_with_pypi_mirror_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'pipenv', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + '--pypi-mirror', 'https://pypy-mirror.testing.acme.org/simple', + projectdir]) + err = err.getvalue() + out = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqualSnapshot(out, 'pypi-mirror', projectdir, sv, of) + + def assertEqualSnapshot(self, actual: str, # noqa:N802 + purpose: str, + projectdir: str, + sv: SchemaVersion, + of: OutputFormat + ) -> None: + super().assertEqualSnapshot( + make_comparable(actual, of), + join('pipenv', f'{purpose}_{basename(projectdir)}_{sv.to_version()}.{of.name.lower()}') + ) diff --git a/tests/integration/test_cli_poetry.py b/tests/integration/test_cli_poetry.py new file mode 100644 index 00000000..05b43513 --- /dev/null +++ b/tests/integration/test_cli_poetry.py @@ -0,0 +1,228 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +import random +from contextlib import redirect_stderr, redirect_stdout +from glob import glob +from io import StringIO +from os.path import basename, dirname, join +from typing import Any, Generator +from unittest import TestCase + +from cyclonedx.schema import OutputFormat, SchemaVersion +from ddt import ddt, named_data + +from cyclonedx_py._internal.cli import run as run_cli +from tests import INFILES_DIRECTORY, SUPPORTED_OF_SV, SnapshotMixin, make_comparable + +lockfiles = glob(join(INFILES_DIRECTORY, 'poetry', '*', '*', 'poetry.lock')) +projectdirs = list(dirname(lockfile) for lockfile in lockfiles) + +test_data = tuple( + (f'{basename(dirname(projectdir))}-{basename(projectdir)}-{sv.name}-{of.name}', projectdir, sv, of) + for projectdir in projectdirs + for of, sv in SUPPORTED_OF_SV +) + + +def test_data_file_filter(s: str) -> Generator[Any, None, None]: + return ((n, d, sv, of) for n, d, sv, of in test_data if s in n) + + +@ddt +class TestCliPoetry(TestCase, SnapshotMixin): + + def test_fails_with_dir_not_found(self) -> None: + _, projectdir, sv, of = random.choice(test_data) # nosec B311 + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'poetry', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--outfile=-', + 'something-that-must-not-exist.testing']) + err = err.getvalue() + out = out.getvalue() + self.assertNotEqual(0, res, err) + self.assertIn('Could not open pyproject file: something-that-must-not-exist.testing', err) + + def test_fails_with_groups_not_found(self) -> None: + projectdir = random.choice(projectdirs) # nosec B311 + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'poetry', + '-vvv', + '--with', 'MNE-with-A', + '--with', 'MNE-with-B,MNE-with-C', + '--without', 'MNE-without-A', + '--without', 'MNE-without-B,MNE-without-C', + '--only', 'MNE-only-A', + '--only', 'MNE-only-B,MNE-only-C', + projectdir]) + err = err.getvalue() + out = out.getvalue() + self.assertNotEqual(0, res, err) + self.assertIn('Group(s) not found:' + " 'MNE-only-A' (via only)," + " 'MNE-only-B' (via only)," + " 'MNE-only-C' (via only)," + " 'MNE-with-A' (via with)," + " 'MNE-with-B' (via with)," + " 'MNE-with-C' (via with)," + " 'MNE-without-A' (via without)," + " 'MNE-without-B' (via without)," + " 'MNE-without-C' (via without)", err) + + def test_fails_with_extras_not_found(self) -> None: + projectdir = random.choice(projectdirs) # nosec B311 + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'poetry', + '-vvv', + '-E', 'MNE-extra-C,MNE-extra-B', + '--extras', 'MNE-extra-A', + projectdir]) + err = err.getvalue() + out = out.getvalue() + self.assertNotEqual(0, res, err) + self.assertIn('Extra(s) [' + 'MNE-extra-A,' + 'MNE-extra-B,' + 'MNE-extra-C' + '] not specified', err) + + @named_data(*test_data) + def test_with_file_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'poetry', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + projectdir]) + err = err.getvalue() + out = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqualSnapshot(out, basename(dirname(projectdir)), projectdir, sv, of) + + @named_data(*test_data_file_filter('group-deps')) + def test_with_groups_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'poetry', + '-vvv', + '--with', 'groupA', + '--without', 'groupB,dev', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + projectdir]) + err = err.getvalue() + out = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqualSnapshot(out, 'some-groups', projectdir, sv, of) + + @named_data(*test_data_file_filter('group-deps')) + def test_only_groups_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'poetry', + '-vvv', + '--only', 'groupB', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + projectdir]) + err = err.getvalue() + out = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqualSnapshot(out, 'only-groups', projectdir, sv, of) + + @named_data(*test_data_file_filter('group-deps')) + def test_nodev_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'poetry', + '-vvv', + '--no-dev', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + projectdir]) + err = err.getvalue() + out = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqualSnapshot(out, 'no-dev', projectdir, sv, of) + + @named_data(*test_data_file_filter('with-extras')) + def test_with_extras_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'poetry', + '-vvv', + '-E', 'my-extra', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + projectdir]) + err = err.getvalue() + out = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqualSnapshot(out, 'some-extras', projectdir, sv, of) + + def assertEqualSnapshot(self, actual: str, # noqa:N802 + purpose: str, + projectdir: str, + sv: SchemaVersion, + of: OutputFormat + ) -> None: # noqa:N802 + super().assertEqualSnapshot( + make_comparable(actual, of), + join('poetry', f'{purpose}_{basename(projectdir)}_{sv.to_version()}.{of.name.lower()}') + ) diff --git a/tests/integration/test_cli_requirements.py b/tests/integration/test_cli_requirements.py new file mode 100644 index 00000000..36b89f2a --- /dev/null +++ b/tests/integration/test_cli_requirements.py @@ -0,0 +1,146 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +import os +import random +from contextlib import redirect_stderr, redirect_stdout +from glob import glob +from io import StringIO, TextIOWrapper +from os.path import basename, join, splitext +from typing import Any, Tuple +from unittest import TestCase +from unittest.mock import patch + +from cyclonedx.schema import OutputFormat, SchemaVersion +from ddt import ddt, named_data + +from cyclonedx_py._internal.cli import run as run_cli +from tests import INFILES_DIRECTORY, SUPPORTED_OF_SV, SnapshotMixin, make_comparable + +infiles = glob(join(INFILES_DIRECTORY, 'requirements', '*.txt*')) + +pyproject_file = join(INFILES_DIRECTORY, 'requirements', 'pyproject.toml') + + +test_data = tuple( + (f'{splitext(basename(infile))[0]}-{sv.name}-{of.name}', infile, sv, of) + for infile in infiles + for of, sv in SUPPORTED_OF_SV +) + +if os.name == 'nt': + def test_data_os_filter(data: Any) -> bool: + return True +else: + def test_data_os_filter(data: Tuple[Any, str, Any, Any]) -> bool: + # skip windows encoded files on non-windows + return '.cp125' not in data[1] + + +@ddt +class TestCliRequirements(TestCase, SnapshotMixin): + + def test_with_file_not_found(self) -> None: + _, infile, sv, of = random.choice(test_data) # nosec B311 + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'requirements', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--outfile=-', + 'something-that-must-not-exist.testing']) + err = err.getvalue() + out = out.getvalue() + self.assertNotEqual(0, res, err) + self.assertIn('Could not open requirements file: something-that-must-not-exist.testing', err) + + def test_with_pyproject_not_found(self) -> None: + _, infile, sv, of = random.choice(test_data) # nosec B311 + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'requirements', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--outfile=-', + '--pyproject=something-that-must-not-exist.testing', + infile + ]) + err = err.getvalue() + out = out.getvalue() + self.assertNotEqual(0, res, err) + self.assertIn('Could not open pyproject file: something-that-must-not-exist.testing', err) + + @named_data(*filter(test_data_os_filter, test_data)) + def test_with_file_as_expected(self, infile: str, sv: SchemaVersion, of: OutputFormat) -> None: + with StringIO() as err, StringIO() as out: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + res = run_cli(argv=[ + 'requirements', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + f'--pyproject={pyproject_file}', + infile]) + err = err.getvalue() + out = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqualSnapshot(out, 'file', infile, sv, of) + + @named_data(*test_data) + def test_with_stream_as_expected(self, infile: str, sv: SchemaVersion, of: OutputFormat) -> None: + with StringIO() as err, StringIO() as out, open(infile, 'rb') as inp: + err.name = '' + out.name = '' + with redirect_stderr(err), redirect_stdout(out): + with patch('sys.stdin', TextIOWrapper(inp)): + res = run_cli(argv=[ + 'requirements', + '-vvv', + f'--sv={sv.to_version()}', + f'--of={of.name}', + '--output-reproducible', + '--outfile=-', + # no pyproject for this case + '-']) + err = err.getvalue() + out = out.getvalue() + self.assertEqual(0, res, err) + self.assertEqualSnapshot(out, 'stream', infile, sv, of) + + def assertEqualSnapshot(self, actual: str, # noqa:N802 + purpose: str, + reqfile: str, + sv: SchemaVersion, + of: OutputFormat + ) -> None: + super().assertEqualSnapshot( + make_comparable(actual, of), + join('requirements', f'{purpose}_{splitext(basename(reqfile))[0]}_{sv.to_version()}.{of.name.lower()}') + ) diff --git a/tests/test_parser_conda.py b/tests/test_parser_conda.py deleted file mode 100644 index a1a01d63..00000000 --- a/tests/test_parser_conda.py +++ /dev/null @@ -1,161 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -import os -import re -from unittest import TestCase - -from cyclonedx.model import HashAlgorithm, HashType - -from cyclonedx_py._internal.parser.conda import CondaListExplicitParser, CondaListJsonParser - - -class TestCondaParser(TestCase): - - def test_conda_list_json(self) -> None: - conda_list_output_file = os.path.join(os.path.dirname(__file__), - 'fixtures/conda-list-output.json') - - with (open(conda_list_output_file, 'r')) as conda_list_output_fh: - parser = CondaListJsonParser(conda_data=conda_list_output_fh.read()) - - self.assertEqual(34, parser.component_count()) - components = parser.get_components() - - c_idna = next(filter(lambda c: c.name == 'idna', components), None) - self.assertIsNotNone(c_idna) - self.assertEqual('idna', c_idna.name) - self.assertNotEqual(c_idna.purl.to_string(), c_idna.bom_ref.value) - self.assertEqual('2.10', c_idna.version) - self.assertEqual('pkg:conda/idna@2.10?build=pyhd3eb1b0_0&channel=pkgs/main&subdir=noarch', - c_idna.purl.to_string()) - self.assertEqual(1, len(c_idna.external_references), f'{c_idna.external_references}') - self.assertEqual(0, len(c_idna.external_references.pop().hashes)) - self.assertEqual(0, len(c_idna.hashes), f'{c_idna.hashes}') - - def test_conda_list_json_mixed(self) -> None: - # conda environment which has both conda and pypi packages - # see https://github.com/CycloneDX/cyclonedx-python/issues/462 - conda_list_output_file = os.path.join(os.path.dirname(__file__), - 'fixtures/conda-list-issue462.json') - - with (open(conda_list_output_file, 'r')) as conda_list_output_fh: - parser = CondaListJsonParser(conda_data=conda_list_output_fh.read()) - - self.assertEqual(25, parser.component_count()) - components = parser.get_components() - - c_libffi = next(filter(lambda c: c.name == 'libffi', components), None) - self.assertIsNotNone(c_libffi) - self.assertEqual('libffi', c_libffi.name) - self.assertEqual('3.4.2', c_libffi.version) - self.assertEqual('pkg:conda/libffi@3.4.2?build=h6a678d5_6&channel=pkgs/main&subdir=linux-64', - c_libffi.purl.to_string()) - - c_seawater = next(filter(lambda c: c.name == 'seawater', components), None) - self.assertIsNotNone(c_seawater) - self.assertEqual('seawater', c_seawater.name) - self.assertEqual('3.3.4', c_seawater.version) - self.assertEqual('pkg:pypi/seawater@3.3.4', - c_seawater.purl.to_string()) - - def test_conda_list_json_use_purl_bom_ref(self) -> None: - conda_list_output_file = os.path.join(os.path.dirname(__file__), - 'fixtures/conda-list-output.json') - - with (open(conda_list_output_file, 'r')) as conda_list_output_fh: - parser = CondaListJsonParser(conda_data=conda_list_output_fh.read(), - use_purl_bom_ref=True) - - self.assertEqual(34, parser.component_count()) - components = parser.get_components() - - c_idna = next(filter(lambda c: c.name == 'idna', components), None) - self.assertIsNotNone(c_idna) - self.assertEqual('idna', c_idna.name) - self.assertEqual(c_idna.purl.to_string(), c_idna.bom_ref.value) - self.assertEqual('2.10', c_idna.version) - self.assertEqual('pkg:conda/idna@2.10?build=pyhd3eb1b0_0&channel=pkgs/main&subdir=noarch', - c_idna.purl.to_string()) - self.assertEqual(1, len(c_idna.external_references), f'{c_idna.external_references}') - self.assertEqual(0, len(c_idna.external_references.pop().hashes)) - self.assertEqual(0, len(c_idna.hashes), f'{c_idna.hashes}') - - def test_conda_list_explicit_md5(self) -> None: - conda_list_output_file = os.path.join(os.path.dirname(__file__), - 'fixtures/conda-list-explicit-md5.txt') - - with (open(conda_list_output_file, 'r')) as conda_list_output_fh: - parser = CondaListExplicitParser(conda_data=conda_list_output_fh.read()) - - self.assertEqual(34, parser.component_count()) - components = parser.get_components() - - c_idna = next(filter(lambda c: c.name == 'idna', components), None) - self.assertIsNotNone(c_idna) - self.assertEqual('idna', c_idna.name) - self.assertEqual('2.10', c_idna.version) - self.assertEqual('pkg:conda/idna@2.10?build=pyhd3eb1b0_0&channel=pkgs/main&subdir=noarch&type=tar.bz2', - c_idna.purl.to_string()) - self.assertEqual(1, len(c_idna.external_references), f'{c_idna.external_references}') - self.assertEqual(0, len(c_idna.external_references.pop().hashes)) - self.assertEqual(1, len(c_idna.hashes), f'{c_idna.hashes}') - hash: HashType = c_idna.hashes.pop() - self.assertEqual(HashAlgorithm.MD5, hash.alg) - self.assertEqual('153ff132f593ea80aae2eea61a629c92', hash.content) - - def test_conda_list_build_number_text(self) -> None: - conda_list_output_file = os.path.join(os.path.dirname(__file__), 'fixtures/conda-list-build-number-text.txt') - - with (open(conda_list_output_file, 'r')) as conda_list_output_fh: - parser = CondaListExplicitParser(conda_data=conda_list_output_fh.read()) - - self.assertEqual(39, parser.component_count()) - components = parser.get_components() - - c_libgcc_mutex = next(filter(lambda c: c.name == '_libgcc_mutex', components), None) - self.assertIsNotNone(c_libgcc_mutex) - self.assertEqual('_libgcc_mutex', c_libgcc_mutex.name) - self.assertEqual('0.1', c_libgcc_mutex.version) - self.assertEqual('pkg:conda/_libgcc_mutex@0.1?build=main&channel=pkgs/main&subdir=linux-64&type=conda', - c_libgcc_mutex.purl.to_string()) - self.assertEqual(0, len(c_libgcc_mutex.hashes), f'{c_libgcc_mutex.hashes}') - - c_pycparser = next(filter(lambda c: c.name == 'pycparser', components), None) - self.assertIsNotNone(c_pycparser) - self.assertEqual('pycparser', c_pycparser.name) - self.assertEqual('2.21', c_pycparser.version) - self.assertEqual('pkg:conda/pycparser@2.21?build=pyhd3eb1b0_0&channel=pkgs/main&subdir=noarch&type=conda', - c_pycparser.purl.to_string()) - self.assertEqual(0, len(c_pycparser.hashes), f'{c_pycparser.hashes}') - - c_openmp_mutex = next(filter(lambda c: c.name == '_openmp_mutex', components), None) - self.assertIsNotNone(c_openmp_mutex) - self.assertEqual('_openmp_mutex', c_openmp_mutex.name) - self.assertEqual('4.5', c_openmp_mutex.version) - self.assertEqual('pkg:conda/_openmp_mutex@4.5?build=1_gnu&channel=pkgs/main&subdir=linux-64&type=tar.bz2', - c_openmp_mutex.purl.to_string()) - self.assertEqual(0, len(c_openmp_mutex.hashes), f'{c_openmp_mutex.hashes}') - - def test_conda_list_malformed(self) -> None: - conda_list_output_file = os.path.join(os.path.dirname(__file__), 'fixtures/conda-list-broken.txt') - - with (open(conda_list_output_file, 'r')) as conda_list_output_fh: - with self.assertRaisesRegex(ValueError, re.compile(r'^unexpected format', re.IGNORECASE)): - CondaListExplicitParser(conda_data=conda_list_output_fh.read()) diff --git a/tests/test_parser_environment.py b/tests/test_parser_environment.py deleted file mode 100644 index 53b1fbe5..00000000 --- a/tests/test_parser_environment.py +++ /dev/null @@ -1,63 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -from unittest import TestCase - -from cyclonedx.model.license import DisjunctiveLicense - -from cyclonedx_py._internal.parser.environment import EnvironmentParser - - -class TestEnvironmentParser(TestCase): - - def test_simple(self) -> None: - """ - @todo This test is a vague as it will detect the unique environment where tests are being executed - - so is this valid? - - :return: - """ - parser = EnvironmentParser() - self.assertGreater(parser.component_count(), 1) - - # We can only be sure that tox is in the environment, for example as we use tox to run tests - c_tox = next(filter(lambda c: c.name == 'tox', parser.get_components()), None) - self.assertIsNotNone(c_tox) - self.assertNotEqual(c_tox.purl.to_string(), c_tox.bom_ref.value) - self.assertIsNotNone(c_tox.licenses) - self.assertEqual(len(c_tox.licenses), 1) - self.assertEqual({DisjunctiveLicense(id="MIT")}, c_tox.licenses) - - def test_simple_use_purl_bom_ref(self) -> None: - """ - @todo This test is a vague as it will detect the unique environment where tests are being executed - - so is this valid? - - :return: - """ - parser = EnvironmentParser(use_purl_bom_ref=True) - self.assertGreater(parser.component_count(), 1) - - # We can only be sure that tox is in the environment, for example as we use tox to run tests - c_tox = next(filter(lambda c: c.name == 'tox', parser.get_components()), None) - self.assertIsNotNone(c_tox) - self.assertEqual(c_tox.purl.to_string(), c_tox.bom_ref.value) - self.assertIsNotNone(c_tox.licenses) - self.assertEqual(len(c_tox.licenses), 1) - self.assertEqual({DisjunctiveLicense(id="MIT")}, c_tox.licenses) diff --git a/tests/test_parser_pipenv.py b/tests/test_parser_pipenv.py deleted file mode 100644 index ef907d10..00000000 --- a/tests/test_parser_pipenv.py +++ /dev/null @@ -1,120 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -import os -from unittest import TestCase - -from cyclonedx_py._internal.parser.pipenv import PipEnvFileParser - - -class TestPipEnvParser(TestCase): - - def test_simple(self) -> None: - tests_pipfile_lock = os.path.join(os.path.dirname(__file__), 'fixtures/pipfile-lock-simple.txt') - - parser = PipEnvFileParser(pipenv_lock_filename=tests_pipfile_lock) - self.assertEqual(2, parser.component_count()) - - c_toml = next(filter(lambda c: c.name == 'toml', parser.get_components()), None) - self.assertIsNotNone(c_toml) - self.assertEqual('toml', c_toml.name) - self.assertNotEqual(c_toml.purl.to_string(), c_toml.bom_ref.value) - self.assertEqual('0.10.2', c_toml.version) - self.assertEqual(2, len(c_toml.external_references), f'{c_toml.external_references}') - self.assertEqual(1, len(c_toml.external_references.pop().hashes)) - c_property = next(filter(lambda p: p.name == 'cdx:pipenv:package:category', c_toml.properties), None) - self.assertIsNotNone(c_property) - self.assertEqual('default', c_property.value) - - c_flake8 = next(filter(lambda c: c.name == 'flake8', parser.get_components()), None) - self.assertIsNotNone(c_flake8) - self.assertEqual('flake8', c_flake8.name) - self.assertNotEqual(c_flake8.purl.to_string(), c_flake8.bom_ref.value) - self.assertEqual('3.7.9', c_flake8.version) - self.assertEqual(2, len(c_flake8.external_references), f'{c_flake8.external_references}') - self.assertEqual(1, len(c_flake8.external_references.pop().hashes)) - c_property = next(filter(lambda p: p.name == 'cdx:pipenv:package:category', c_flake8.properties), None) - self.assertIsNotNone(c_property) - self.assertEqual('develop', c_property.value) - - def test_simple_use_purl_bom_ref(self) -> None: - tests_pipfile_lock = os.path.join(os.path.dirname(__file__), 'fixtures/pipfile-lock-simple.txt') - - parser = PipEnvFileParser(pipenv_lock_filename=tests_pipfile_lock, - use_purl_bom_ref=True) - self.assertEqual(2, parser.component_count()) - - c_toml = next(filter(lambda c: c.name == 'toml', parser.get_components()), None) - self.assertIsNotNone(c_toml) - self.assertEqual('toml', c_toml.name) - self.assertEqual(c_toml.purl.to_string(), c_toml.bom_ref.value) - self.assertEqual('0.10.2', c_toml.version) - self.assertEqual(2, len(c_toml.external_references), f'{c_toml.external_references}') - self.assertEqual(1, len(c_toml.external_references.pop().hashes)) - c_property = next(filter(lambda p: p.name == 'cdx:pipenv:package:category', c_toml.properties), None) - self.assertIsNotNone(c_property) - self.assertEqual('default', c_property.value) - - c_flake8 = next(filter(lambda c: c.name == 'flake8', parser.get_components()), None) - self.assertIsNotNone(c_flake8) - self.assertEqual('flake8', c_flake8.name) - self.assertEqual(c_flake8.purl.to_string(), c_flake8.bom_ref.value) - self.assertEqual('3.7.9', c_flake8.version) - self.assertEqual(2, len(c_flake8.external_references), f'{c_flake8.external_references}') - self.assertEqual(1, len(c_flake8.external_references.pop().hashes)) - c_property = next(filter(lambda p: p.name == 'cdx:pipenv:package:category', c_flake8.properties), None) - self.assertIsNotNone(c_property) - self.assertEqual('develop', c_property.value) - - def test_with_multiple_and_no_index(self) -> None: - tests_pipfile_lock = os.path.join(os.path.dirname(__file__), 'fixtures/pipfile-lock-no-index-example.txt') - - parser = PipEnvFileParser(pipenv_lock_filename=tests_pipfile_lock) - self.assertEqual(3, parser.component_count()) - - c_anyio = next(filter(lambda c: c.name == 'anyio', parser.get_components()), None) - self.assertIsNotNone(c_anyio) - self.assertEqual('anyio', c_anyio.name) - self.assertEqual('3.3.3', c_anyio.version) - self.assertEqual(2, len(c_anyio.external_references), f'{c_anyio.external_references}') - self.assertEqual(1, len(c_anyio.external_references.pop().hashes)) - c_property = next(filter(lambda p: p.name == 'cdx:pipenv:package:category', c_anyio.properties), None) - self.assertIsNotNone(c_property) - self.assertEqual('default', c_property.value) - - c_toml = next(filter(lambda c: c.name == 'toml', parser.get_components()), None) - self.assertIsNotNone(c_toml) - self.assertEqual('toml', c_toml.name) - self.assertEqual('0.10.2', c_toml.version) - self.assertEqual(2, len(c_toml.external_references), f'{c_toml.external_references}') - self.assertEqual(1, len(c_toml.external_references.pop().hashes)) - c_property = next(filter(lambda p: p.name == 'cdx:pipenv:package:category', c_toml.properties), None) - self.assertIsNotNone(c_property) - self.assertEqual('default', c_property.value) - - c_flake8 = next(filter(lambda c: c.name == 'flake8', parser.get_components()), None) - self.assertIsNotNone(c_flake8) - self.assertEqual('flake8', c_flake8.name) - self.assertNotEqual(c_flake8.purl.to_string(), c_flake8.bom_ref.value) - self.assertEqual('3.7.9', c_flake8.version) - self.assertEqual(2, len(c_flake8.external_references), f'{c_flake8.external_references}') - self.assertEqual(1, len(c_flake8.external_references.pop().hashes)) - c_property = next(filter(lambda p: p.name == 'cdx:pipenv:package:category', c_flake8.properties), None) - self.assertIsNotNone(c_property) - self.assertEqual('develop', c_property.value) diff --git a/tests/test_parser_poetry.py b/tests/test_parser_poetry.py deleted file mode 100644 index 9e5ca447..00000000 --- a/tests/test_parser_poetry.py +++ /dev/null @@ -1,95 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -import os -from unittest import TestCase - -from ddt import data, ddt - -from cyclonedx_py._internal.parser.poetry import PoetryFileParser - - -@ddt -class TestPoetryParser(TestCase): - - @data('poetry-lock11-simple.txt', - 'poetry-lock20-simple.txt') - def test_simple(self, lock_file_name: str) -> None: - poetry_lock_filename = os.path.join(os.path.dirname(__file__), 'fixtures', lock_file_name) - parser = PoetryFileParser(poetry_lock_filename=poetry_lock_filename) - self.assertEqual(2, parser.component_count()) - - component = next(filter(lambda c: c.name == 'toml', parser.get_components()), None) - self.assertIsNotNone(component) - self.assertEqual('toml', component.name) - self.assertNotEqual(component.purl.to_string(), component.bom_ref.value) - self.assertEqual('0.10.2', component.version) - self.assertEqual(2, len(component.external_references), f'{component.external_references}') - c_property = next(filter(lambda p: p.name == 'cdx:poetry:package:group', component.properties), None) - self.assertIsNotNone(c_property) - self.assertEqual('main', c_property.value) - - component = next(filter(lambda c: c.name == 'ddt', parser.get_components()), None) - self.assertIsNotNone(component) - self.assertEqual('ddt', component.name) - self.assertNotEqual(component.purl.to_string(), component.bom_ref.value) - self.assertEqual('1.6.0', component.version) - self.assertEqual(2, len(component.external_references), f'{component.external_references}') - self.assertEqual(1, len(component.properties)) - c_property = next(filter(lambda p: p.name == 'cdx:poetry:package:group', component.properties), None) - self.assertIsNotNone(c_property) - self.assertEqual('dev', c_property.value) - - @data('poetry-lock11-simple.txt', - 'poetry-lock20-simple.txt') - def test_simple_purl_bom_ref(self, lock_file_name: str) -> None: - poetry_lock_filename = os.path.join(os.path.dirname(__file__), 'fixtures', lock_file_name) - parser = PoetryFileParser(poetry_lock_filename=poetry_lock_filename, - use_purl_bom_ref=True) - self.assertEqual(2, parser.component_count()) - - component = next(filter(lambda c: c.name == 'toml', parser.get_components()), None) - self.assertIsNotNone(component) - self.assertEqual('toml', component.name) - self.assertEqual(component.purl.to_string(), component.bom_ref.value) - self.assertEqual('0.10.2', component.version) - self.assertEqual(2, len(component.external_references), f'{component.external_references}') - c_property = next(filter(lambda p: p.name == 'cdx:poetry:package:group', component.properties), None) - self.assertIsNotNone(c_property) - self.assertEqual('main', c_property.value) - - component = next(filter(lambda c: c.name == 'ddt', parser.get_components()), None) - self.assertIsNotNone(component) - self.assertEqual('ddt', component.name) - self.assertEqual(component.purl.to_string(), component.bom_ref.value) - self.assertEqual('1.6.0', component.version) - self.assertEqual(2, len(component.external_references), f'{component.external_references}') - self.assertEqual(1, len(component.properties)) - c_property = next(filter(lambda p: p.name == 'cdx:poetry:package:group', component.properties), None) - self.assertIsNotNone(c_property) - self.assertEqual('dev', c_property.value) - - def test_regression_issue611(self) -> None: - # see https://github.com/CycloneDX/cyclonedx-python/issues/611 - lock_file_name = 'poetry-lock-regression-issue611.txt.bin' - poetry_lock_filename = os.path.join(os.path.dirname(__file__), 'fixtures', lock_file_name) - parser = PoetryFileParser(poetry_lock_filename=poetry_lock_filename, use_purl_bom_ref=True) - self.assertEqual(1, parser.component_count()) - component = next(filter(lambda c: c.name == 'pyhumps', parser.get_components()), None) - self.assertEqual('pyhumps', component.name) diff --git a/tests/test_parser_requirements.py b/tests/test_parser_requirements.py deleted file mode 100644 index 90ff4d0c..00000000 --- a/tests/test_parser_requirements.py +++ /dev/null @@ -1,188 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -import os -from unittest import TestCase - -from cyclonedx.model import HashAlgorithm, HashType -from cyclonedx.model.component import Component - -from cyclonedx_py._internal.parser.requirements import RequirementsFileParser, RequirementsParser - - -class TestRequirementsParser(TestCase): - - def test_simple(self) -> None: - with open(os.path.join(os.path.dirname(__file__), - 'fixtures/requirements-simple.txt')) as r: - parser = RequirementsParser( - requirements_content=r.read() - ) - components = parser.get_components() - - self.assertFalse(parser.has_warnings(), f'{parser.get_warnings()}') - self.assertEqual(1, len(components), f'{components}') - for component in components: - self.assertNotEqual(component.purl.to_string(), component.bom_ref.value) - - def test_simple_use_purl_bom_ref(self) -> None: - with open(os.path.join(os.path.dirname(__file__), - 'fixtures/requirements-simple.txt')) as r: - parser = RequirementsParser( - requirements_content=r.read(), - use_purl_bom_ref=True - ) - components = parser.get_components() - - self.assertFalse(parser.has_warnings(), f'{parser.get_warnings()}') - self.assertEqual(1, len(components), f'{components}') - for component in components: - self.assertEqual(component.purl.to_string(), component.bom_ref.value) - - def test_example_1(self) -> None: - with open(os.path.join(os.path.dirname(__file__), - 'fixtures/requirements-example-1.txt')) as r: - parser = RequirementsParser( - requirements_content=r.read() - ) - components = parser.get_components() - - self.assertFalse(parser.has_warnings(), f'{parser.get_warnings()}') - self.assertEqual(3, len(components), f'{components}') - for component in components: - self.assertNotEqual(component.purl.to_string(), component.bom_ref.value) - - def test_example_with_comments(self) -> None: - with open(os.path.join(os.path.dirname(__file__), - 'fixtures/requirements-with-comments.txt')) as r: - parser = RequirementsParser( - requirements_content=r.read() - ) - components = parser.get_components() - - self.assertFalse(parser.has_warnings(), f'{parser.get_warnings()}') - self.assertEqual(5, len(components), f'{components}') - for component in components: - self.assertNotEqual(component.purl.to_string(), component.bom_ref.value) - - def test_example_multilines_with_comments(self) -> None: - with open(os.path.join(os.path.dirname(__file__), - 'fixtures/requirements-multilines-with-comments.txt')) as r: - parser = RequirementsParser( - requirements_content=r.read() - ) - components = parser.get_components() - - self.assertFalse(parser.has_warnings(), f'{parser.get_warnings()}') - self.assertEqual(1, len(components), f'{components}') - for component in components: - self.assertNotEqual(component.purl.to_string(), component.bom_ref.value) - - c0: Component = components[0] - self.assertEqual(1, len(c0.hashes)) - hash: HashType = c0.hashes.pop() - self.assertEqual(HashAlgorithm.SHA_256, hash.alg) - self.assertNotEqual(0, len(hash.content), f'{hash.content}') - - def test_example_local_packages(self) -> None: - with open(os.path.join(os.path.dirname(__file__), - 'fixtures/requirements-local-and-remote-packages.txt')) as r: - parser = RequirementsParser( - requirements_content=r.read() - ) - components = parser.get_components() - - self.assertFalse(parser.has_warnings(), f'{parser.get_warnings()}') - self.assertEqual(6, len(components), f'{components}') - for component in components: - self.assertNotEqual(component.purl.to_string(), component.bom_ref.value) - - def test_example_local_and_nested_packages(self) -> None: - # RequirementsFileParser can parse nested requirements files, - # but RequirementsParser cannot. - parser = RequirementsFileParser( - requirements_file=os.path.join(os.path.dirname(__file__), - 'fixtures/requirements-local-and-remote-packages.txt') - ) - components = parser.get_components() - - self.assertFalse(parser.has_warnings(), f'{parser.get_warnings()}') - self.assertEqual(7, len(components), f'{components}') - for component in components: - self.assertNotEqual(component.purl.to_string(), component.bom_ref.value) - - def test_example_private_packages(self) -> None: - with open(os.path.join(os.path.dirname(__file__), - 'fixtures/requirements-private-packages.txt')) as r: - parser = RequirementsParser( - requirements_content=r.read() - ) - components = parser.get_components() - - self.assertFalse(parser.has_warnings(), f'{parser.get_warnings()}') - self.assertEqual(1, len(components), f'{components}') - for component in components: - self.assertNotEqual(component.purl.to_string(), component.bom_ref.value) - - def test_example_with_urls(self) -> None: - with open(os.path.join(os.path.dirname(__file__), - 'fixtures/requirements-with-urls.txt')) as r: - parser = RequirementsParser( - requirements_content=r.read() - ) - components = parser.get_components() - - self.assertFalse(parser.has_warnings(), f'{parser.get_warnings()}') - self.assertEqual(4, len(components), f'{components}') - for component in components: - self.assertNotEqual(component.purl.to_string(), component.bom_ref.value) - - def test_example_with_hashes(self) -> None: - with open(os.path.join(os.path.dirname(__file__), - 'fixtures/requirements-with-hashes.txt')) as r: - parser = RequirementsParser( - requirements_content=r.read() - ) - components = parser.get_components() - - self.assertFalse(parser.has_warnings(), f'{parser.get_warnings()}') - self.assertEqual(5, len(components), f'{components}') - for component in components: - self.assertNotEqual(component.purl.to_string(), component.bom_ref.value) - - c_idna = next(filter(lambda c: c.name == 'idna', components), None) - self.assertIsNotNone(c_idna) - self.assertEqual('idna', c_idna.name) - self.assertEqual(2, len(c_idna.hashes), f'{c_idna.hashes}') - hash: HashType = c_idna.hashes.pop() - self.assertEqual(HashAlgorithm.SHA_256, hash.alg) - self.assertNotEqual(0, len(hash.content), f'{hash.content}') - - def test_example_without_pinned_versions_warns(self) -> None: - with open(os.path.join(os.path.dirname(__file__), - 'fixtures/requirements-without-pinned-versions.txt')) as r: - parser = RequirementsParser( - requirements_content=r.read() - ) - components = parser.get_components() - - self.assertEqual(2, len(components), f'{components}') - self.assertTrue(parser.has_warnings(), f'{parser.get_warnings()}') - for component in components: - self.assertNotEqual(component.purl.to_string(), component.bom_ref.value) diff --git a/tests/test_utils_conda.py b/tests/test_utils_conda.py deleted file mode 100644 index bbeba882..00000000 --- a/tests/test_utils_conda.py +++ /dev/null @@ -1,187 +0,0 @@ -# encoding: utf-8 - -# This file is part of CycloneDX Python Lib -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) OWASP Foundation. All Rights Reserved. - -from unittest import TestCase - -from cyclonedx_py._internal.utils.conda import ( - CondaPackage, - parse_conda_json_to_conda_package, - parse_conda_list_str_to_conda_package, -) - - -class TestUtilsConda(TestCase): - - def test_parse_conda_json_no_hash(self) -> None: - cp: CondaPackage = parse_conda_json_to_conda_package( - conda_json_str='{"base_url": "https://repo.anaconda.com/pkgs/main","build_number": 1003,"build_string": ' - '"py39hecd8cb5_1003","channel": "pkgs/main","dist_name": "chardet-4.0.0-py39hecd8cb5_1003",' - '"name": "chardet","platform": "osx-64","version": "4.0.0"}' - ) - - self.assertIsInstance(cp, dict) - self.assertEqual('https://repo.anaconda.com/pkgs/main', cp['base_url']) - self.assertEqual(1003, cp['build_number']) - self.assertEqual('py39hecd8cb5_1003', cp['build_string']) - self.assertEqual('pkgs/main', cp['channel']) - self.assertEqual('chardet-4.0.0-py39hecd8cb5_1003', cp['dist_name']) - self.assertEqual('chardet', cp['name']) - self.assertEqual('osx-64', cp['platform']) - self.assertEqual('4.0.0', cp['version']) - self.assertIsNone(cp['md5_hash']) - - def test_parse_conda_list_str_no_hash(self) -> None: - cp: CondaPackage = parse_conda_list_str_to_conda_package( - conda_list_str='https://repo.anaconda.com/pkgs/main/osx-64/chardet-4.0.0-py39hecd8cb5_1003.conda' - ) - - self.assertIsInstance(cp, dict) - self.assertEqual('https://repo.anaconda.com/pkgs/main', cp['base_url']) - self.assertEqual(1003, cp['build_number']) - self.assertEqual('py39hecd8cb5_1003', cp['build_string']) - self.assertEqual('pkgs/main', cp['channel']) - self.assertEqual('chardet-4.0.0-py39hecd8cb5_1003', cp['dist_name']) - self.assertEqual('chardet', cp['name']) - self.assertEqual('osx-64', cp['platform']) - self.assertEqual('4.0.0', cp['version']) - self.assertEqual('conda', cp['package_format']) - self.assertIsNone(cp['md5_hash']) - - def test_parse_conda_list_str_with_hash_1(self) -> None: - cp: CondaPackage = parse_conda_list_str_to_conda_package( - conda_list_str='https://repo.anaconda.com/pkgs/main/noarch/tzdata-2021a-h52ac0ba_0.conda' - '#d42e4db918af84a470286e4c300604a3' - ) - - self.assertIsInstance(cp, dict) - self.assertEqual('https://repo.anaconda.com/pkgs/main', cp['base_url']) - self.assertEqual(0, cp['build_number']) - self.assertEqual('h52ac0ba_0', cp['build_string']) - self.assertEqual('pkgs/main', cp['channel']) - self.assertEqual('tzdata-2021a-h52ac0ba_0', cp['dist_name']) - self.assertEqual('tzdata', cp['name']) - self.assertEqual('noarch', cp['platform']) - self.assertEqual('2021a', cp['version'], ) - self.assertEqual('conda', cp['package_format']) - self.assertEqual('d42e4db918af84a470286e4c300604a3', cp['md5_hash']) - - def test_parse_conda_list_str_with_hash_2(self) -> None: - cp: CondaPackage = parse_conda_list_str_to_conda_package( - conda_list_str='https://repo.anaconda.com/pkgs/main/osx-64/ca-certificates-2021.7.5-hecd8cb5_1.conda' - '#c2d0ae65c08dacdcf86770b7b5bbb187' - ) - - self.assertIsInstance(cp, dict) - self.assertEqual('https://repo.anaconda.com/pkgs/main', cp['base_url']) - self.assertEqual(1, cp['build_number']) - self.assertEqual('hecd8cb5_1', cp['build_string']) - self.assertEqual('pkgs/main', cp['channel']) - self.assertEqual('ca-certificates-2021.7.5-hecd8cb5_1', cp['dist_name']) - self.assertEqual('ca-certificates', cp['name']) - self.assertEqual('osx-64', cp['platform']) - self.assertEqual('2021.7.5', cp['version'], ) - self.assertEqual('conda', cp['package_format']) - self.assertEqual('c2d0ae65c08dacdcf86770b7b5bbb187', cp['md5_hash']) - - def test_parse_conda_list_str_with_hash_3(self) -> None: - cp: CondaPackage = parse_conda_list_str_to_conda_package( - conda_list_str='https://repo.anaconda.com/pkgs/main/noarch/idna-2.10-pyhd3eb1b0_0.tar.bz2' - '#153ff132f593ea80aae2eea61a629c92' - ) - - self.assertIsInstance(cp, dict) - self.assertEqual('https://repo.anaconda.com/pkgs/main', cp['base_url']) - self.assertEqual(0, cp['build_number']) - self.assertEqual('pyhd3eb1b0_0', cp['build_string']) - self.assertEqual('pkgs/main', cp['channel']) - self.assertEqual('idna-2.10-pyhd3eb1b0_0', cp['dist_name']) - self.assertEqual('idna', cp['name']) - self.assertEqual('noarch', cp['platform']) - self.assertEqual('2.10', cp['version'], ) - self.assertEqual('tar.bz2', cp['package_format']) - self.assertEqual('153ff132f593ea80aae2eea61a629c92', cp['md5_hash']) - - def test_parse_conda_list_str_with_hash_4(self) -> None: - cp: CondaPackage = parse_conda_list_str_to_conda_package( - conda_list_str='https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2' - '#d7c89558ba9fa0495403155b64376d81' - ) - - self.assertIsInstance(cp, dict) - self.assertEqual('https://conda.anaconda.org/conda-forge', cp['base_url']) - self.assertIsNone(cp['build_number']) - self.assertEqual('conda_forge', cp['build_string']) - self.assertEqual('conda-forge', cp['channel']) - self.assertEqual('_libgcc_mutex-0.1-conda_forge', cp['dist_name']) - self.assertEqual('_libgcc_mutex', cp['name']) - self.assertEqual('linux-64', cp['platform']) - self.assertEqual('0.1', cp['version']) - self.assertEqual('tar.bz2', cp['package_format']) - self.assertEqual('d7c89558ba9fa0495403155b64376d81', cp['md5_hash']) - - def test_parse_conda_list_build_number(self) -> None: - cp: CondaPackage = parse_conda_list_str_to_conda_package( - conda_list_str='https://repo.anaconda.com/pkgs/main/osx-64/chardet-4.0.0-py39hecd8cb5_1003.conda' - ) - - self.assertIsInstance(cp, dict) - self.assertEqual('https://repo.anaconda.com/pkgs/main', cp['base_url']) - self.assertEqual(1003, cp['build_number']) - self.assertEqual('py39hecd8cb5_1003', cp['build_string']) - self.assertEqual('pkgs/main', cp['channel']) - self.assertEqual('chardet-4.0.0-py39hecd8cb5_1003', cp['dist_name']) - self.assertEqual('chardet', cp['name']) - self.assertEqual('osx-64', cp['platform']) - self.assertEqual('4.0.0', cp['version']) - self.assertEqual('conda', cp['package_format']) - self.assertIsNone(cp['md5_hash']) - - def test_parse_conda_list_no_build_number(self) -> None: - cp: CondaPackage = parse_conda_list_str_to_conda_package( - conda_list_str='https://repo.anaconda.com/pkgs/main/linux-64/_libgcc_mutex-0.1-main.conda' - ) - - self.assertIsInstance(cp, dict) - self.assertEqual('https://repo.anaconda.com/pkgs/main', cp['base_url']) - self.assertEqual(None, cp['build_number']) - self.assertEqual('main', cp['build_string']) - self.assertEqual('pkgs/main', cp['channel']) - self.assertEqual('_libgcc_mutex-0.1-main', cp['dist_name']) - self.assertEqual('_libgcc_mutex', cp['name']) - self.assertEqual('linux-64', cp['platform']) - self.assertEqual('0.1', cp['version']) - self.assertEqual('conda', cp['package_format']) - self.assertIsNone(cp['md5_hash']) - - def test_parse_conda_list_no_build_number2(self) -> None: - cp: CondaPackage = parse_conda_list_str_to_conda_package( - conda_list_str='https://repo.anaconda.com/pkgs/main/linux-64/_openmp_mutex-4.5-1_gnu.tar.bz2' - ) - - self.assertIsInstance(cp, dict) - self.assertEqual('https://repo.anaconda.com/pkgs/main', cp['base_url']) - self.assertEqual(None, cp['build_number']) - self.assertEqual('1_gnu', cp['build_string']) - self.assertEqual('pkgs/main', cp['channel']) - self.assertEqual('_openmp_mutex-4.5-1_gnu', cp['dist_name']) - self.assertEqual('_openmp_mutex', cp['name']) - self.assertEqual('linux-64', cp['platform']) - self.assertEqual('4.5', cp['version']) - self.assertEqual('tar.bz2', cp['package_format']) - self.assertIsNone(cp['md5_hash']) diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py new file mode 100644 index 00000000..c2926fb2 --- /dev/null +++ b/tests/unit/__init__.py @@ -0,0 +1,16 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py new file mode 100644 index 00000000..aff2ff06 --- /dev/null +++ b/tests/unit/test_cli.py @@ -0,0 +1,153 @@ +# This file is part of CycloneDX Python Lib +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + + +import logging +from io import StringIO +from os.path import join +from random import random +from typing import Any +from unittest import TestCase +from unittest.mock import Mock + +from cyclonedx.model.bom import Bom +from cyclonedx.model.component import Component, ComponentType +from cyclonedx.schema import OutputFormat, SchemaVersion +from ddt import ddt, named_data +from packageurl import PackageURL + +from cyclonedx_py._internal import BomBuilder +from cyclonedx_py._internal.cli import Command +from tests import SnapshotMixin + + +@ddt +class TestCli(TestCase, SnapshotMixin): + + @named_data(('normal', False), ('short', True)) + def test_purls_as_expected(self, short_purls: bool) -> None: + bom = Bom() + bom.metadata.component = Component( + type=ComponentType.APPLICATION, + name='my-app', + bom_ref='my-app', + purl=PackageURL('generic', 'testing', 'my-app', '1', {}) + ) + bom.components.add(Component( + type=ComponentType.LIBRARY, + name='my-lib-A', + bom_ref='my-lib-A', + purl=PackageURL('generic', 'testing', 'my-lib-A', '2', {'lol': 'rofl'}), + components=[Component( + type=ComponentType.APPLICATION, + name='my-lib-A-sub', + bom_ref='my-lib-A-sub', + purl=PackageURL('generic', 'testing', 'my-lib-A-sub', None, 'foo=bar', 'bazz') + )] + )) + bom.serial_number = None + bom.metadata.timestamp = None + bom.metadata.tools.clear() + + class MyBBC(BomBuilder): + def __new__(cls, *args: Any, **kwargs: Any) -> BomBuilder: + return Mock(spec=BomBuilder, return_value=bom) + + with StringIO() as logs, StringIO() as outs: + logs.name = '' + outs.name = '' + + command = Command( + logger=self.__make_fresh_logger(logs), + short_purls=short_purls, + schema_version=SchemaVersion.V1_4, + output_format=OutputFormat.JSON, + should_validate=True, + output_reproducible=True, + _bbc=MyBBC + ) + command(outfile=outs) + + out = outs.getvalue() + + self.assertEqualSnapshot(out, f'purls-{"short" if short_purls else "normal"}.json') + + def test_validation_throws_with_invalid(self) -> None: + class MyBBC(BomBuilder): + def __new__(cls, *args: Any, **kwargs: Any) -> BomBuilder: + return Mock(spec=BomBuilder, return_value=Mock(spec=Bom)) + + with StringIO() as logs, StringIO() as outs: + logs.name = '' + outs.name = '' + + command = Command( + logger=self.__make_fresh_logger(logs), + short_purls=False, + schema_version=SchemaVersion.V1_4, + output_format=OutputFormat.JSON, + output_reproducible=False, + should_validate=True, + _bbc=MyBBC + ) + command._make_output = Mock(return_value=r'["invalid to CDX schema"]') + + with self.assertRaisesRegex(ValueError, 'is schema-invalid'): + command(outfile=outs) + + def test_validation_skip_with_invalid(self) -> None: + class MyBBC(BomBuilder): + def __new__(cls, *args: Any, **kwargs: Any) -> BomBuilder: + return Mock(spec=BomBuilder, return_value=Mock(spec=Bom)) + + with StringIO() as logs, StringIO() as outs: + logs.name = '' + outs.name = '' + + command = Command( + logger=self.__make_fresh_logger(logs, logging.WARNING), + short_purls=False, + schema_version=SchemaVersion.V1_4, + output_format=OutputFormat.JSON, + should_validate=False, + output_reproducible=False, + _bbc=MyBBC + ) + command._make_output = Mock(return_value=r'["invalid to CDX schema"]') + + command(outfile=outs) + + log = logs.getvalue() + out = outs.getvalue() + + self.assertEqual(r'["invalid to CDX schema"]', out) + self.assertIn('WARNING: Validation skipped', log) + + def assertEqualSnapshot(self, actual: str, snapshot_name: str) -> None: # noqa: N802 + super().assertEqualSnapshot(actual, join('cli', snapshot_name)) + + @classmethod + def __make_fresh_logger(cls, logstream: StringIO, level: int = logging.NOTSET) -> logging.Logger: + logger = logging.getLogger(f'{cls.__qualname__}.{random()}') # nosec:B311 + map(logger.removeHandler, logger.handlers) + logger.level = level + logger.propagate = False + lh = logging.StreamHandler(logstream) + lh.setLevel(logger.level) + lh.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) + logger.addHandler(lh) + return logger diff --git a/tox.ini b/tox.ini index 8b55515b..2319fc5b 100644 --- a/tox.ini +++ b/tox.ini @@ -7,8 +7,8 @@ minversion = 4.0 envlist = flake8 - mypy-{locked,lowest} - py{311,310,39,38}-{locked,lowest} + mypy-{current,lowest} + py{311,310,39,38} bandit skip_missing_interpreters = True usedevelop = False @@ -22,12 +22,14 @@ allowlist_externals = poetry commands_pre = {envpython} --version poetry install --no-root -v - lowest: poetry run pip install -U -r deps.lowest.r poetry run pip freeze commands = poetry run coverage run --source=cyclonedx_py -m unittest discover -t . -s tests -v +setenv = + PYTHONHASHSEED=0 + CDX_TEST_RECREATE_SNAPSHOTS={env:CDX_TEST_RECREATE_SNAPSHOTS:} -[testenv:mypy{,-locked,-lowest}] +[testenv:mypy{,-current,-lowest}] skip_install = True commands = # mypy config is on own file: `.mypy.ini`