This is an automated email from the ASF dual-hosted git repository.

sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-atr-experiments.git


The following commit(s) were added to refs/heads/main by this push:
     new 081860b  Remove all of the SPDX code
081860b is described below

commit 081860bc9603449d8a9d4842178eda2c39711541
Author: Sean B. Palmer <[email protected]>
AuthorDate: Mon Mar 3 14:20:03 2025 +0200

    Remove all of the SPDX code
---
 atr/blueprints/secret/secret.py                    |   3 -
 atr/routes/package.py                              |   6 -
 atr/verify.py                                      | 103 -------
 atr/worker.py                                      |  17 --
 poetry.lock                                        | 308 +++++----------------
 pyproject.toml                                     |   1 -
 .../common/typing/dataclass_with_properties.pyi    |   9 -
 typestubs/spdx_tools/spdx/model/actor.pyi          |  33 ---
 typestubs/spdx_tools/spdx/model/document.pyi       |  62 -----
 .../spdx_tools/spdx/model/external_reference.pyi   |  22 --
 typestubs/spdx_tools/spdx/model/package.pyi        |  73 -----
 .../spdx_tools/spdx/model/package_purpose.pyi      |  15 -
 .../spdx/model/package_verification_code.pyi       |   7 -
 typestubs/spdx_tools/spdx/model/spdx_licensing.pyi |   9 -
 .../spdx/validation/document_validator.pyi         |   6 -
 .../spdx/validation/validation_message.pyi         |  24 --
 uv.lock                                            | 235 +++++-----------
 17 files changed, 135 insertions(+), 798 deletions(-)

diff --git a/atr/blueprints/secret/secret.py b/atr/blueprints/secret/secret.py
index 87f031f..aba14b3 100644
--- a/atr/blueprints/secret/secret.py
+++ b/atr/blueprints/secret/secret.py
@@ -50,9 +50,6 @@ from atr.db.service import get_pmcs
 from . import blueprint
 
 
-class FlashError(RuntimeError): ...
-
-
 @blueprint.route("/performance")
 async def secret_performance() -> str:
     """Display performance statistics for all routes."""
diff --git a/atr/routes/package.py b/atr/routes/package.py
index c2dbad3..e3cc6c6 100644
--- a/atr/routes/package.py
+++ b/atr/routes/package.py
@@ -603,12 +603,6 @@ async def task_verification_create(db_session: 
AsyncSession, package: Package) -
             task_args=["releases/" + package.artifact_sha3],
             package_sha3=package.artifact_sha3,
         ),
-        # Task(
-        #     status=TaskStatus.QUEUED,
-        #     task_type="generate_spdx_sbom",
-        #     task_args=["releases/" + package.artifact_sha3],
-        #     package_sha3=package.artifact_sha3,
-        # ),
         Task(
             status=TaskStatus.QUEUED,
             task_type="generate_cyclonedx_sbom",
diff --git a/atr/verify.py b/atr/verify.py
index bd65fd0..e03bea4 100644
--- a/atr/verify.py
+++ b/atr/verify.py
@@ -574,109 +574,6 @@ def sbom_cyclonedx_generate_unsafe(artifact_path: str) -> 
dict[str, Any]:
             }
 
 
-def sbom_spdx_generate(artifact_path: str) -> dict[str, Any]:
-    """Generate a SPDX SBOM for the given artifact."""
-    logger.info(f"Generating SPDX SBOM for {artifact_path}")
-    try:
-        return sbom_spdx_generate_unsafe(artifact_path)
-    except Exception as e:
-        logger.error(f"Failed to generate SPDX SBOM: {e}")
-        return {
-            "valid": False,
-            "message": f"Failed to generate SPDX SBOM: {e!s}",
-        }
-
-
-def sbom_spdx_generate_unsafe(artifact_path: str) -> dict[str, Any]:
-    """Generate a SPDX SBOM for the given artifact, raising potential 
exceptions."""
-    import os
-    from datetime import UTC, datetime
-    from tempfile import mkdtemp
-
-    from spdx_tools.common.spdx_licensing import spdx_licensing
-    from spdx_tools.spdx.model.actor import Actor, ActorType
-    from spdx_tools.spdx.model.document import CreationInfo, Document
-    from spdx_tools.spdx.model.package import Package
-    from spdx_tools.spdx.validation.document_validator import 
validate_full_spdx_document
-
-    # Create temporary directory for the SBOM
-    # Ideally we'll use the state directory for this
-    temp_dir = mkdtemp(prefix="atr_sbom_")
-    sbom_path = os.path.join(temp_dir, "sbom.spdx.json")
-
-    # Create minimal creation info
-    creation_info = CreationInfo(
-        spdx_version="SPDX-2.3",
-        spdx_id="SPDXRef-DOCUMENT",
-        name=f"SBOM for {os.path.basename(artifact_path)}",
-        data_license="CC0-1.0",
-        
document_namespace=f"https://apache.example.org/sbom/{os.path.basename(artifact_path)}",
-        creators=[Actor(ActorType.TOOL, "Apache-ATR", None)],
-        created=datetime.now(UTC),
-    )
-
-    document = Document(creation_info=creation_info)
-
-    # Create package information with Apache License 2.0
-    # The download_location must be a URL otherwise validation fails
-    apache_license = spdx_licensing.parse("Apache-2.0")
-    package = Package(
-        name=os.path.basename(artifact_path),
-        spdx_id="SPDXRef-Package",
-        download_location="https://apache.example.org/"; + 
os.path.basename(artifact_path),
-        version=None,
-        file_name=None,
-        supplier=None,
-        originator=None,
-        files_analyzed=True,
-        verification_code=None,
-        checksums=[],
-        homepage=None,
-        source_info=None,
-        license_concluded=apache_license,
-        license_info_from_files=[apache_license],
-        license_declared=apache_license,
-        license_comment=None,
-        copyright_text="Copyright The Apache Software Foundation",
-        summary=None,
-        description=None,
-        comment=None,
-        external_references=[],
-        attribution_texts=[],
-        primary_package_purpose=None,
-        release_date=None,
-        built_date=None,
-        valid_until_date=None,
-    )
-    document.packages = [package]
-
-    # Validate the SPDX SBOM document
-    validation_messages = validate_full_spdx_document(document)
-    if validation_messages:
-        validation_errors = [str(msg.validation_message) for msg in 
validation_messages]
-        return {
-            "valid": False,
-            "message": "SPDX SBOM validation failed",
-            "errors": validation_errors,
-        }
-
-    # Write SBOM to file
-    # Again, ideally we'd use the state directory for this
-    # write_file(document, sbom_path)
-
-    return {
-        "valid": True,
-        "message": "SPDX SBOM generation completed",
-        "spdx_version": creation_info.spdx_version,
-        "data_license": creation_info.data_license,
-        "sbom_created": creation_info.created.isoformat(),
-        "file_analyzed": artifact_path,
-        "sbom_path": sbom_path,
-        "packages": [package.name],
-        "license": "Apache-2.0",
-    }
-
-
 def license_header_strip_comments(content: bytes, file_ext: str) -> bytes:
     """Strip comment prefixes from the content based on the file extension."""
     if file_ext not in COMMENT_STYLES:
diff --git a/atr/worker.py b/atr/worker.py
index bebc728..41f7a79 100644
--- a/atr/worker.py
+++ b/atr/worker.py
@@ -267,22 +267,6 @@ def task_verify_rat_license(args: list[str]) -> tuple[str, 
str | None, tuple[Any
     return status, error, task_results
 
 
-def task_generate_spdx_sbom(args: list[str]) -> tuple[str, str | None, 
tuple[Any, ...]]:
-    """Process generate_spdx_sbom task to create an SPDX SBOM."""
-    # First argument should be the artifact path
-    artifact_path = args[0]
-
-    task_results = task_process_wrap(verify.sbom_spdx_generate(artifact_path))
-    logger.info(f"Generated SPDX SBOM for {artifact_path}")
-
-    # Check whether the generation was successful
-    result = task_results[0]
-    if not result.get("valid", False):
-        return "FAILED", result.get("message", "SBOM generation failed"), 
task_results
-
-    return "COMPLETED", None, task_results
-
-
 def task_generate_cyclonedx_sbom(args: list[str]) -> tuple[str, str | None, 
tuple[Any, ...]]:
     """Process generate_cyclonedx_sbom task to create a CycloneDX SBOM."""
     # First argument should be the artifact path
@@ -314,7 +298,6 @@ def task_process(task_id: int, task_type: str, task_args: 
str) -> None:
             "verify_signature": task_verify_signature,
             "verify_license_headers": task_verify_license_headers,
             "verify_rat_license": task_verify_rat_license,
-            # "generate_spdx_sbom": task_generate_spdx_sbom,
             "generate_cyclonedx_sbom": task_generate_cyclonedx_sbom,
         }
 
diff --git a/poetry.lock b/poetry.lock
index fd3750c..e586555 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -291,25 +291,6 @@ docs = ["cogapp", "furo", "myst-parser", "sphinx", 
"sphinx-notfound-page", "sphi
 tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest 
(>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
 tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"]
 
-[[package]]
-name = "beartype"
-version = "0.20.0"
-description = "Unbearably fast near-real-time hybrid runtime-static 
type-checking in pure Python."
-optional = false
-python-versions = ">=3.9"
-groups = ["main"]
-files = [
-    {file = "beartype-0.20.0-py3-none-any.whl", hash = 
"sha256:090d10e3540b3fca209a0ab5f1c15f9652a075da0a7249c2e6713011e9e5f6ef"},
-    {file = "beartype-0.20.0.tar.gz", hash = 
"sha256:599ecc86b88549bcb6d1af626f44d85ffbb9151ace5d7f9f3b493dce2ffee529"},
-]
-
-[package.extras]
-dev = ["autoapi (>=0.9.0)", "click", "coverage (>=5.5)", "equinox", 
"jax[cpu]", "jaxtyping", "langchain", "mypy (>=0.800)", "numba", "numpy", 
"pandera", "pydata-sphinx-theme (<=0.7.2)", "pygments", "pyright (>=1.1.370)", 
"pytest (>=4.0.0)", "sphinx", "sphinx (>=4.2.0,<6.0.0)", "sphinxext-opengraph 
(>=0.7.5)", "tox (>=3.20.1)", "typing-extensions (>=3.10.0.0)", "xarray"]
-doc-rtd = ["autoapi (>=0.9.0)", "pydata-sphinx-theme (<=0.7.2)", "sphinx 
(>=4.2.0,<6.0.0)", "sphinxext-opengraph (>=0.7.5)"]
-test = ["click", "coverage (>=5.5)", "equinox", "jax[cpu]", "jaxtyping", 
"langchain", "mypy (>=0.800)", "numba", "numpy", "pandera", "pygments", 
"pyright (>=1.1.370)", "pytest (>=4.0.0)", "sphinx", "tox (>=3.20.1)", 
"typing-extensions (>=3.10.0.0)", "xarray"]
-test-tox = ["click", "equinox", "jax[cpu]", "jaxtyping", "langchain", "mypy 
(>=0.800)", "numba", "numpy", "pandera", "pygments", "pyright (>=1.1.370)", 
"pytest (>=4.0.0)", "sphinx", "typing-extensions (>=3.10.0.0)", "xarray"]
-test-tox-coverage = ["coverage (>=5.5)"]
-
 [[package]]
 name = "blinker"
 version = "1.9.0"
@@ -337,18 +318,6 @@ files = [
 [package.dependencies]
 forbiddenfruit = ">=0.1.4"
 
-[[package]]
-name = "boolean-py"
-version = "4.0"
-description = "Define boolean algebras, create and parse boolean expressions 
and create custom boolean DSL."
-optional = false
-python-versions = "*"
-groups = ["main"]
-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 = "certifi"
 version = "2025.1.31"
@@ -586,43 +555,47 @@ markers = {main = "platform_system == \"Windows\"", test 
= "sys_platform == \"wi
 
 [[package]]
 name = "cryptography"
-version = "44.0.1"
+version = "44.0.2"
 description = "cryptography is a package which provides cryptographic recipes 
and primitives to Python developers."
 optional = false
 python-versions = "!=3.9.0,!=3.9.1,>=3.7"
 groups = ["main"]
 files = [
-    {file = "cryptography-44.0.1-cp37-abi3-macosx_10_9_universal2.whl", hash = 
"sha256:bf688f615c29bfe9dfc44312ca470989279f0e94bb9f631f85e3459af8efc009"},
-    {file = 
"cryptography-44.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
 hash = 
"sha256:dd7c7e2d71d908dc0f8d2027e1604102140d84b155e658c20e8ad1304317691f"},
-    {file = 
"cryptography-44.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", 
hash = 
"sha256:887143b9ff6bad2b7570da75a7fe8bbf5f65276365ac259a5d2d5147a73775f2"},
-    {file = "cryptography-44.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = 
"sha256:322eb03ecc62784536bc173f1483e76747aafeb69c8728df48537eb431cd1911"},
-    {file = 
"cryptography-44.0.1-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl",
 hash = 
"sha256:21377472ca4ada2906bc313168c9dc7b1d7ca417b63c1c3011d0c74b7de9ae69"},
-    {file = "cryptography-44.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = 
"sha256:df978682c1504fc93b3209de21aeabf2375cb1571d4e61907b3e7a2540e83026"},
-    {file = "cryptography-44.0.1-cp37-abi3-manylinux_2_34_aarch64.whl", hash = 
"sha256:eb3889330f2a4a148abead555399ec9a32b13b7c8ba969b72d8e500eb7ef84cd"},
-    {file = "cryptography-44.0.1-cp37-abi3-manylinux_2_34_x86_64.whl", hash = 
"sha256:8e6a85a93d0642bd774460a86513c5d9d80b5c002ca9693e63f6e540f1815ed0"},
-    {file = "cryptography-44.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = 
"sha256:6f76fdd6fd048576a04c5210d53aa04ca34d2ed63336d4abd306d0cbe298fddf"},
-    {file = "cryptography-44.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = 
"sha256:6c8acf6f3d1f47acb2248ec3ea261171a671f3d9428e34ad0357148d492c7864"},
-    {file = "cryptography-44.0.1-cp37-abi3-win32.whl", hash = 
"sha256:24979e9f2040c953a94bf3c6782e67795a4c260734e5264dceea65c8f4bae64a"},
-    {file = "cryptography-44.0.1-cp37-abi3-win_amd64.whl", hash = 
"sha256:fd0ee90072861e276b0ff08bd627abec29e32a53b2be44e41dbcdf87cbee2b00"},
-    {file = "cryptography-44.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = 
"sha256:a2d8a7045e1ab9b9f803f0d9531ead85f90c5f2859e653b61497228b18452008"},
-    {file = 
"cryptography-44.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
 hash = 
"sha256:b8272f257cf1cbd3f2e120f14c68bff2b6bdfcc157fafdee84a1b795efd72862"},
-    {file = 
"cryptography-44.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", 
hash = 
"sha256:1e8d181e90a777b63f3f0caa836844a1182f1f265687fac2115fcf245f5fbec3"},
-    {file = "cryptography-44.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = 
"sha256:436df4f203482f41aad60ed1813811ac4ab102765ecae7a2bbb1dbb66dcff5a7"},
-    {file = 
"cryptography-44.0.1-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl",
 hash = 
"sha256:4f422e8c6a28cf8b7f883eb790695d6d45b0c385a2583073f3cec434cc705e1a"},
-    {file = "cryptography-44.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = 
"sha256:72198e2b5925155497a5a3e8c216c7fb3e64c16ccee11f0e7da272fa93b35c4c"},
-    {file = "cryptography-44.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = 
"sha256:2a46a89ad3e6176223b632056f321bc7de36b9f9b93b2cc1cccf935a3849dc62"},
-    {file = "cryptography-44.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = 
"sha256:53f23339864b617a3dfc2b0ac8d5c432625c80014c25caac9082314e9de56f41"},
-    {file = "cryptography-44.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = 
"sha256:888fcc3fce0c888785a4876ca55f9f43787f4c5c1cc1e2e0da71ad481ff82c5b"},
-    {file = "cryptography-44.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = 
"sha256:00918d859aa4e57db8299607086f793fa7813ae2ff5a4637e318a25ef82730f7"},
-    {file = "cryptography-44.0.1-cp39-abi3-win32.whl", hash = 
"sha256:9b336599e2cb77b1008cb2ac264b290803ec5e8e89d618a5e978ff5eb6f715d9"},
-    {file = "cryptography-44.0.1-cp39-abi3-win_amd64.whl", hash = 
"sha256:e403f7f766ded778ecdb790da786b418a9f2394f36e8cc8b796cc056ab05f44f"},
-    {file = "cryptography-44.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", 
hash = 
"sha256:1f9a92144fa0c877117e9748c74501bea842f93d21ee00b0cf922846d9d0b183"},
-    {file = 
"cryptography-44.0.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = 
"sha256:610a83540765a8d8ce0f351ce42e26e53e1f774a6efb71eb1b41eb01d01c3d12"},
-    {file = 
"cryptography-44.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = 
"sha256:5fed5cd6102bb4eb843e3315d2bf25fede494509bddadb81e03a859c1bc17b83"},
-    {file = 
"cryptography-44.0.1-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = 
"sha256:f4daefc971c2d1f82f03097dc6f216744a6cd2ac0f04c68fb935ea2ba2a0d420"},
-    {file = 
"cryptography-44.0.1-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = 
"sha256:94f99f2b943b354a5b6307d7e8d19f5c423a794462bde2bf310c770ba052b1c4"},
-    {file = "cryptography-44.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = 
"sha256:d9c5b9f698a83c8bd71e0f4d3f9f839ef244798e5ffe96febfa9714717db7af7"},
-    {file = "cryptography-44.0.1.tar.gz", hash = 
"sha256:f51f5705ab27898afda1aaa430f34ad90dc117421057782022edf0600bec5f14"},
+    {file = "cryptography-44.0.2-cp37-abi3-macosx_10_9_universal2.whl", hash = 
"sha256:efcfe97d1b3c79e486554efddeb8f6f53a4cdd4cf6086642784fa31fc384e1d7"},
+    {file = 
"cryptography-44.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
 hash = 
"sha256:29ecec49f3ba3f3849362854b7253a9f59799e3763b0c9d0826259a88efa02f1"},
+    {file = 
"cryptography-44.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", 
hash = 
"sha256:bc821e161ae88bfe8088d11bb39caf2916562e0a2dc7b6d56714a48b784ef0bb"},
+    {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = 
"sha256:3c00b6b757b32ce0f62c574b78b939afab9eecaf597c4d624caca4f9e71e7843"},
+    {file = 
"cryptography-44.0.2-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl",
 hash = 
"sha256:7bdcd82189759aba3816d1f729ce42ffded1ac304c151d0a8e89b9996ab863d5"},
+    {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = 
"sha256:4973da6ca3db4405c54cd0b26d328be54c7747e89e284fcff166132eb7bccc9c"},
+    {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_34_aarch64.whl", hash = 
"sha256:4e389622b6927d8133f314949a9812972711a111d577a5d1f4bee5e58736b80a"},
+    {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_34_x86_64.whl", hash = 
"sha256:f514ef4cd14bb6fb484b4a60203e912cfcb64f2ab139e88c2274511514bf7308"},
+    {file = "cryptography-44.0.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = 
"sha256:1bc312dfb7a6e5d66082c87c34c8a62176e684b6fe3d90fcfe1568de675e6688"},
+    {file = "cryptography-44.0.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = 
"sha256:3b721b8b4d948b218c88cb8c45a01793483821e709afe5f622861fc6182b20a7"},
+    {file = "cryptography-44.0.2-cp37-abi3-win32.whl", hash = 
"sha256:51e4de3af4ec3899d6d178a8c005226491c27c4ba84101bfb59c901e10ca9f79"},
+    {file = "cryptography-44.0.2-cp37-abi3-win_amd64.whl", hash = 
"sha256:c505d61b6176aaf982c5717ce04e87da5abc9a36a5b39ac03905c4aafe8de7aa"},
+    {file = "cryptography-44.0.2-cp39-abi3-macosx_10_9_universal2.whl", hash = 
"sha256:8e0ddd63e6bf1161800592c71ac794d3fb8001f2caebe0966e77c5234fa9efc3"},
+    {file = 
"cryptography-44.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
 hash = 
"sha256:81276f0ea79a208d961c433a947029e1a15948966658cf6710bbabb60fcc2639"},
+    {file = 
"cryptography-44.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", 
hash = 
"sha256:9a1e657c0f4ea2a23304ee3f964db058c9e9e635cc7019c4aa21c330755ef6fd"},
+    {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = 
"sha256:6210c05941994290f3f7f175a4a57dbbb2afd9273657614c506d5976db061181"},
+    {file = 
"cryptography-44.0.2-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl",
 hash = 
"sha256:d1c3572526997b36f245a96a2b1713bf79ce99b271bbcf084beb6b9b075f29ea"},
+    {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = 
"sha256:b042d2a275c8cee83a4b7ae30c45a15e6a4baa65a179a0ec2d78ebb90e4f6699"},
+    {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_34_aarch64.whl", hash = 
"sha256:d03806036b4f89e3b13b6218fefea8d5312e450935b1a2d55f0524e2ed7c59d9"},
+    {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_34_x86_64.whl", hash = 
"sha256:c7362add18b416b69d58c910caa217f980c5ef39b23a38a0880dfd87bdf8cd23"},
+    {file = "cryptography-44.0.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = 
"sha256:8cadc6e3b5a1f144a039ea08a0bdb03a2a92e19c46be3285123d32029f40a922"},
+    {file = "cryptography-44.0.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = 
"sha256:6f101b1f780f7fc613d040ca4bdf835c6ef3b00e9bd7125a4255ec574c7916e4"},
+    {file = "cryptography-44.0.2-cp39-abi3-win32.whl", hash = 
"sha256:3dc62975e31617badc19a906481deacdeb80b4bb454394b4098e3f2525a488c5"},
+    {file = "cryptography-44.0.2-cp39-abi3-win_amd64.whl", hash = 
"sha256:5f6f90b72d8ccadb9c6e311c775c8305381db88374c65fa1a68250aa8a9cb3a6"},
+    {file = "cryptography-44.0.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", 
hash = 
"sha256:af4ff3e388f2fa7bff9f7f2b31b87d5651c45731d3e8cfa0944be43dff5cfbdb"},
+    {file = 
"cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = 
"sha256:0529b1d5a0105dd3731fa65680b45ce49da4d8115ea76e9da77a875396727b41"},
+    {file = 
"cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = 
"sha256:7ca25849404be2f8e4b3c59483d9d3c51298a22c1c61a0e84415104dacaf5562"},
+    {file = 
"cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = 
"sha256:268e4e9b177c76d569e8a145a6939eca9a5fec658c932348598818acf31ae9a5"},
+    {file = 
"cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = 
"sha256:9eb9d22b0a5d8fd9925a7764a054dca914000607dff201a24c791ff5c799e1fa"},
+    {file = "cryptography-44.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = 
"sha256:2bf7bf75f7df9715f810d1b038870309342bff3069c5bd8c6b96128cb158668d"},
+    {file = 
"cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = 
"sha256:909c97ab43a9c0c0b0ada7a1281430e4e5ec0458e6d9244c0e821bbf152f061d"},
+    {file = 
"cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = 
"sha256:96e7a5e9d6e71f9f4fca8eebfd603f8e86c5225bb18eb621b2c1e50b290a9471"},
+    {file = 
"cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = 
"sha256:d1b3031093a366ac767b3feb8bcddb596671b3aaff82d4050f984da0c248b615"},
+    {file = 
"cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = 
"sha256:04abd71114848aa25edb28e225ab5f268096f44cf0127f3d36975bdf1bdf3390"},
+    {file = "cryptography-44.0.2.tar.gz", hash = 
"sha256:c63454aa261a0cf0c5b4718349629793e9e634993538db841165b3df74f37ec0"},
 ]
 
 [package.dependencies]
@@ -635,19 +608,19 @@ nox = ["nox (>=2024.4.15)", "nox[uv] (>=2024.3.2)"]
 pep8test = ["check-sdist", "click (>=8.0.1)", "mypy (>=1.4)", "ruff (>=0.3.6)"]
 sdist = ["build (>=1.0.0)"]
 ssh = ["bcrypt (>=3.1.5)"]
-test = ["certifi (>=2024)", "cryptography-vectors (==44.0.1)", "pretend 
(>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov 
(>=2.10.1)", "pytest-xdist (>=3.5.0)"]
+test = ["certifi (>=2024)", "cryptography-vectors (==44.0.2)", "pretend 
(>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov 
(>=2.10.1)", "pytest-xdist (>=3.5.0)"]
 test-randomorder = ["pytest-randomly"]
 
 [[package]]
 name = "cssbeautifier"
-version = "1.15.3"
+version = "1.15.4"
 description = "CSS unobfuscator and beautifier."
 optional = false
 python-versions = "*"
 groups = ["dev"]
 files = [
-    {file = "cssbeautifier-1.15.3-py3-none-any.whl", hash = 
"sha256:0dcaf5ce197743a79b3a160b84ea58fcbd9e3e767c96df1171e428125b16d410"},
-    {file = "cssbeautifier-1.15.3.tar.gz", hash = 
"sha256:406b04d09e7d62c0be084fbfa2cba5126fe37359ea0d8d9f7b963a6354fc8303"},
+    {file = "cssbeautifier-1.15.4-py3-none-any.whl", hash = 
"sha256:78c84d5e5378df7d08622bbd0477a1abdbd209680e95480bf22f12d5701efc98"},
+    {file = "cssbeautifier-1.15.4.tar.gz", hash = 
"sha256:9bb08dc3f64c101a01677f128acf01905914cf406baf87434dcde05b74c0acf5"},
 ]
 
 [package.dependencies]
@@ -1182,14 +1155,14 @@ i18n = ["Babel (>=2.7)"]
 
 [[package]]
 name = "jsbeautifier"
-version = "1.15.3"
+version = "1.15.4"
 description = "JavaScript unobfuscator and beautifier."
 optional = false
 python-versions = "*"
 groups = ["dev"]
 files = [
-    {file = "jsbeautifier-1.15.3-py3-none-any.whl", hash = 
"sha256:b207a15ab7529eee4a35ae7790e9ec4e32a2b5026d51e2d0386c3a65e6ecfc91"},
-    {file = "jsbeautifier-1.15.3.tar.gz", hash = 
"sha256:5f1baf3d4ca6a615bb5417ee861b34b77609eeb12875555f8bbfabd9bf2f3457"},
+    {file = "jsbeautifier-1.15.4-py3-none-any.whl", hash = 
"sha256:72f65de312a3f10900d7685557f84cb61a9733c50dcc27271a39f5b0051bf528"},
+    {file = "jsbeautifier-1.15.4.tar.gz", hash = 
"sha256:5bb18d9efb9331d825735fbc5360ee8f1aac5e52780042803943aa7f854f7592"},
 ]
 
 [package.dependencies]
@@ -1211,25 +1184,6 @@ files = [
 [package.extras]
 dev = ["build (==1.2.2.post1)", "coverage (==7.5.3)", "mypy (==1.13.0)", "pip 
(==24.3.1)", "pylint (==3.2.3)", "ruff (==0.7.3)", "twine (==5.1.1)", "uv 
(==0.5.1)"]
 
-[[package]]
-name = "license-expression"
-version = "30.4.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 = false
-python-versions = ">=3.9"
-groups = ["main"]
-files = [
-    {file = "license_expression-30.4.1-py3-none-any.whl", hash = 
"sha256:679646bc3261a17690494a3e1cada446e5ee342dbd87dcfa4a0c24cc5dce13ee"},
-    {file = "license_expression-30.4.1.tar.gz", hash = 
"sha256:9f02105f9e0fcecba6a85dfbbed7d94ea1c3a70cf23ddbfb5adf3438a6f6fce0"},
-]
-
-[package.dependencies]
-"boolean.py" = ">=4.0"
-
-[package.extras]
-docs = ["Sphinx (>=5.0.2)", "doc8 (>=0.11.2)", "sphinx-autobuild", 
"sphinx-copybutton", "sphinx-reredirects (>=0.1.2)", "sphinx-rtd-dark-mode 
(>=1.3.0)", "sphinx-rtd-theme (>=1.0.0)", "sphinxcontrib-apidoc (>=0.4.0)"]
-testing = ["black", "isort", "pytest (>=6,!=7.0.0)", "pytest-xdist (>=2)", 
"twine"]
-
 [[package]]
 name = "mako"
 version = "1.3.9"
@@ -1557,18 +1511,6 @@ files = [
 dev = ["pre-commit", "tox"]
 testing = ["pytest", "pytest-benchmark"]
 
-[[package]]
-name = "ply"
-version = "3.11"
-description = "Python Lex & Yacc"
-optional = false
-python-versions = "*"
-groups = ["main"]
-files = [
-    {file = "ply-3.11-py2.py3-none-any.whl", hash = 
"sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"},
-    {file = "ply-3.11.tar.gz", hash = 
"sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"},
-]
-
 [[package]]
 name = "pre-commit"
 version = "4.1.0"
@@ -1867,31 +1809,16 @@ files = [
     {file = "pyhumps-3.8.0.tar.gz", hash = 
"sha256:498026258f7ee1a8e447c2e28526c0bea9407f9a59c03260aee4bd6c04d681a3"},
 ]
 
-[[package]]
-name = "pyparsing"
-version = "3.2.1"
-description = "pyparsing module - Classes and methods to define and execute 
parsing grammars"
-optional = false
-python-versions = ">=3.9"
-groups = ["main"]
-files = [
-    {file = "pyparsing-3.2.1-py3-none-any.whl", hash = 
"sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"},
-    {file = "pyparsing-3.2.1.tar.gz", hash = 
"sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"},
-]
-
-[package.extras]
-diagrams = ["jinja2", "railroad-diagrams"]
-
 [[package]]
 name = "pyright"
-version = "1.1.395"
+version = "1.1.396"
 description = "Command line wrapper for pyright"
 optional = false
 python-versions = ">=3.7"
 groups = ["dev"]
 files = [
-    {file = "pyright-1.1.395-py3-none-any.whl", hash = 
"sha256:f9bc726870e740c6c77c94657734d90563a3e9765bb523b39f5860198ed75eef"},
-    {file = "pyright-1.1.395.tar.gz", hash = 
"sha256:53703169068c160bfb41e1b44ba3e2512492869c26cfad927e1268cb3fbb1b1c"},
+    {file = "pyright-1.1.396-py3-none-any.whl", hash = 
"sha256:c635e473095b9138c471abccca22b9fedbe63858e0b40d4fc4b67da041891844"},
+    {file = "pyright-1.1.396.tar.gz", hash = 
"sha256:142901f5908f5a0895be3d3befcc18bedcdb8cc1798deecaec86ef7233a29b03"},
 ]
 
 [package.dependencies]
@@ -1905,14 +1832,14 @@ nodejs = ["nodejs-wheel-binaries"]
 
 [[package]]
 name = "pytest"
-version = "8.3.4"
+version = "8.3.5"
 description = "pytest: simple powerful testing with Python"
 optional = false
 python-versions = ">=3.8"
 groups = ["test"]
 files = [
-    {file = "pytest-8.3.4-py3-none-any.whl", hash = 
"sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"},
-    {file = "pytest-8.3.4.tar.gz", hash = 
"sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"},
+    {file = "pytest-8.3.5-py3-none-any.whl", hash = 
"sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"},
+    {file = "pytest-8.3.5.tar.gz", hash = 
"sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"},
 ]
 
 [package.dependencies]
@@ -2077,28 +2004,6 @@ docs = ["pydata_sphinx_theme", "sphinx-tabs (>=3.4.4)"]
 msgspec = ["msgspec (>=0.18)"]
 pydantic = ["pydantic (>=2)"]
 
-[[package]]
-name = "rdflib"
-version = "7.1.3"
-description = "RDFLib is a Python library for working with RDF, a simple yet 
powerful language for representing information."
-optional = false
-python-versions = "<4.0.0,>=3.8.1"
-groups = ["main"]
-files = [
-    {file = "rdflib-7.1.3-py3-none-any.whl", hash = 
"sha256:5402310a9f0f3c07d453d73fd0ad6ba35616286fe95d3670db2b725f3f539673"},
-    {file = "rdflib-7.1.3.tar.gz", hash = 
"sha256:f3dcb4c106a8cd9e060d92f43d593d09ebc3d07adc244f4c7315856a12e383ee"},
-]
-
-[package.dependencies]
-pyparsing = ">=2.1.0,<4"
-
-[package.extras]
-berkeleydb = ["berkeleydb (>=18.1.0,<19.0.0)"]
-html = ["html5rdf (>=1.2,<2)"]
-lxml = ["lxml (>=4.3,<6.0)"]
-networkx = ["networkx (>=2,<4)"]
-orjson = ["orjson (>=3.9.14,<4)"]
-
 [[package]]
 name = "regex"
 version = "2024.11.6"
@@ -2227,48 +2132,32 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
 
 [[package]]
 name = "ruff"
-version = "0.9.7"
+version = "0.9.9"
 description = "An extremely fast Python linter and code formatter, written in 
Rust."
 optional = false
 python-versions = ">=3.7"
 groups = ["dev"]
 files = [
-    {file = "ruff-0.9.7-py3-none-linux_armv6l.whl", hash = 
"sha256:99d50def47305fe6f233eb8dabfd60047578ca87c9dcb235c9723ab1175180f4"},
-    {file = "ruff-0.9.7-py3-none-macosx_10_12_x86_64.whl", hash = 
"sha256:d59105ae9c44152c3d40a9c40d6331a7acd1cdf5ef404fbe31178a77b174ea66"},
-    {file = "ruff-0.9.7-py3-none-macosx_11_0_arm64.whl", hash = 
"sha256:f313b5800483770bd540cddac7c90fc46f895f427b7820f18fe1822697f1fec9"},
-    {file = 
"ruff-0.9.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = 
"sha256:042ae32b41343888f59c0a4148f103208bf6b21c90118d51dc93a68366f4e903"},
-    {file = 
"ruff-0.9.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = 
"sha256:87862589373b33cc484b10831004e5e5ec47dc10d2b41ba770e837d4f429d721"},
-    {file = "ruff-0.9.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", 
hash = 
"sha256:a17e1e01bee0926d351a1ee9bc15c445beae888f90069a6192a07a84af544b6b"},
-    {file = 
"ruff-0.9.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = 
"sha256:7c1f880ac5b2cbebd58b8ebde57069a374865c73f3bf41f05fe7a179c1c8ef22"},
-    {file = 
"ruff-0.9.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = 
"sha256:e63fc20143c291cab2841dbb8260e96bafbe1ba13fd3d60d28be2c71e312da49"},
-    {file = 
"ruff-0.9.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = 
"sha256:91ff963baed3e9a6a4eba2a02f4ca8eaa6eba1cc0521aec0987da8d62f53cbef"},
-    {file = 
"ruff-0.9.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = 
"sha256:88362e3227c82f63eaebf0b2eff5b88990280fb1ecf7105523883ba8c3aaf6fb"},
-    {file = "ruff-0.9.7-py3-none-musllinux_1_2_aarch64.whl", hash = 
"sha256:0372c5a90349f00212270421fe91874b866fd3626eb3b397ede06cd385f6f7e0"},
-    {file = "ruff-0.9.7-py3-none-musllinux_1_2_armv7l.whl", hash = 
"sha256:d76b8ab60e99e6424cd9d3d923274a1324aefce04f8ea537136b8398bbae0a62"},
-    {file = "ruff-0.9.7-py3-none-musllinux_1_2_i686.whl", hash = 
"sha256:0c439bdfc8983e1336577f00e09a4e7a78944fe01e4ea7fe616d00c3ec69a3d0"},
-    {file = "ruff-0.9.7-py3-none-musllinux_1_2_x86_64.whl", hash = 
"sha256:115d1f15e8fdd445a7b4dc9a30abae22de3f6bcabeb503964904471691ef7606"},
-    {file = "ruff-0.9.7-py3-none-win32.whl", hash = 
"sha256:e9ece95b7de5923cbf38893f066ed2872be2f2f477ba94f826c8defdd6ec6b7d"},
-    {file = "ruff-0.9.7-py3-none-win_amd64.whl", hash = 
"sha256:3770fe52b9d691a15f0b87ada29c45324b2ace8f01200fb0c14845e499eb0c2c"},
-    {file = "ruff-0.9.7-py3-none-win_arm64.whl", hash = 
"sha256:b075a700b2533feb7a01130ff656a4ec0d5f340bb540ad98759b8401c32c2037"},
-    {file = "ruff-0.9.7.tar.gz", hash = 
"sha256:643757633417907510157b206e490c3aa11cab0c087c912f60e07fbafa87a4c6"},
-]
-
-[[package]]
-name = "semantic-version"
-version = "2.10.0"
-description = "A library implementing the 'SemVer' scheme."
-optional = false
-python-versions = ">=2.7"
-groups = ["main"]
-files = [
-    {file = "semantic_version-2.10.0-py2.py3-none-any.whl", hash = 
"sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177"},
-    {file = "semantic_version-2.10.0.tar.gz", hash = 
"sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c"},
+    {file = "ruff-0.9.9-py3-none-linux_armv6l.whl", hash = 
"sha256:628abb5ea10345e53dff55b167595a159d3e174d6720bf19761f5e467e68d367"},
+    {file = "ruff-0.9.9-py3-none-macosx_10_12_x86_64.whl", hash = 
"sha256:b6cd1428e834b35d7493354723543b28cc11dc14d1ce19b685f6e68e07c05ec7"},
+    {file = "ruff-0.9.9-py3-none-macosx_11_0_arm64.whl", hash = 
"sha256:5ee162652869120ad260670706f3cd36cd3f32b0c651f02b6da142652c54941d"},
+    {file = 
"ruff-0.9.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = 
"sha256:3aa0f6b75082c9be1ec5a1db78c6d4b02e2375c3068438241dc19c7c306cc61a"},
+    {file = 
"ruff-0.9.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = 
"sha256:584cc66e89fb5f80f84b05133dd677a17cdd86901d6479712c96597a3f28e7fe"},
+    {file = "ruff-0.9.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", 
hash = 
"sha256:abf3369325761a35aba75cd5c55ba1b5eb17d772f12ab168fbfac54be85cf18c"},
+    {file = 
"ruff-0.9.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = 
"sha256:3403a53a32a90ce929aa2f758542aca9234befa133e29f4933dcef28a24317be"},
+    {file = 
"ruff-0.9.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = 
"sha256:18454e7fa4e4d72cffe28a37cf6a73cb2594f81ec9f4eca31a0aaa9ccdfb1590"},
+    {file = 
"ruff-0.9.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = 
"sha256:0fadfe2c88724c9617339f62319ed40dcdadadf2888d5afb88bf3adee7b35bfb"},
+    {file = 
"ruff-0.9.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = 
"sha256:6df104d08c442a1aabcfd254279b8cc1e2cbf41a605aa3e26610ba1ec4acf0b0"},
+    {file = "ruff-0.9.9-py3-none-musllinux_1_2_aarch64.whl", hash = 
"sha256:d7c62939daf5b2a15af48abbd23bea1efdd38c312d6e7c4cedf5a24e03207e17"},
+    {file = "ruff-0.9.9-py3-none-musllinux_1_2_armv7l.whl", hash = 
"sha256:9494ba82a37a4b81b6a798076e4a3251c13243fc37967e998efe4cce58c8a8d1"},
+    {file = "ruff-0.9.9-py3-none-musllinux_1_2_i686.whl", hash = 
"sha256:4efd7a96ed6d36ef011ae798bf794c5501a514be369296c672dab7921087fa57"},
+    {file = "ruff-0.9.9-py3-none-musllinux_1_2_x86_64.whl", hash = 
"sha256:ab90a7944c5a1296f3ecb08d1cbf8c2da34c7e68114b1271a431a3ad30cb660e"},
+    {file = "ruff-0.9.9-py3-none-win32.whl", hash = 
"sha256:6b4c376d929c25ecd6d87e182a230fa4377b8e5125a4ff52d506ee8c087153c1"},
+    {file = "ruff-0.9.9-py3-none-win_amd64.whl", hash = 
"sha256:837982ea24091d4c1700ddb2f63b7070e5baec508e43b01de013dc7eff974ff1"},
+    {file = "ruff-0.9.9-py3-none-win_arm64.whl", hash = 
"sha256:3ac78f127517209fe6d96ab00f3ba97cafe38718b23b1db3e96d8b2d39e37ddf"},
+    {file = "ruff-0.9.9.tar.gz", hash = 
"sha256:0062ed13f22173e85f8f7056f9a24016e692efeea8704d1a5e8011b8aa850933"},
 ]
 
-[package.extras]
-dev = ["Django (>=1.11)", "check-manifest", "colorama (<=0.4.1)", "coverage", 
"flake8", "nose2", "readme-renderer (<25.0)", "tox", "wheel", 
"zest.releaser[recommended]"]
-doc = ["Sphinx", "sphinx-rtd-theme"]
-
 [[package]]
 name = "six"
 version = "1.17.0"
@@ -2293,35 +2182,6 @@ files = [
     {file = "sniffio-1.3.1.tar.gz", hash = 
"sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"},
 ]
 
-[[package]]
-name = "spdx-tools"
-version = "0.8.3"
-description = "SPDX parser and tools."
-optional = false
-python-versions = ">=3.7"
-groups = ["main"]
-files = [
-    {file = "spdx-tools-0.8.3.tar.gz", hash = 
"sha256:68b8f9ce2893b5216bd90b2e63f1c821c2884e4ebc4fd295ebbf1fa8b8a94b93"},
-    {file = "spdx_tools-0.8.3-py3-none-any.whl", hash = 
"sha256:638fd9bd8be61901316eb6d063574e16d5403a1870073ec4d9241426a997501a"},
-]
-
-[package.dependencies]
-beartype = "*"
-click = "*"
-license-expression = "*"
-ply = "*"
-pyyaml = "*"
-rdflib = "*"
-semantic-version = "*"
-uritools = "*"
-xmltodict = "*"
-
-[package.extras]
-code-style = ["black", "flake8", "isort"]
-development = ["black", "flake8", "isort", "networkx", "pytest"]
-graph-generation = ["networkx", "pygraphviz"]
-test = ["pyshacl", "pytest", "tzdata"]
-
 [[package]]
 name = "sqlalchemy"
 version = "2.0.38"
@@ -2420,14 +2280,14 @@ sqlcipher = ["sqlcipher3_binary"]
 
 [[package]]
 name = "sqlmodel"
-version = "0.0.22"
+version = "0.0.23"
 description = "SQLModel, SQL databases in Python, designed for simplicity, 
compatibility, and robustness."
 optional = false
 python-versions = ">=3.7"
 groups = ["main"]
 files = [
-    {file = "sqlmodel-0.0.22-py3-none-any.whl", hash = 
"sha256:a1ed13e28a1f4057cbf4ff6cdb4fc09e85702621d3259ba17b3c230bfb2f941b"},
-    {file = "sqlmodel-0.0.22.tar.gz", hash = 
"sha256:7d37c882a30c43464d143e35e9ecaf945d88035e20117bf5ec2834a23cbe505e"},
+    {file = "sqlmodel-0.0.23-py3-none-any.whl", hash = 
"sha256:93810464b11810845920e0fedfabb31af2ccc2bb670637e9445da7ccee5f9f46"},
+    {file = "sqlmodel-0.0.23.tar.gz", hash = 
"sha256:2b36be0d8b751c211864ec59c8c07c008078dbdeaf516f597eb61880a615197b"},
 ]
 
 [package.dependencies]
@@ -2480,18 +2340,6 @@ files = [
     {file = "typing_extensions-4.12.2.tar.gz", hash = 
"sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
 ]
 
-[[package]]
-name = "uritools"
-version = "4.0.3"
-description = "URI parsing, classification and composition"
-optional = false
-python-versions = ">=3.7"
-groups = ["main"]
-files = [
-    {file = "uritools-4.0.3-py3-none-any.whl", hash = 
"sha256:bae297d090e69a0451130ffba6f2f1c9477244aa0a5543d66aed2d9f77d0dd9c"},
-    {file = "uritools-4.0.3.tar.gz", hash = 
"sha256:ee06a182a9c849464ce9d5fa917539aacc8edd2a4924d1b7aabeeecabcae3bc2"},
-]
-
 [[package]]
 name = "urllib3"
 version = "2.3.0"
@@ -2660,18 +2508,6 @@ files = [
 [package.dependencies]
 h11 = ">=0.9.0,<1"
 
-[[package]]
-name = "xmltodict"
-version = "0.14.2"
-description = "Makes working with XML feel like you are working with JSON"
-optional = false
-python-versions = ">=3.6"
-groups = ["main"]
-files = [
-    {file = "xmltodict-0.14.2-py2.py3-none-any.whl", hash = 
"sha256:20cc7d723ed729276e808f26fb6b3599f786cbc37e06c65e192ba77c40f20aac"},
-    {file = "xmltodict-0.14.2.tar.gz", hash = 
"sha256:201e7c28bb210e374999d1dde6382923ab0ed1a8a5faeece48ab525b7810a553"},
-]
-
 [[package]]
 name = "yarl"
 version = "1.18.3"
@@ -2772,4 +2608,4 @@ propcache = ">=0.2.0"
 [metadata]
 lock-version = "2.1"
 python-versions = "~=3.13"
-content-hash = 
"bfc5b0f8153605adff13dd8687483c31f54ce02afdbfe98468ce0264688429a3"
+content-hash = 
"94d8732ca90ceb922ee17bd18cc7edc3d2f511bc5106bcddc8822fc36c6be5ef"
diff --git a/pyproject.toml b/pyproject.toml
index 21d9937..1fdc0ad 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -21,7 +21,6 @@ dependencies = [
   "python-decouple~=3.8",
   "python-gnupg~=0.5",
   "quart-schema~=0.21",
-  "spdx-tools>=0.8.3,<0.9.0",
   "sqlmodel~=0.0",
 ]
 
diff --git a/typestubs/spdx_tools/common/typing/dataclass_with_properties.pyi 
b/typestubs/spdx_tools/common/typing/dataclass_with_properties.pyi
deleted file mode 100644
index 4dbd9f1..0000000
--- a/typestubs/spdx_tools/common/typing/dataclass_with_properties.pyi
+++ /dev/null
@@ -1,9 +0,0 @@
-from typing import Any, Callable, TypeVar
-
-T = TypeVar('T')
-
-def dataclass_with_properties(cls: type[T]) -> type[T]: ...
-
-def make_setter(field_name: str, field_type: Any) -> Callable[[Any, Any], 
None]: ...
-
-def make_getter(field_name: str, field_type: Any) -> Callable[[Any], Any]: ...
diff --git a/typestubs/spdx_tools/spdx/model/actor.pyi 
b/typestubs/spdx_tools/spdx/model/actor.pyi
deleted file mode 100644
index 405ea14..0000000
--- a/typestubs/spdx_tools/spdx/model/actor.pyi
+++ /dev/null
@@ -1,33 +0,0 @@
-from enum import Enum, auto
-from beartype.typing import Optional
-
-class ActorType(Enum):
-    PERSON = auto()
-    ORGANIZATION = auto()
-    TOOL = auto()
-
-class Actor:
-    actor_type: ActorType
-    name: str
-    email: Optional[str]
-
-    def __init__(self, actor_type: ActorType, name: str, email: Optional[str] 
= None) -> None: ...
-
-    def to_serialized_string(self) -> str: ...
-
-    def __str__(self) -> str: ...
-
-    @property
-    def actor_type(self) -> ActorType: ...
-    @actor_type.setter
-    def actor_type(self, value: ActorType) -> None: ...
-
-    @property
-    def name(self) -> str: ...
-    @name.setter
-    def name(self, value: str) -> None: ...
-
-    @property
-    def email(self) -> Optional[str]: ...
-    @email.setter
-    def email(self, value: Optional[str]) -> None: ...
diff --git a/typestubs/spdx_tools/spdx/model/document.pyi 
b/typestubs/spdx_tools/spdx/model/document.pyi
deleted file mode 100644
index 5c26366..0000000
--- a/typestubs/spdx_tools/spdx/model/document.pyi
+++ /dev/null
@@ -1,62 +0,0 @@
-from datetime import datetime
-from beartype.typing import List, Optional
-
-from spdx_tools.spdx.model import (
-    Actor,
-    Annotation,
-    ExternalDocumentRef,
-    ExtractedLicensingInfo,
-    File,
-    Package,
-    Relationship,
-    Snippet,
-    Version,
-)
-
-class CreationInfo:
-    spdx_version: str
-    spdx_id: str
-    name: str
-    document_namespace: str
-    creators: List[Actor]
-    created: datetime
-    creator_comment: Optional[str]
-    data_license: str
-    external_document_refs: List[ExternalDocumentRef]
-    license_list_version: Optional[Version]
-    document_comment: Optional[str]
-
-    def __init__(
-        self,
-        spdx_version: str,
-        spdx_id: str,
-        name: str,
-        document_namespace: str,
-        creators: List[Actor],
-        created: datetime,
-        creator_comment: Optional[str] = None,
-        data_license: str = "CC0-1.0",
-        external_document_refs: Optional[List[ExternalDocumentRef]] = None,
-        license_list_version: Optional[Version] = None,
-        document_comment: Optional[str] = None,
-    ) -> None: ...
-
-class Document:
-    creation_info: CreationInfo
-    packages: List[Package]
-    files: List[File]
-    snippets: List[Snippet]
-    annotations: List[Annotation]
-    relationships: List[Relationship]
-    extracted_licensing_info: List[ExtractedLicensingInfo]
-
-    def __init__(
-        self,
-        creation_info: CreationInfo,
-        packages: Optional[List[Package]] = None,
-        files: Optional[List[File]] = None,
-        snippets: Optional[List[Snippet]] = None,
-        annotations: Optional[List[Annotation]] = None,
-        relationships: Optional[List[Relationship]] = None,
-        extracted_licensing_info: Optional[List[ExtractedLicensingInfo]] = 
None,
-    ) -> None: ...
diff --git a/typestubs/spdx_tools/spdx/model/external_reference.pyi 
b/typestubs/spdx_tools/spdx/model/external_reference.pyi
deleted file mode 100644
index b230aa5..0000000
--- a/typestubs/spdx_tools/spdx/model/external_reference.pyi
+++ /dev/null
@@ -1,22 +0,0 @@
-from enum import Enum, auto
-from beartype.typing import Optional
-
-class ExternalPackageRefCategory(Enum):
-    SECURITY = auto()
-    PACKAGE_MANAGER = auto()
-    PERSISTENT_ID = auto()
-    OTHER = auto()
-
-class ExternalPackageRef:
-    category: ExternalPackageRefCategory
-    reference_type: str
-    locator: str
-    comment: Optional[str]
-
-    def __init__(
-        self,
-        category: ExternalPackageRefCategory,
-        reference_type: str,
-        locator: str,
-        comment: Optional[str] = None
-    ) -> None: ...
diff --git a/typestubs/spdx_tools/spdx/model/package.pyi 
b/typestubs/spdx_tools/spdx/model/package.pyi
deleted file mode 100644
index fd73228..0000000
--- a/typestubs/spdx_tools/spdx/model/package.pyi
+++ /dev/null
@@ -1,73 +0,0 @@
-from datetime import datetime
-from dataclasses import field
-from beartype.typing import List, Optional, Union
-from license_expression import LicenseExpression
-
-from spdx_tools.spdx.model.actor import Actor
-from spdx_tools.spdx.model.checksum import Checksum
-from spdx_tools.spdx.model.external_reference import ExternalPackageRef
-from spdx_tools.spdx.model.package_verification_code import 
PackageVerificationCode
-from spdx_tools.spdx.model.package_purpose import PackagePurpose
-from spdx_tools.spdx.model.spdx_no_assertion import SpdxNoAssertion
-from spdx_tools.spdx.model.spdx_none import SpdxNone
-
-LicenseType = Union[LicenseExpression, SpdxNoAssertion, SpdxNone]
-OptionalLicenseType = Optional[LicenseType]
-
-class Package:
-    spdx_id: str
-    name: str
-    version: Optional[str]
-    file_name: Optional[str]
-    supplier: Optional[Actor]
-    originator: Optional[Actor]
-    download_location: str
-    files_analyzed: bool
-    verification_code: Optional[PackageVerificationCode]
-    checksums: List[Checksum]
-    homepage: Optional[str]
-    source_info: Optional[str]
-    license_concluded: Optional[LicenseType]
-    license_info_from_files: List[OptionalLicenseType]
-    license_declared: Optional[LicenseType]
-    license_comment: Optional[str]
-    copyright_text: Optional[str]
-    summary: Optional[str]
-    description: Optional[str]
-    comment: Optional[str]
-    external_references: List[ExternalPackageRef]
-    attribution_texts: List[str]
-    primary_package_purpose: Optional[PackagePurpose]
-    release_date: Optional[datetime]
-    built_date: Optional[datetime]
-    valid_until_date: Optional[datetime]
-
-    def __init__(
-        self,
-        spdx_id: str,
-        name: str,
-        version: Optional[str] = None,
-        file_name: Optional[str] = None,
-        supplier: Optional[Actor] = None,
-        originator: Optional[Actor] = None,
-        download_location: str = "",
-        files_analyzed: bool = True,
-        verification_code: Optional[PackageVerificationCode] = None,
-        checksums: Optional[List[Checksum]] = None,
-        homepage: Optional[str] = None,
-        source_info: Optional[str] = None,
-        license_concluded: Optional[LicenseType] = None,
-        license_info_from_files: Optional[List[OptionalLicenseType]] = None,
-        license_declared: Optional[LicenseType] = None,
-        license_comment: Optional[str] = None,
-        copyright_text: Optional[str] = None,
-        summary: Optional[str] = None,
-        description: Optional[str] = None,
-        comment: Optional[str] = None,
-        external_references: Optional[List[ExternalPackageRef]] = None,
-        attribution_texts: Optional[List[str]] = None,
-        primary_package_purpose: Optional[PackagePurpose] = None,
-        release_date: Optional[datetime] = None,
-        built_date: Optional[datetime] = None,
-        valid_until_date: Optional[datetime] = None,
-    ) -> None: ...
diff --git a/typestubs/spdx_tools/spdx/model/package_purpose.pyi 
b/typestubs/spdx_tools/spdx/model/package_purpose.pyi
deleted file mode 100644
index c493f0d..0000000
--- a/typestubs/spdx_tools/spdx/model/package_purpose.pyi
+++ /dev/null
@@ -1,15 +0,0 @@
-from enum import Enum, auto
-
-class PackagePurpose(Enum):
-    APPLICATION = auto()
-    FRAMEWORK = auto()
-    LIBRARY = auto()
-    CONTAINER = auto()
-    OPERATING_SYSTEM = auto()
-    DEVICE = auto()
-    FIRMWARE = auto()
-    SOURCE = auto()
-    ARCHIVE = auto()
-    FILE = auto()
-    INSTALL = auto()
-    OTHER = auto()
diff --git a/typestubs/spdx_tools/spdx/model/package_verification_code.pyi 
b/typestubs/spdx_tools/spdx/model/package_verification_code.pyi
deleted file mode 100644
index b18b65b..0000000
--- a/typestubs/spdx_tools/spdx/model/package_verification_code.pyi
+++ /dev/null
@@ -1,7 +0,0 @@
-from typing import List, Optional
-
-class PackageVerificationCode:
-    value: str
-    excluded_files: List[str]
-
-    def __init__(self, value: str, excluded_files: Optional[List[str]] = None) 
-> None: ...
diff --git a/typestubs/spdx_tools/spdx/model/spdx_licensing.pyi 
b/typestubs/spdx_tools/spdx/model/spdx_licensing.pyi
deleted file mode 100644
index 75628c0..0000000
--- a/typestubs/spdx_tools/spdx/model/spdx_licensing.pyi
+++ /dev/null
@@ -1,9 +0,0 @@
-from beartype.typing import Any, Union
-from license_expression import LicenseExpression
-from boolean.boolean import Expression as BooleanExpression
-
-class Expression(BooleanExpression): ...
-
-class SpdxExpression(Expression): ...
-
-def parse(expression: str) -> LicenseExpression: ...
diff --git a/typestubs/spdx_tools/spdx/validation/document_validator.pyi 
b/typestubs/spdx_tools/spdx/validation/document_validator.pyi
deleted file mode 100644
index eb8907f..0000000
--- a/typestubs/spdx_tools/spdx/validation/document_validator.pyi
+++ /dev/null
@@ -1,6 +0,0 @@
-from beartype.typing import List, Optional
-
-from spdx_tools.spdx.model import Document
-from spdx_tools.spdx.validation.validation_message import ValidationMessage
-
-def validate_full_spdx_document(document: Document, spdx_version: 
Optional[str] = None) -> List[ValidationMessage]: ...
diff --git a/typestubs/spdx_tools/spdx/validation/validation_message.pyi 
b/typestubs/spdx_tools/spdx/validation/validation_message.pyi
deleted file mode 100644
index d8ab225..0000000
--- a/typestubs/spdx_tools/spdx/validation/validation_message.pyi
+++ /dev/null
@@ -1,24 +0,0 @@
-from enum import Enum
-from beartype.typing import Optional
-
-class SpdxElementType(Enum):
-    DOCUMENT: str
-    CREATION_INFO: str
-    PACKAGE: str
-    FILE: str
-    SNIPPET: str
-    ANNOTATION: str
-    RELATIONSHIP: str
-    EXTRACTED_LICENSING_INFO: str
-
-class ValidationContext:
-    spdx_id: str
-    element_type: SpdxElementType
-
-    def __init__(self, spdx_id: str, element_type: SpdxElementType) -> None: 
...
-
-class ValidationMessage:
-    validation_message: str
-    validation_context: ValidationContext
-
-    def __init__(self, validation_message: str, validation_context: 
ValidationContext) -> None: ...
diff --git a/uv.lock b/uv.lock
index 1a3154c..eac2134 100644
--- a/uv.lock
+++ b/uv.lock
@@ -171,15 +171,6 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl";,
 hash = 
"sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a", size 
= 63152 },
 ]
 
-[[package]]
-name = "beartype"
-version = "0.20.0"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/7d/48/fe1177f4272a1bc344f3371414aa5b76e19c30d7280d711ce90c5335a6f5/beartype-0.20.0.tar.gz";,
 hash = 
"sha256:599ecc86b88549bcb6d1af626f44d85ffbb9151ace5d7f9f3b493dce2ffee529", size 
= 1390635 }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/61/ce/9cf60b72e3fbd36a6dd16e31ecbe9ae137a8ead77cb24a5f75302adfc9a9/beartype-0.20.0-py3-none-any.whl";,
 hash = 
"sha256:090d10e3540b3fca209a0ab5f1c15f9652a075da0a7249c2e6713011e9e5f6ef", size 
= 1139097 },
-]
-
 [[package]]
 name = "blinker"
 version = "1.9.0"
@@ -201,15 +192,6 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/35/5f/7991d1f3b8d91eddabf883bc52f88f7d8c8f556be0d50ee8b0fa078be8a9/blockbuster-1.5.23-py3-none-any.whl";,
 hash = 
"sha256:cf4d9df51d0ba5ac9b0f14594a456e42b7a49dcc35819c6b36805ac285b1f6fe", size 
= 13199 },
 ]
 
-[[package]]
-name = "boolean-py"
-version = "4.0"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/a2/d9/b6e56a303d221fc0bdff2c775e4eef7fedd58194aa5a96fa89fb71634cc9/boolean.py-4.0.tar.gz";,
 hash = 
"sha256:17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4", size 
= 34504 }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/3f/02/6389ef0529af6da0b913374dedb9bbde8eabfe45767ceec38cc37801b0bd/boolean.py-4.0-py3-none-any.whl";,
 hash = 
"sha256:2876f2051d7d6394a531d82dc6eb407faa0b01a0a0b3083817ccd7323b8d96bd", size 
= 25909 },
-]
-
 [[package]]
 name = "certifi"
 version = "2025.1.31"
@@ -295,51 +277,51 @@ wheels = [
 
 [[package]]
 name = "cryptography"
-version = "44.0.1"
+version = "44.0.2"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/c7/67/545c79fe50f7af51dbad56d16b23fe33f63ee6a5d956b3cb68ea110cbe64/cryptography-44.0.1.tar.gz";,
 hash = 
"sha256:f51f5705ab27898afda1aaa430f34ad90dc117421057782022edf0600bec5f14", size 
= 710819 }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/72/27/5e3524053b4c8889da65cf7814a9d0d8514a05194a25e1e34f46852ee6eb/cryptography-44.0.1-cp37-abi3-macosx_10_9_universal2.whl";,
 hash = 
"sha256:bf688f615c29bfe9dfc44312ca470989279f0e94bb9f631f85e3459af8efc009", size 
= 6642022 },
-    { url = 
"https://files.pythonhosted.org/packages/34/b9/4d1fa8d73ae6ec350012f89c3abfbff19fc95fe5420cf972e12a8d182986/cryptography-44.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:dd7c7e2d71d908dc0f8d2027e1604102140d84b155e658c20e8ad1304317691f", size 
= 3943865 },
-    { url = 
"https://files.pythonhosted.org/packages/6e/57/371a9f3f3a4500807b5fcd29fec77f418ba27ffc629d88597d0d1049696e/cryptography-44.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:887143b9ff6bad2b7570da75a7fe8bbf5f65276365ac259a5d2d5147a73775f2", size 
= 4162562 },
-    { url = 
"https://files.pythonhosted.org/packages/c5/1d/5b77815e7d9cf1e3166988647f336f87d5634a5ccecec2ffbe08ef8dd481/cryptography-44.0.1-cp37-abi3-manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:322eb03ecc62784536bc173f1483e76747aafeb69c8728df48537eb431cd1911", size 
= 3951923 },
-    { url = 
"https://files.pythonhosted.org/packages/28/01/604508cd34a4024467cd4105887cf27da128cba3edd435b54e2395064bfb/cryptography-44.0.1-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl";,
 hash = 
"sha256:21377472ca4ada2906bc313168c9dc7b1d7ca417b63c1c3011d0c74b7de9ae69", size 
= 3685194 },
-    { url = 
"https://files.pythonhosted.org/packages/c6/3d/d3c55d4f1d24580a236a6753902ef6d8aafd04da942a1ee9efb9dc8fd0cb/cryptography-44.0.1-cp37-abi3-manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:df978682c1504fc93b3209de21aeabf2375cb1571d4e61907b3e7a2540e83026", size 
= 4187790 },
-    { url = 
"https://files.pythonhosted.org/packages/ea/a6/44d63950c8588bfa8594fd234d3d46e93c3841b8e84a066649c566afb972/cryptography-44.0.1-cp37-abi3-manylinux_2_34_aarch64.whl";,
 hash = 
"sha256:eb3889330f2a4a148abead555399ec9a32b13b7c8ba969b72d8e500eb7ef84cd", size 
= 3951343 },
-    { url = 
"https://files.pythonhosted.org/packages/c1/17/f5282661b57301204cbf188254c1a0267dbd8b18f76337f0a7ce1038888c/cryptography-44.0.1-cp37-abi3-manylinux_2_34_x86_64.whl";,
 hash = 
"sha256:8e6a85a93d0642bd774460a86513c5d9d80b5c002ca9693e63f6e540f1815ed0", size 
= 4187127 },
-    { url = 
"https://files.pythonhosted.org/packages/f3/68/abbae29ed4f9d96596687f3ceea8e233f65c9645fbbec68adb7c756bb85a/cryptography-44.0.1-cp37-abi3-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:6f76fdd6fd048576a04c5210d53aa04ca34d2ed63336d4abd306d0cbe298fddf", size 
= 4070666 },
-    { url = 
"https://files.pythonhosted.org/packages/0f/10/cf91691064a9e0a88ae27e31779200b1505d3aee877dbe1e4e0d73b4f155/cryptography-44.0.1-cp37-abi3-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:6c8acf6f3d1f47acb2248ec3ea261171a671f3d9428e34ad0357148d492c7864", size 
= 4288811 },
-    { url = 
"https://files.pythonhosted.org/packages/38/78/74ea9eb547d13c34e984e07ec8a473eb55b19c1451fe7fc8077c6a4b0548/cryptography-44.0.1-cp37-abi3-win32.whl";,
 hash = 
"sha256:24979e9f2040c953a94bf3c6782e67795a4c260734e5264dceea65c8f4bae64a", size 
= 2771882 },
-    { url = 
"https://files.pythonhosted.org/packages/cf/6c/3907271ee485679e15c9f5e93eac6aa318f859b0aed8d369afd636fafa87/cryptography-44.0.1-cp37-abi3-win_amd64.whl";,
 hash = 
"sha256:fd0ee90072861e276b0ff08bd627abec29e32a53b2be44e41dbcdf87cbee2b00", size 
= 3206989 },
-    { url = 
"https://files.pythonhosted.org/packages/9f/f1/676e69c56a9be9fd1bffa9bc3492366901f6e1f8f4079428b05f1414e65c/cryptography-44.0.1-cp39-abi3-macosx_10_9_universal2.whl";,
 hash = 
"sha256:a2d8a7045e1ab9b9f803f0d9531ead85f90c5f2859e653b61497228b18452008", size 
= 6643714 },
-    { url = 
"https://files.pythonhosted.org/packages/ba/9f/1775600eb69e72d8f9931a104120f2667107a0ee478f6ad4fe4001559345/cryptography-44.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:b8272f257cf1cbd3f2e120f14c68bff2b6bdfcc157fafdee84a1b795efd72862", size 
= 3943269 },
-    { url = 
"https://files.pythonhosted.org/packages/25/ba/e00d5ad6b58183829615be7f11f55a7b6baa5a06910faabdc9961527ba44/cryptography-44.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:1e8d181e90a777b63f3f0caa836844a1182f1f265687fac2115fcf245f5fbec3", size 
= 4166461 },
-    { url = 
"https://files.pythonhosted.org/packages/b3/45/690a02c748d719a95ab08b6e4decb9d81e0ec1bac510358f61624c86e8a3/cryptography-44.0.1-cp39-abi3-manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:436df4f203482f41aad60ed1813811ac4ab102765ecae7a2bbb1dbb66dcff5a7", size 
= 3950314 },
-    { url = 
"https://files.pythonhosted.org/packages/e6/50/bf8d090911347f9b75adc20f6f6569ed6ca9b9bff552e6e390f53c2a1233/cryptography-44.0.1-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl";,
 hash = 
"sha256:4f422e8c6a28cf8b7f883eb790695d6d45b0c385a2583073f3cec434cc705e1a", size 
= 3686675 },
-    { url = 
"https://files.pythonhosted.org/packages/e1/e7/cfb18011821cc5f9b21efb3f94f3241e3a658d267a3bf3a0f45543858ed8/cryptography-44.0.1-cp39-abi3-manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:72198e2b5925155497a5a3e8c216c7fb3e64c16ccee11f0e7da272fa93b35c4c", size 
= 4190429 },
-    { url = 
"https://files.pythonhosted.org/packages/07/ef/77c74d94a8bfc1a8a47b3cafe54af3db537f081742ee7a8a9bd982b62774/cryptography-44.0.1-cp39-abi3-manylinux_2_34_aarch64.whl";,
 hash = 
"sha256:2a46a89ad3e6176223b632056f321bc7de36b9f9b93b2cc1cccf935a3849dc62", size 
= 3950039 },
-    { url = 
"https://files.pythonhosted.org/packages/6d/b9/8be0ff57c4592382b77406269b1e15650c9f1a167f9e34941b8515b97159/cryptography-44.0.1-cp39-abi3-manylinux_2_34_x86_64.whl";,
 hash = 
"sha256:53f23339864b617a3dfc2b0ac8d5c432625c80014c25caac9082314e9de56f41", size 
= 4189713 },
-    { url = 
"https://files.pythonhosted.org/packages/78/e1/4b6ac5f4100545513b0847a4d276fe3c7ce0eacfa73e3b5ebd31776816ee/cryptography-44.0.1-cp39-abi3-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:888fcc3fce0c888785a4876ca55f9f43787f4c5c1cc1e2e0da71ad481ff82c5b", size 
= 4071193 },
-    { url = 
"https://files.pythonhosted.org/packages/3d/cb/afff48ceaed15531eab70445abe500f07f8f96af2bb35d98af6bfa89ebd4/cryptography-44.0.1-cp39-abi3-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:00918d859aa4e57db8299607086f793fa7813ae2ff5a4637e318a25ef82730f7", size 
= 4289566 },
-    { url = 
"https://files.pythonhosted.org/packages/30/6f/4eca9e2e0f13ae459acd1ca7d9f0257ab86e68f44304847610afcb813dc9/cryptography-44.0.1-cp39-abi3-win32.whl";,
 hash = 
"sha256:9b336599e2cb77b1008cb2ac264b290803ec5e8e89d618a5e978ff5eb6f715d9", size 
= 2772371 },
-    { url = 
"https://files.pythonhosted.org/packages/d2/05/5533d30f53f10239616a357f080892026db2d550a40c393d0a8a7af834a9/cryptography-44.0.1-cp39-abi3-win_amd64.whl";,
 hash = 
"sha256:e403f7f766ded778ecdb790da786b418a9f2394f36e8cc8b796cc056ab05f44f", size 
= 3207303 },
+sdist = { url = 
"https://files.pythonhosted.org/packages/cd/25/4ce80c78963834b8a9fd1cc1266be5ed8d1840785c0f2e1b73b8d128d505/cryptography-44.0.2.tar.gz";,
 hash = 
"sha256:c63454aa261a0cf0c5b4718349629793e9e634993538db841165b3df74f37ec0", size 
= 710807 }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/92/ef/83e632cfa801b221570c5f58c0369db6fa6cef7d9ff859feab1aae1a8a0f/cryptography-44.0.2-cp37-abi3-macosx_10_9_universal2.whl";,
 hash = 
"sha256:efcfe97d1b3c79e486554efddeb8f6f53a4cdd4cf6086642784fa31fc384e1d7", size 
= 6676361 },
+    { url = 
"https://files.pythonhosted.org/packages/30/ec/7ea7c1e4c8fc8329506b46c6c4a52e2f20318425d48e0fe597977c71dbce/cryptography-44.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:29ecec49f3ba3f3849362854b7253a9f59799e3763b0c9d0826259a88efa02f1", size 
= 3952350 },
+    { url = 
"https://files.pythonhosted.org/packages/27/61/72e3afdb3c5ac510330feba4fc1faa0fe62e070592d6ad00c40bb69165e5/cryptography-44.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:bc821e161ae88bfe8088d11bb39caf2916562e0a2dc7b6d56714a48b784ef0bb", size 
= 4166572 },
+    { url = 
"https://files.pythonhosted.org/packages/26/e4/ba680f0b35ed4a07d87f9e98f3ebccb05091f3bf6b5a478b943253b3bbd5/cryptography-44.0.2-cp37-abi3-manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:3c00b6b757b32ce0f62c574b78b939afab9eecaf597c4d624caca4f9e71e7843", size 
= 3958124 },
+    { url = 
"https://files.pythonhosted.org/packages/9c/e8/44ae3e68c8b6d1cbc59040288056df2ad7f7f03bbcaca6b503c737ab8e73/cryptography-44.0.2-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl";,
 hash = 
"sha256:7bdcd82189759aba3816d1f729ce42ffded1ac304c151d0a8e89b9996ab863d5", size 
= 3678122 },
+    { url = 
"https://files.pythonhosted.org/packages/27/7b/664ea5e0d1eab511a10e480baf1c5d3e681c7d91718f60e149cec09edf01/cryptography-44.0.2-cp37-abi3-manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:4973da6ca3db4405c54cd0b26d328be54c7747e89e284fcff166132eb7bccc9c", size 
= 4191831 },
+    { url = 
"https://files.pythonhosted.org/packages/2a/07/79554a9c40eb11345e1861f46f845fa71c9e25bf66d132e123d9feb8e7f9/cryptography-44.0.2-cp37-abi3-manylinux_2_34_aarch64.whl";,
 hash = 
"sha256:4e389622b6927d8133f314949a9812972711a111d577a5d1f4bee5e58736b80a", size 
= 3960583 },
+    { url = 
"https://files.pythonhosted.org/packages/bb/6d/858e356a49a4f0b591bd6789d821427de18432212e137290b6d8a817e9bf/cryptography-44.0.2-cp37-abi3-manylinux_2_34_x86_64.whl";,
 hash = 
"sha256:f514ef4cd14bb6fb484b4a60203e912cfcb64f2ab139e88c2274511514bf7308", size 
= 4191753 },
+    { url = 
"https://files.pythonhosted.org/packages/b2/80/62df41ba4916067fa6b125aa8c14d7e9181773f0d5d0bd4dcef580d8b7c6/cryptography-44.0.2-cp37-abi3-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:1bc312dfb7a6e5d66082c87c34c8a62176e684b6fe3d90fcfe1568de675e6688", size 
= 4079550 },
+    { url = 
"https://files.pythonhosted.org/packages/f3/cd/2558cc08f7b1bb40683f99ff4327f8dcfc7de3affc669e9065e14824511b/cryptography-44.0.2-cp37-abi3-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:3b721b8b4d948b218c88cb8c45a01793483821e709afe5f622861fc6182b20a7", size 
= 4298367 },
+    { url = 
"https://files.pythonhosted.org/packages/71/59/94ccc74788945bc3bd4cf355d19867e8057ff5fdbcac781b1ff95b700fb1/cryptography-44.0.2-cp37-abi3-win32.whl";,
 hash = 
"sha256:51e4de3af4ec3899d6d178a8c005226491c27c4ba84101bfb59c901e10ca9f79", size 
= 2772843 },
+    { url = 
"https://files.pythonhosted.org/packages/ca/2c/0d0bbaf61ba05acb32f0841853cfa33ebb7a9ab3d9ed8bb004bd39f2da6a/cryptography-44.0.2-cp37-abi3-win_amd64.whl";,
 hash = 
"sha256:c505d61b6176aaf982c5717ce04e87da5abc9a36a5b39ac03905c4aafe8de7aa", size 
= 3209057 },
+    { url = 
"https://files.pythonhosted.org/packages/9e/be/7a26142e6d0f7683d8a382dd963745e65db895a79a280a30525ec92be890/cryptography-44.0.2-cp39-abi3-macosx_10_9_universal2.whl";,
 hash = 
"sha256:8e0ddd63e6bf1161800592c71ac794d3fb8001f2caebe0966e77c5234fa9efc3", size 
= 6677789 },
+    { url = 
"https://files.pythonhosted.org/packages/06/88/638865be7198a84a7713950b1db7343391c6066a20e614f8fa286eb178ed/cryptography-44.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:81276f0ea79a208d961c433a947029e1a15948966658cf6710bbabb60fcc2639", size 
= 3951919 },
+    { url = 
"https://files.pythonhosted.org/packages/d7/fc/99fe639bcdf58561dfad1faa8a7369d1dc13f20acd78371bb97a01613585/cryptography-44.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:9a1e657c0f4ea2a23304ee3f964db058c9e9e635cc7019c4aa21c330755ef6fd", size 
= 4167812 },
+    { url = 
"https://files.pythonhosted.org/packages/53/7b/aafe60210ec93d5d7f552592a28192e51d3c6b6be449e7fd0a91399b5d07/cryptography-44.0.2-cp39-abi3-manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:6210c05941994290f3f7f175a4a57dbbb2afd9273657614c506d5976db061181", size 
= 3958571 },
+    { url = 
"https://files.pythonhosted.org/packages/16/32/051f7ce79ad5a6ef5e26a92b37f172ee2d6e1cce09931646eef8de1e9827/cryptography-44.0.2-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl";,
 hash = 
"sha256:d1c3572526997b36f245a96a2b1713bf79ce99b271bbcf084beb6b9b075f29ea", size 
= 3679832 },
+    { url = 
"https://files.pythonhosted.org/packages/78/2b/999b2a1e1ba2206f2d3bca267d68f350beb2b048a41ea827e08ce7260098/cryptography-44.0.2-cp39-abi3-manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:b042d2a275c8cee83a4b7ae30c45a15e6a4baa65a179a0ec2d78ebb90e4f6699", size 
= 4193719 },
+    { url = 
"https://files.pythonhosted.org/packages/72/97/430e56e39a1356e8e8f10f723211a0e256e11895ef1a135f30d7d40f2540/cryptography-44.0.2-cp39-abi3-manylinux_2_34_aarch64.whl";,
 hash = 
"sha256:d03806036b4f89e3b13b6218fefea8d5312e450935b1a2d55f0524e2ed7c59d9", size 
= 3960852 },
+    { url = 
"https://files.pythonhosted.org/packages/89/33/c1cf182c152e1d262cac56850939530c05ca6c8d149aa0dcee490b417e99/cryptography-44.0.2-cp39-abi3-manylinux_2_34_x86_64.whl";,
 hash = 
"sha256:c7362add18b416b69d58c910caa217f980c5ef39b23a38a0880dfd87bdf8cd23", size 
= 4193906 },
+    { url = 
"https://files.pythonhosted.org/packages/e1/99/87cf26d4f125380dc674233971069bc28d19b07f7755b29861570e513650/cryptography-44.0.2-cp39-abi3-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:8cadc6e3b5a1f144a039ea08a0bdb03a2a92e19c46be3285123d32029f40a922", size 
= 4081572 },
+    { url = 
"https://files.pythonhosted.org/packages/b3/9f/6a3e0391957cc0c5f84aef9fbdd763035f2b52e998a53f99345e3ac69312/cryptography-44.0.2-cp39-abi3-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:6f101b1f780f7fc613d040ca4bdf835c6ef3b00e9bd7125a4255ec574c7916e4", size 
= 4298631 },
+    { url = 
"https://files.pythonhosted.org/packages/e2/a5/5bc097adb4b6d22a24dea53c51f37e480aaec3465285c253098642696423/cryptography-44.0.2-cp39-abi3-win32.whl";,
 hash = 
"sha256:3dc62975e31617badc19a906481deacdeb80b4bb454394b4098e3f2525a488c5", size 
= 2773792 },
+    { url = 
"https://files.pythonhosted.org/packages/33/cf/1f7649b8b9a3543e042d3f348e398a061923ac05b507f3f4d95f11938aa9/cryptography-44.0.2-cp39-abi3-win_amd64.whl";,
 hash = 
"sha256:5f6f90b72d8ccadb9c6e311c775c8305381db88374c65fa1a68250aa8a9cb3a6", size 
= 3210957 },
 ]
 
 [[package]]
 name = "cssbeautifier"
-version = "1.15.3"
+version = "1.15.4"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "editorconfig" },
     { name = "jsbeautifier" },
     { name = "six" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/40/0b/fcde8f7f07969ee4965ba443c5cb436988ee132bb7c1b4ddb4bd92bf4f90/cssbeautifier-1.15.3.tar.gz";,
 hash = 
"sha256:406b04d09e7d62c0be084fbfa2cba5126fe37359ea0d8d9f7b963a6354fc8303", size 
= 25359 }
+sdist = { url = 
"https://files.pythonhosted.org/packages/f7/01/fdf41c1e5f93d359681976ba10410a04b299d248e28ecce1d4e88588dde4/cssbeautifier-1.15.4.tar.gz";,
 hash = 
"sha256:9bb08dc3f64c101a01677f128acf01905914cf406baf87434dcde05b74c0acf5", size 
= 25376 }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/7b/5e/1173945ad452bc72600dd7605581f49d458b0fc8e9e165221c81a74b6316/cssbeautifier-1.15.3-py3-none-any.whl";,
 hash = 
"sha256:0dcaf5ce197743a79b3a160b84ea58fcbd9e3e767c96df1171e428125b16d410", size 
= 123667 },
+    { url = 
"https://files.pythonhosted.org/packages/63/51/ef6c5628e46092f0a54c7cee69acc827adc6b6aab57b55d344fefbdf28f1/cssbeautifier-1.15.4-py3-none-any.whl";,
 hash = 
"sha256:78c84d5e5378df7d08622bbd0477a1abdbd209680e95480bf22f12d5701efc98", size 
= 123667 },
 ]
 
 [[package]]
@@ -611,15 +593,15 @@ wheels = [
 
 [[package]]
 name = "jsbeautifier"
-version = "1.15.3"
+version = "1.15.4"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "editorconfig" },
     { name = "six" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/cf/74/a37cc6fe8ab3f217657d345dfba0612758807536dca5ca5d2f6a81e3623d/jsbeautifier-1.15.3.tar.gz";,
 hash = 
"sha256:5f1baf3d4ca6a615bb5417ee861b34b77609eeb12875555f8bbfabd9bf2f3457", size 
= 75261 }
+sdist = { url = 
"https://files.pythonhosted.org/packages/ea/98/d6cadf4d5a1c03b2136837a435682418c29fdeb66be137128544cecc5b7a/jsbeautifier-1.15.4.tar.gz";,
 hash = 
"sha256:5bb18d9efb9331d825735fbc5360ee8f1aac5e52780042803943aa7f854f7592", size 
= 75257 }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/c5/09/cabdf2ed67ba8281ed2025e322c2fc9502a135f756c0a3a3eb60c12eb4fa/jsbeautifier-1.15.3-py3-none-any.whl";,
 hash = 
"sha256:b207a15ab7529eee4a35ae7790e9ec4e32a2b5026d51e2d0386c3a65e6ecfc91", size 
= 94706 },
+    { url = 
"https://files.pythonhosted.org/packages/2d/14/1c65fccf8413d5f5c6e8425f84675169654395098000d8bddc4e9d3390e1/jsbeautifier-1.15.4-py3-none-any.whl";,
 hash = 
"sha256:72f65de312a3f10900d7685557f84cb61a9733c50dcc27271a39f5b0051bf528", size 
= 94707 },
 ]
 
 [[package]]
@@ -631,18 +613,6 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/aa/42/797895b952b682c3dafe23b1834507ee7f02f4d6299b65aaa61425763278/json5-0.10.0-py3-none-any.whl";,
 hash = 
"sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa", size 
= 34049 },
 ]
 
-[[package]]
-name = "license-expression"
-version = "30.4.1"
-source = { registry = "https://pypi.org/simple"; }
-dependencies = [
-    { name = "boolean-py" },
-]
-sdist = { url = 
"https://files.pythonhosted.org/packages/74/6f/8709031ea6e0573e6075d24ea34507b0eb32f83f10e1420f2e34606bf0da/license_expression-30.4.1.tar.gz";,
 hash = 
"sha256:9f02105f9e0fcecba6a85dfbbed7d94ea1c3a70cf23ddbfb5adf3438a6f6fce0", size 
= 177184 }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/53/84/8a89614b2e7eeeaf0a68a4046d6cfaea4544c8619ea02595ebeec9b2bae3/license_expression-30.4.1-py3-none-any.whl";,
 hash = 
"sha256:679646bc3261a17690494a3e1cada446e5ee342dbd87dcfa4a0c24cc5dce13ee", size 
= 111457 },
-]
-
 [[package]]
 name = "mako"
 version = "1.3.9"
@@ -780,15 +750,6 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl";,
 hash = 
"sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size 
= 20556 },
 ]
 
-[[package]]
-name = "ply"
-version = "3.11"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz";,
 hash = 
"sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size 
= 159130 }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl";,
 hash = 
"sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size 
= 49567 },
-]
-
 [[package]]
 name = "pre-commit"
 version = "4.1.0"
@@ -912,31 +873,22 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/9e/11/a1938340ecb32d71e47ad4914843775011e6e9da59ba1229f181fef3119e/pyhumps-3.8.0-py3-none-any.whl";,
 hash = 
"sha256:060e1954d9069f428232a1adda165db0b9d8dfdce1d265d36df7fbff540acfd6", size 
= 6095 },
 ]
 
-[[package]]
-name = "pyparsing"
-version = "3.2.1"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/8b/1a/3544f4f299a47911c2ab3710f534e52fea62a633c96806995da5d25be4b2/pyparsing-3.2.1.tar.gz";,
 hash = 
"sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a", size 
= 1067694 }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl";,
 hash = 
"sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", size 
= 107716 },
-]
-
 [[package]]
 name = "pyright"
-version = "1.1.395"
+version = "1.1.396"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "nodeenv" },
     { name = "typing-extensions" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/fb/47/a2e1dfd70f9f0db34f70d5b108c82be57bf24185af69c95acff57f9239fa/pyright-1.1.395.tar.gz";,
 hash = 
"sha256:53703169068c160bfb41e1b44ba3e2512492869c26cfad927e1268cb3fbb1b1c", size 
= 3813566 }
+sdist = { url = 
"https://files.pythonhosted.org/packages/bd/73/f20cb1dea1bdc1774e7f860fb69dc0718c7d8dea854a345faec845eb086a/pyright-1.1.396.tar.gz";,
 hash = 
"sha256:142901f5908f5a0895be3d3befcc18bedcdb8cc1798deecaec86ef7233a29b03", size 
= 3814400 }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/5f/a1/531897f8caa6c6cc99862cd1c908ddd8a366a51d968e83ab4523ded98b30/pyright-1.1.395-py3-none-any.whl";,
 hash = 
"sha256:f9bc726870e740c6c77c94657734d90563a3e9765bb523b39f5860198ed75eef", size 
= 5688787 },
+    { url = 
"https://files.pythonhosted.org/packages/80/be/ecb7cfb42d242b7ee764b52e6ff4782beeec00e3b943a3ec832b281f9da6/pyright-1.1.396-py3-none-any.whl";,
 hash = 
"sha256:c635e473095b9138c471abccca22b9fedbe63858e0b40d4fc4b67da041891844", size 
= 5689355 },
 ]
 
 [[package]]
 name = "pytest"
-version = "8.3.4"
+version = "8.3.5"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "colorama", marker = "sys_platform == 'win32'" },
@@ -944,9 +896,9 @@ dependencies = [
     { name = "packaging" },
     { name = "pluggy" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/05/35/30e0d83068951d90a01852cb1cef56e5d8a09d20c7f511634cc2f7e0372a/pytest-8.3.4.tar.gz";,
 hash = 
"sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761", size 
= 1445919 }
+sdist = { url = 
"https://files.pythonhosted.org/packages/ae/3c/c9d525a414d506893f0cd8a8d0de7706446213181570cdbd766691164e40/pytest-8.3.5.tar.gz";,
 hash = 
"sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845", size 
= 1450891 }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl";,
 hash = 
"sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", size 
= 343083 },
+    { url = 
"https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl";,
 hash = 
"sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size 
= 343634 },
 ]
 
 [[package]]
@@ -1029,18 +981,6 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/ae/b7/c5cfa45ec6835005f72c7d667508e91a5f00f656ece2bd83e9ecb0d8643d/quart_schema-0.21.0-py3-none-any.whl";,
 hash = 
"sha256:57b8f7d2f8cc5bcbf6b2200ed17f870fc26811c5d0ac5c6a02352644ab068129", size 
= 21360 },
 ]
 
-[[package]]
-name = "rdflib"
-version = "7.1.3"
-source = { registry = "https://pypi.org/simple"; }
-dependencies = [
-    { name = "pyparsing" },
-]
-sdist = { url = 
"https://files.pythonhosted.org/packages/96/12/f43307e7b1f871ed5424fc6eff1fb8c85637dbaed6a401748c2b72c97d7a/rdflib-7.1.3.tar.gz";,
 hash = 
"sha256:f3dcb4c106a8cd9e060d92f43d593d09ebc3d07adc244f4c7315856a12e383ee", size 
= 4867170 }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/9c/3c/f508a9b346078ea0bd49c8261430204fcfb4150352d51fa2a54a4d9eacda/rdflib-7.1.3-py3-none-any.whl";,
 hash = 
"sha256:5402310a9f0f3c07d453d73fd0ad6ba35616286fe95d3670db2b725f3f539673", size 
= 564909 },
-]
-
 [[package]]
 name = "regex"
 version = "2024.11.6"
@@ -1081,36 +1021,27 @@ wheels = [
 
 [[package]]
 name = "ruff"
-version = "0.9.7"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/39/8b/a86c300359861b186f18359adf4437ac8e4c52e42daa9eedc731ef9d5b53/ruff-0.9.7.tar.gz";,
 hash = 
"sha256:643757633417907510157b206e490c3aa11cab0c087c912f60e07fbafa87a4c6", size 
= 3669813 }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/b1/f3/3a1d22973291226df4b4e2ff70196b926b6f910c488479adb0eeb42a0d7f/ruff-0.9.7-py3-none-linux_armv6l.whl";,
 hash = 
"sha256:99d50def47305fe6f233eb8dabfd60047578ca87c9dcb235c9723ab1175180f4", size 
= 11774588 },
-    { url = 
"https://files.pythonhosted.org/packages/8e/c9/b881f4157b9b884f2994fd08ee92ae3663fb24e34b0372ac3af999aa7fc6/ruff-0.9.7-py3-none-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:d59105ae9c44152c3d40a9c40d6331a7acd1cdf5ef404fbe31178a77b174ea66", size 
= 11746848 },
-    { url = 
"https://files.pythonhosted.org/packages/14/89/2f546c133f73886ed50a3d449e6bf4af27d92d2f960a43a93d89353f0945/ruff-0.9.7-py3-none-macosx_11_0_arm64.whl";,
 hash = 
"sha256:f313b5800483770bd540cddac7c90fc46f895f427b7820f18fe1822697f1fec9", size 
= 11177525 },
-    { url = 
"https://files.pythonhosted.org/packages/d7/93/6b98f2c12bf28ab9def59c50c9c49508519c5b5cfecca6de871cf01237f6/ruff-0.9.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:042ae32b41343888f59c0a4148f103208bf6b21c90118d51dc93a68366f4e903", size 
= 11996580 },
-    { url = 
"https://files.pythonhosted.org/packages/8e/3f/b3fcaf4f6d875e679ac2b71a72f6691a8128ea3cb7be07cbb249f477c061/ruff-0.9.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:87862589373b33cc484b10831004e5e5ec47dc10d2b41ba770e837d4f429d721", size 
= 11525674 },
-    { url = 
"https://files.pythonhosted.org/packages/f0/48/33fbf18defb74d624535d5d22adcb09a64c9bbabfa755bc666189a6b2210/ruff-0.9.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl";,
 hash = 
"sha256:a17e1e01bee0926d351a1ee9bc15c445beae888f90069a6192a07a84af544b6b", size 
= 12739151 },
-    { url = 
"https://files.pythonhosted.org/packages/63/b5/7e161080c5e19fa69495cbab7c00975ef8a90f3679caa6164921d7f52f4a/ruff-0.9.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl";,
 hash = 
"sha256:7c1f880ac5b2cbebd58b8ebde57069a374865c73f3bf41f05fe7a179c1c8ef22", size 
= 13416128 },
-    { url = 
"https://files.pythonhosted.org/packages/4e/c8/b5e7d61fb1c1b26f271ac301ff6d9de5e4d9a9a63f67d732fa8f200f0c88/ruff-0.9.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl";,
 hash = 
"sha256:e63fc20143c291cab2841dbb8260e96bafbe1ba13fd3d60d28be2c71e312da49", size 
= 12870858 },
-    { url = 
"https://files.pythonhosted.org/packages/da/cb/2a1a8e4e291a54d28259f8fc6a674cd5b8833e93852c7ef5de436d6ed729/ruff-0.9.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:91ff963baed3e9a6a4eba2a02f4ca8eaa6eba1cc0521aec0987da8d62f53cbef", size 
= 14786046 },
-    { url = 
"https://files.pythonhosted.org/packages/ca/6c/c8f8a313be1943f333f376d79724260da5701426c0905762e3ddb389e3f4/ruff-0.9.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:88362e3227c82f63eaebf0b2eff5b88990280fb1ecf7105523883ba8c3aaf6fb", size 
= 12550834 },
-    { url = 
"https://files.pythonhosted.org/packages/9d/ad/f70cf5e8e7c52a25e166bdc84c082163c9c6f82a073f654c321b4dff9660/ruff-0.9.7-py3-none-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:0372c5a90349f00212270421fe91874b866fd3626eb3b397ede06cd385f6f7e0", size 
= 11961307 },
-    { url = 
"https://files.pythonhosted.org/packages/52/d5/4f303ea94a5f4f454daf4d02671b1fbfe2a318b5fcd009f957466f936c50/ruff-0.9.7-py3-none-musllinux_1_2_armv7l.whl";,
 hash = 
"sha256:d76b8ab60e99e6424cd9d3d923274a1324aefce04f8ea537136b8398bbae0a62", size 
= 11612039 },
-    { url = 
"https://files.pythonhosted.org/packages/eb/c8/bd12a23a75603c704ce86723be0648ba3d4ecc2af07eecd2e9fa112f7e19/ruff-0.9.7-py3-none-musllinux_1_2_i686.whl";,
 hash = 
"sha256:0c439bdfc8983e1336577f00e09a4e7a78944fe01e4ea7fe616d00c3ec69a3d0", size 
= 12168177 },
-    { url = 
"https://files.pythonhosted.org/packages/cc/57/d648d4f73400fef047d62d464d1a14591f2e6b3d4a15e93e23a53c20705d/ruff-0.9.7-py3-none-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:115d1f15e8fdd445a7b4dc9a30abae22de3f6bcabeb503964904471691ef7606", size 
= 12610122 },
-    { url = 
"https://files.pythonhosted.org/packages/49/79/acbc1edd03ac0e2a04ae2593555dbc9990b34090a9729a0c4c0cf20fb595/ruff-0.9.7-py3-none-win32.whl";,
 hash = 
"sha256:e9ece95b7de5923cbf38893f066ed2872be2f2f477ba94f826c8defdd6ec6b7d", size 
= 9988751 },
-    { url = 
"https://files.pythonhosted.org/packages/6d/95/67153a838c6b6ba7a2401241fd8a00cd8c627a8e4a0491b8d853dedeffe0/ruff-0.9.7-py3-none-win_amd64.whl";,
 hash = 
"sha256:3770fe52b9d691a15f0b87ada29c45324b2ace8f01200fb0c14845e499eb0c2c", size 
= 11002987 },
-    { url = 
"https://files.pythonhosted.org/packages/63/6a/aca01554949f3a401991dc32fe22837baeaccb8a0d868256cbb26a029778/ruff-0.9.7-py3-none-win_arm64.whl";,
 hash = 
"sha256:b075a700b2533feb7a01130ff656a4ec0d5f340bb540ad98759b8401c32c2037", size 
= 10177763 },
-]
-
-[[package]]
-name = "semantic-version"
-version = "2.10.0"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/7d/31/f2289ce78b9b473d582568c234e104d2a342fd658cc288a7553d83bb8595/semantic_version-2.10.0.tar.gz";,
 hash = 
"sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", size 
= 52289 }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl";,
 hash = 
"sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size 
= 15552 },
+version = "0.9.9"
+source = { registry = "https://pypi.org/simple"; }
+sdist = { url = 
"https://files.pythonhosted.org/packages/6f/c3/418441a8170e8d53d05c0b9dad69760dbc7b8a12c10dbe6db1e1205d2377/ruff-0.9.9.tar.gz";,
 hash = 
"sha256:0062ed13f22173e85f8f7056f9a24016e692efeea8704d1a5e8011b8aa850933", size 
= 3717448 }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/bc/c3/2c4afa9ba467555d074b146d9aed0633a56ccdb900839fb008295d037b89/ruff-0.9.9-py3-none-linux_armv6l.whl";,
 hash = 
"sha256:628abb5ea10345e53dff55b167595a159d3e174d6720bf19761f5e467e68d367", size 
= 10027252 },
+    { url = 
"https://files.pythonhosted.org/packages/33/d1/439e58487cf9eac26378332e25e7d5ade4b800ce1eec7dc2cfc9b0d7ca96/ruff-0.9.9-py3-none-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:b6cd1428e834b35d7493354723543b28cc11dc14d1ce19b685f6e68e07c05ec7", size 
= 10840721 },
+    { url = 
"https://files.pythonhosted.org/packages/50/44/fead822c38281ba0122f1b76b460488a175a9bd48b130650a6fb6dbcbcf9/ruff-0.9.9-py3-none-macosx_11_0_arm64.whl";,
 hash = 
"sha256:5ee162652869120ad260670706f3cd36cd3f32b0c651f02b6da142652c54941d", size 
= 10161439 },
+    { url = 
"https://files.pythonhosted.org/packages/11/ae/d404a2ab8e61ddf6342e09cc6b7f7846cce6b243e45c2007dbe0ca928a5d/ruff-0.9.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:3aa0f6b75082c9be1ec5a1db78c6d4b02e2375c3068438241dc19c7c306cc61a", size 
= 10336264 },
+    { url = 
"https://files.pythonhosted.org/packages/6a/4e/7c268aa7d84cd709fb6f046b8972313142cffb40dfff1d2515c5e6288d54/ruff-0.9.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:584cc66e89fb5f80f84b05133dd677a17cdd86901d6479712c96597a3f28e7fe", size 
= 9908774 },
+    { url = 
"https://files.pythonhosted.org/packages/cc/26/c618a878367ef1b76270fd027ca93692657d3f6122b84ba48911ef5f2edc/ruff-0.9.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl";,
 hash = 
"sha256:abf3369325761a35aba75cd5c55ba1b5eb17d772f12ab168fbfac54be85cf18c", size 
= 11428127 },
+    { url = 
"https://files.pythonhosted.org/packages/d7/9a/c5588a93d9bfed29f565baf193fe802fa676a0c837938137ea6cf0576d8c/ruff-0.9.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl";,
 hash = 
"sha256:3403a53a32a90ce929aa2f758542aca9234befa133e29f4933dcef28a24317be", size 
= 12133187 },
+    { url = 
"https://files.pythonhosted.org/packages/3e/ff/e7980a7704a60905ed7e156a8d73f604c846d9bd87deda9cabfa6cba073a/ruff-0.9.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl";,
 hash = 
"sha256:18454e7fa4e4d72cffe28a37cf6a73cb2594f81ec9f4eca31a0aaa9ccdfb1590", size 
= 11602937 },
+    { url = 
"https://files.pythonhosted.org/packages/24/78/3690444ad9e3cab5c11abe56554c35f005b51d1d118b429765249095269f/ruff-0.9.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:0fadfe2c88724c9617339f62319ed40dcdadadf2888d5afb88bf3adee7b35bfb", size 
= 13771698 },
+    { url = 
"https://files.pythonhosted.org/packages/6e/bf/e477c2faf86abe3988e0b5fd22a7f3520e820b2ee335131aca2e16120038/ruff-0.9.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:6df104d08c442a1aabcfd254279b8cc1e2cbf41a605aa3e26610ba1ec4acf0b0", size 
= 11249026 },
+    { url = 
"https://files.pythonhosted.org/packages/f7/82/cdaffd59e5a8cb5b14c408c73d7a555a577cf6645faaf83e52fe99521715/ruff-0.9.9-py3-none-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:d7c62939daf5b2a15af48abbd23bea1efdd38c312d6e7c4cedf5a24e03207e17", size 
= 10220432 },
+    { url = 
"https://files.pythonhosted.org/packages/fe/a4/2507d0026225efa5d4412b6e294dfe54725a78652a5c7e29e6bd0fc492f3/ruff-0.9.9-py3-none-musllinux_1_2_armv7l.whl";,
 hash = 
"sha256:9494ba82a37a4b81b6a798076e4a3251c13243fc37967e998efe4cce58c8a8d1", size 
= 9874602 },
+    { url = 
"https://files.pythonhosted.org/packages/d5/be/f3aab1813846b476c4bcffe052d232244979c3cd99d751c17afb530ca8e4/ruff-0.9.9-py3-none-musllinux_1_2_i686.whl";,
 hash = 
"sha256:4efd7a96ed6d36ef011ae798bf794c5501a514be369296c672dab7921087fa57", size 
= 10851212 },
+    { url = 
"https://files.pythonhosted.org/packages/8b/45/8e5fd559bea0d2f57c4e12bf197a2fade2fac465aa518284f157dfbca92b/ruff-0.9.9-py3-none-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:ab90a7944c5a1296f3ecb08d1cbf8c2da34c7e68114b1271a431a3ad30cb660e", size 
= 11327490 },
+    { url = 
"https://files.pythonhosted.org/packages/42/55/e6c90f13880aeef327746052907e7e930681f26a164fe130ddac28b08269/ruff-0.9.9-py3-none-win32.whl";,
 hash = 
"sha256:6b4c376d929c25ecd6d87e182a230fa4377b8e5125a4ff52d506ee8c087153c1", size 
= 10227912 },
+    { url = 
"https://files.pythonhosted.org/packages/35/b2/da925693cb82a1208aa34966c0f36cb222baca94e729dd22a587bc22d0f3/ruff-0.9.9-py3-none-win_amd64.whl";,
 hash = 
"sha256:837982ea24091d4c1700ddb2f63b7070e5baec508e43b01de013dc7eff974ff1", size 
= 11355632 },
+    { url = 
"https://files.pythonhosted.org/packages/31/d8/de873d1c1b020d668d8ec9855d390764cb90cf8f6486c0983da52be8b7b7/ruff-0.9.9-py3-none-win_arm64.whl";,
 hash = 
"sha256:3ac78f127517209fe6d96ab00f3ba97cafe38718b23b1db3e96d8b2d39e37ddf", size 
= 10435860 },
 ]
 
 [[package]]
@@ -1131,26 +1062,6 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl";,
 hash = 
"sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size 
= 10235 },
 ]
 
-[[package]]
-name = "spdx-tools"
-version = "0.8.3"
-source = { registry = "https://pypi.org/simple"; }
-dependencies = [
-    { name = "beartype" },
-    { name = "click" },
-    { name = "license-expression" },
-    { name = "ply" },
-    { name = "pyyaml" },
-    { name = "rdflib" },
-    { name = "semantic-version" },
-    { name = "uritools" },
-    { name = "xmltodict" },
-]
-sdist = { url = 
"https://files.pythonhosted.org/packages/f1/99/3470b28dc4b64fd29db3b1dcf5e84c743ec88e25ea7b214794f5930f0319/spdx-tools-0.8.3.tar.gz";,
 hash = 
"sha256:68b8f9ce2893b5216bd90b2e63f1c821c2884e4ebc4fd295ebbf1fa8b8a94b93", size 
= 681626 }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/5a/bc/09994d78b66da8535ab339047c2381409f028581c0bbde53287745d3cab1/spdx_tools-0.8.3-py3-none-any.whl";,
 hash = 
"sha256:638fd9bd8be61901316eb6d063574e16d5403a1870073ec4d9241426a997501a", size 
= 285435 },
-]
-
 [[package]]
 name = "sqlalchemy"
 version = "2.0.38"
@@ -1174,15 +1085,15 @@ wheels = [
 
 [[package]]
 name = "sqlmodel"
-version = "0.0.22"
+version = "0.0.23"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "pydantic" },
     { name = "sqlalchemy" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/b5/39/8641040ab0d5e1d8a1c2325ae89a01ae659fc96c61a43d158fb71c9a0bf0/sqlmodel-0.0.22.tar.gz";,
 hash = 
"sha256:7d37c882a30c43464d143e35e9ecaf945d88035e20117bf5ec2834a23cbe505e", size 
= 116392 }
+sdist = { url = 
"https://files.pythonhosted.org/packages/8a/80/bf350000c48ad2bebf0687eef15a2e505ae1cf60813bbe364df030c7a2d6/sqlmodel-0.0.23.tar.gz";,
 hash = 
"sha256:2b36be0d8b751c211864ec59c8c07c008078dbdeaf516f597eb61880a615197b", size 
= 116693 }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/dd/b1/3af5104b716c420e40a6ea1b09886cae3a1b9f4538343875f637755cae5b/sqlmodel-0.0.22-py3-none-any.whl";,
 hash = 
"sha256:a1ed13e28a1f4057cbf4ff6cdb4fc09e85702621d3259ba17b3c230bfb2f941b", size 
= 28276 },
+    { url = 
"https://files.pythonhosted.org/packages/45/07/aa7bf5b742a984d82c787f15bd1ffbe62b12b778250af77573446deae11f/sqlmodel-0.0.23-py3-none-any.whl";,
 hash = 
"sha256:93810464b11810845920e0fedfabb31af2ccc2bb670637e9445da7ccee5f9f46", size 
= 28627 },
 ]
 
 [[package]]
@@ -1202,7 +1113,6 @@ dependencies = [
     { name = "python-decouple" },
     { name = "python-gnupg" },
     { name = "quart-schema" },
-    { name = "spdx-tools" },
     { name = "sqlmodel" },
 ]
 
@@ -1234,7 +1144,6 @@ requires-dist = [
     { name = "python-decouple", specifier = "~=3.8" },
     { name = "python-gnupg", specifier = "~=0.5" },
     { name = "quart-schema", specifier = "~=0.21" },
-    { name = "spdx-tools", specifier = ">=0.8.3,<0.9.0" },
     { name = "sqlmodel", specifier = "~=0.0" },
 ]
 
@@ -1282,15 +1191,6 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl";,
 hash = 
"sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size 
= 37438 },
 ]
 
-[[package]]
-name = "uritools"
-version = "4.0.3"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/d3/43/4182fb2a03145e6d38698e38b49114ce59bc8c79063452eb585a58f8ce78/uritools-4.0.3.tar.gz";,
 hash = 
"sha256:ee06a182a9c849464ce9d5fa917539aacc8edd2a4924d1b7aabeeecabcae3bc2", size 
= 24184 }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/e6/17/5a4510d9ca9cc8be217ce359eb54e693dca81cf4d442308b282d5131b17d/uritools-4.0.3-py3-none-any.whl";,
 hash = 
"sha256:bae297d090e69a0451130ffba6f2f1c9477244aa0a5543d66aed2d9f77d0dd9c", size 
= 10304 },
-]
-
 [[package]]
 name = "urllib3"
 version = "2.3.0"
@@ -1361,15 +1261,6 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl";,
 hash = 
"sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736", size 
= 24226 },
 ]
 
-[[package]]
-name = "xmltodict"
-version = "0.14.2"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/50/05/51dcca9a9bf5e1bce52582683ce50980bcadbc4fa5143b9f2b19ab99958f/xmltodict-0.14.2.tar.gz";,
 hash = 
"sha256:201e7c28bb210e374999d1dde6382923ab0ed1a8a5faeece48ab525b7810a553", size 
= 51942 }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/d6/45/fc303eb433e8a2a271739c98e953728422fa61a3c1f36077a49e395c972e/xmltodict-0.14.2-py2.py3-none-any.whl";,
 hash = 
"sha256:20cc7d723ed729276e808f26fb6b3599f786cbc37e06c65e192ba77c40f20aac", size 
= 9981 },
-]
-
 [[package]]
 name = "yarl"
 version = "1.18.3"


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to