diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 5b241ec..59bf9d0 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -21,7 +21,8 @@
"ms-azuretools.vscode-docker",
"github.vscode-github-actions",
"ms-python.isort",
- "ms-toolsai.jupyter"
+ "ms-toolsai.jupyter",
+ "ms-vscode.makefile-tools"
]
}
}
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index f33a02c..16b42ec 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -10,3 +10,12 @@ updates:
directory: "/"
schedule:
interval: weekly
+ - package-ecosystem: "docker"
+ directory: "/"
+ schedule:
+ interval: weekly
+ - package-ecosystem: "pip"
+ directory: "/"
+ schedule:
+ interval: weekly
+ -
diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml
new file mode 100644
index 0000000..28b6487
--- /dev/null
+++ b/.github/workflows/cicd.yml
@@ -0,0 +1,114 @@
+name: CI/CD pipeline
+
+on:
+ push:
+ branches:
+ - "*"
+
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Build Docker image
+ run: |
+ docker build -t django2pydantic .
+
+ - name: Run tests
+ run: |
+ docker run --volume $(pwd):/app --workdir /app --rm django2pydantic nox -s noop
+
+ build:
+ name: Build distribution 📦
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+ - name: Set up Python
+ uses: actions/setup-python@v2
+ with:
+ python-version: "3.x"
+ - name: Install pypa/build
+ run: >-
+ python3 -m
+ pip install
+ build
+ --user
+ - name: Build a binary wheel and a source tarball
+ run: python3 -m build
+ - name: Store the distribution packages
+ uses: actions/upload-artifact@v4
+ with:
+ path: dist/
+ name: python-package-distributions
+
+ release:
+ # If main branch is updated, we want to release the package.
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
+ needs:
+ - tests
+ - build
+ concurrency: release
+ runs-on: ubuntu-latest
+
+ permissions:
+ id-token: write
+ contents: write
+
+ steps:
+ # Note: we need to checkout the repository at the workflow sha in case during the workflow
+ # the branch was updated. To keep PSR working with the configured release branches,
+ # we force a checkout of the desired release branch but at the workflow sha HEAD.
+ - name: Setup | Checkout Repository at workflow sha
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ ref: ${{ github.sha }}
+
+ - name: Setup | Force correct release branch on workflow sha
+ run: |
+ git checkout -B ${{ github.ref_name }} ${{ github.sha }}
+
+ - name: Action | Semantic Version Release
+ id: release
+ # Adjust tag with desired version if applicable.
+ uses: python-semantic-release/python-semantic-release@v9.14.0
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ git_committer_name: "github-actions"
+ git_committer_email: "actions@users.noreply.github.com"
+
+ - name: Publish | Upload to GitHub Release Assets
+ uses: python-semantic-release/publish-action@v9.14.0
+ if: steps.release.outputs.released == 'true'
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ tag: ${{ steps.release.outputs.tag }}
+
+
+ publish-to-testpypi:
+ name: Publish Python 🐍 distribution 📦 to TestPyPI
+ needs:
+ - release
+ runs-on: ubuntu-latest
+
+ environment:
+ name: testpypi
+ url: https://test.pypi.org/p/django2pydantic
+
+ permissions:
+ id-token: write # IMPORTANT: mandatory for trusted publishing
+
+ steps:
+ - name: Download all the dists
+ uses: actions/download-artifact@v4
+ with:
+ name: python-package-distributions
+ path: dist/
+ - name: Publish distribution 📦 to TestPyPI
+ uses: pypa/gh-action-pypi-publish@release/v1
+ with:
+ repository-url: https://test.pypi.org/legacy/
diff --git a/.gitignore b/.gitignore
index 1c5fbed..190b5b7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -446,7 +446,7 @@ $RECYCLE.BIN/
# End of https://www.toptal.com/developers/gitignore/api/macos,linux,windows,visualstudiocode,python,django,pycharm+all
-.testmondata
+.testmondata*
.import_linter_cache
lcov.info
debug.json
diff --git a/.importlinter b/.importlinter
index f69c20a..ab7a7d2 100644
--- a/.importlinter
+++ b/.importlinter
@@ -1,5 +1,5 @@
[importlinter]
-root_package = superschema
+root_package = django2pydantic
include_external_packages = True
@@ -8,7 +8,7 @@ name = Lower layers shall not import from higher layers
type = layers
containers =
- superschema
+ django2pydantic
layers =
handlers
@@ -16,12 +16,7 @@ layers =
schema
ignore_imports =
- superschema.schema -> superschema.registry
-
- superschema.registry -> superschema.handlers.base
- superschema.schema -> superschema.registry
- superschema.schema -> superschema.handlers
- superschema.registry -> superschema.handlers.base
+ django2pydantic.registry -> django2pydantic.handlers.base
[importlinter:contract:tests-restrictions]
@@ -29,7 +24,7 @@ name = Source code shall not import anything from tests
type = forbidden
source_modules =
- superschema
+ django2pydantic
forbidden_modules =
tests
@@ -39,18 +34,18 @@ forbidden_modules =
name = Handlers shall be independent
type = independence
modules =
- superschema.handlers.auto
- superschema.handlers.base
- superschema.handlers.boolean
- superschema.handlers.file
- superschema.handlers.json
- superschema.handlers.network
- superschema.handlers.numbers
- superschema.handlers.property
- superschema.handlers.relational
- superschema.handlers.text
- superschema.handlers.time
+ django2pydantic.handlers.auto
+ django2pydantic.handlers.base
+ django2pydantic.handlers.boolean
+ django2pydantic.handlers.file
+ django2pydantic.handlers.json
+ django2pydantic.handlers.network
+ django2pydantic.handlers.numbers
+ django2pydantic.handlers.property
+ django2pydantic.handlers.relational
+ django2pydantic.handlers.text
+ django2pydantic.handlers.time
ignore_imports =
- superschema.handlers.* -> superschema.handlers.base
- superschema.handlers.relational -> superschema.registry
- superschema.registry -> superschema.handlers.base
+ django2pydantic.handlers.* -> django2pydantic.handlers.base
+ django2pydantic.handlers.relational -> django2pydantic.registry
+ django2pydantic.registry -> django2pydantic.handlers.base
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index f29e215..fd466e4 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -10,6 +10,7 @@
"ms-azuretools.vscode-docker",
"github.vscode-github-actions",
"ms-python.isort",
- "ms-toolsai.jupyter"
+ "ms-toolsai.jupyter",
+ "ms-vscode.makefile-tools"
]
}
\ No newline at end of file
diff --git a/CITATION.cff b/CITATION.cff
index d8600db..9a96af3 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -2,7 +2,7 @@
# Visit https://bit.ly/cffinit to generate yours today!
cff-version: 1.2.0
-title: superschema
+title: django2pydantic
message: >-
If you use this software, please cite it using the
metadata from this file.
@@ -11,7 +11,7 @@ authors:
- given-names: Jukka
family-names: Hassinen
email: jukka.hassinen@gmail.com
-repository-code: 'https://github.com/jhassine/superschema'
+repository-code: 'https://github.com/NextGenContributions/django2pydantic'
abstract: Convert Django models to Pydantic models/schema
keywords:
- Django
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index e69de29..ec910ac 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -0,0 +1,60 @@
+# Contribution guidelines
+
+Contributions are welcome! Here are some guidelines to help you get started.
+
+## Support the project
+
+If you like this project and want to support it, you can:
+
+- Give it a star on GitHub.
+- Share it with others.
+- Report issues or request new features.
+- Contribute code, documentation, or tests.
+- Sponsor the project on GitHub.
+
+
+## Reporting issues
+
+If you find a bug or have a feature request, please open an issue. Make sure to include a detailed description of the issue or feature request, and include any relevant information that can help us reproduce the issue.
+
+
+## Contributing code
+
+### Setup development environment
+
+If you are using Visual Studio Code, you can use the included devcontainer in order to quickly set up a proper development environment.
+
+### Discuss your changes
+
+If you are planning to make a significant change, it is a good idea to discuss it first with the project authors. You can open an issue to discuss your changes or discuss it with other contributors the project's discussion channels.
+
+### Implement your changes
+
+Make your changes in a new git branch. Make sure to add tests for your changes.
+
+### Run the tests and checks
+
+In order for your changes to be accepted, they must pass all the tests and checks. We are using `nox` to run the tests and checks.
+The tests and checks are defined in the [noxfile.py](noxfile.py) file.
+
+You can run `nox` locally to run the tests and checks:
+
+```shell
+nox
+```
+
+### Add yourself to the contributors list
+
+If you want to get credit from your contribution, add yourself to the following files:
+
+- [pyproject.toml](pyproject.toml)
+- [CITATION.cff](CITATION.cff)
+
+### Create a pull request
+
+Once you are happy with your changes, create a pull request. Make sure to include a description of your changes and why they are needed.
+
+### Review process
+
+Your pull request will be reviewed by the project maintainers. They may ask for changes or suggest improvements. Once your pull request is approved, it will be merged into the main branch.
+
diff --git a/Dockerfile b/Dockerfile
index dd4dd63..0a013d3 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,7 +2,6 @@ FROM python:3.12-bookworm
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
-ENV POETRY_VIRTUALENVS_CREATE=0
RUN apt-get update && apt-get install -y --no-install-recommends \
watchman \
diff --git a/LICENSE.txt b/LICENSE.txt
index 5ef69d1..bc7d761 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2024 Jukka Hassinen
+Copyright (c) 2024 See CITATION.cff for the full list of authors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 278d9d5..ce7d747 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# What
-SuperSchema is a library that allows to define Pydantic schemas based on Django database models.
+django2pydantic is a library that allows to define Pydantic schemas based on Django database models.
Similar libraries:
- [Djantic](https://jordaneremieff.github.io/djantic/)
@@ -9,7 +9,7 @@ Similar libraries:
# Why
-SuperSchema is the most complete Pydantic schemas based on Django models.
+django2pydantic is the most complete Pydantic schemas based on Django models.
# Key features
diff --git a/django2pydantic/__init__.py b/django2pydantic/__init__.py
new file mode 100644
index 0000000..c537dad
--- /dev/null
+++ b/django2pydantic/__init__.py
@@ -0,0 +1,7 @@
+"""Super schema packages."""
+
+from django2pydantic.schema import django2pydantic
+from django2pydantic.types import Infer, InferExcept, MetaFields, ModelFields
+
+__all__ = ["Infer", "InferExcept", "ModelFields", "MetaFields", "django2pydantic"]
+__version__ = "0.0.0"
diff --git a/superschema/base.py b/django2pydantic/base.py
similarity index 96%
rename from superschema/base.py
rename to django2pydantic/base.py
index c2a4fb9..d1e8fed 100644
--- a/superschema/base.py
+++ b/django2pydantic/base.py
@@ -14,10 +14,10 @@
from pydantic.fields import FieldInfo
from pydantic_core import PydanticUndefined
-from superschema.defaults import field_type_registry
-from superschema.mixin import BaseMixins
-from superschema.registry import FieldTypeRegistry
-from superschema.types import Infer, InferExcept, ModelFields
+from django2pydantic.defaults import field_type_registry
+from django2pydantic.mixin import BaseMixins
+from django2pydantic.registry import FieldTypeRegistry
+from django2pydantic.types import Infer, InferExcept, ModelFields
SupportedParentFields = (
models.Field[Any, Any]
@@ -251,7 +251,7 @@ def create_pydantic_model(
class SuperSchemaResolver(ModelMetaclass):
- """Metaclass for SuperSchema."""
+ """Metaclass for django2pydantic."""
@override
def __new__( # pylint: disable=W0222,C0204
@@ -261,8 +261,8 @@ def __new__( # pylint: disable=W0222,C0204
namespace: Namespace,
**kwargs: Kwargs,
) -> type[BaseModel]:
- """Create a new SuperSchema class."""
- if name == "SuperSchema":
+ """Create a new django2pydantic class."""
+ if name == "django2pydantic":
return super().__new__(cls, name, bases, namespace, **kwargs)
if "Meta" not in namespace:
diff --git a/superschema/defaults.py b/django2pydantic/defaults.py
similarity index 93%
rename from superschema/defaults.py
rename to django2pydantic/defaults.py
index 4b33892..0b7dacc 100644
--- a/superschema/defaults.py
+++ b/django2pydantic/defaults.py
@@ -1,7 +1,7 @@
-"""Default field type handlers for superschema."""
+"""Default field type handlers for django2pydantic."""
-from superschema import handlers
-from superschema.registry import FieldTypeRegistry
+from django2pydantic import handlers
+from django2pydantic.registry import FieldTypeRegistry
field_type_registry: FieldTypeRegistry = FieldTypeRegistry.instance()
field_type_registry.register(handlers.CharFieldHandler)
diff --git a/superschema/getter.py b/django2pydantic/getter.py
similarity index 100%
rename from superschema/getter.py
rename to django2pydantic/getter.py
diff --git a/superschema/handlers/__init__.py b/django2pydantic/handlers/__init__.py
similarity index 74%
rename from superschema/handlers/__init__.py
rename to django2pydantic/handlers/__init__.py
index 8f16f41..448ab89 100644
--- a/superschema/handlers/__init__.py
+++ b/django2pydantic/handlers/__init__.py
@@ -1,21 +1,21 @@
"""All field type handlers."""
-from superschema.handlers.auto import (
+from django2pydantic.handlers.auto import (
AutoFieldHandler,
BigAutoFieldHandler,
SmallAutoFieldHandler,
)
-from superschema.handlers.base import FieldTypeHandler
-from superschema.handlers.boolean import BooleanFieldHandler
-from superschema.handlers.file import (
+from django2pydantic.handlers.base import FieldTypeHandler
+from django2pydantic.handlers.boolean import BooleanFieldHandler
+from django2pydantic.handlers.file import (
BinaryFieldHandler,
FileFieldHandler,
FilePathFieldHandler,
ImageFieldHandler,
)
-from superschema.handlers.json import JSONFieldHandler
-from superschema.handlers.network import GenericIpAddressFieldHandler
-from superschema.handlers.numbers import (
+from django2pydantic.handlers.json import JSONFieldHandler
+from django2pydantic.handlers.network import GenericIpAddressFieldHandler
+from django2pydantic.handlers.numbers import (
BigIntegerFieldHandler,
DecimalFieldHandler,
FloatFieldHandler,
@@ -25,13 +25,13 @@
PositiveSmallIntegerFieldHandler,
SmallIntegerFieldHandler,
)
-from superschema.handlers.property import PropertyHandler
-from superschema.handlers.relational import (
+from django2pydantic.handlers.property import PropertyHandler
+from django2pydantic.handlers.relational import (
ForeignKeyHandler,
ManyToManyFieldHandler,
OneToOneFieldHandler,
)
-from superschema.handlers.text import (
+from django2pydantic.handlers.text import (
CharFieldHandler,
EmailFieldHandler,
SlugFieldHandler,
@@ -39,7 +39,7 @@
UrlFieldHandler,
UUIDFieldHandler,
)
-from superschema.handlers.time import (
+from django2pydantic.handlers.time import (
DateFieldHandler,
DateTimeFieldHandler,
DurationFieldHandler,
diff --git a/superschema/handlers/auto.py b/django2pydantic/handlers/auto.py
similarity index 96%
rename from superschema/handlers/auto.py
rename to django2pydantic/handlers/auto.py
index e269593..c7154b0 100644
--- a/superschema/handlers/auto.py
+++ b/django2pydantic/handlers/auto.py
@@ -4,7 +4,7 @@
from django.db import models
-from superschema.handlers.base import DjangoFieldHandler
+from django2pydantic.handlers.base import DjangoFieldHandler
class SmallAutoFieldHandler(DjangoFieldHandler[models.SmallAutoField]):
diff --git a/superschema/handlers/base.py b/django2pydantic/handlers/base.py
similarity index 100%
rename from superschema/handlers/base.py
rename to django2pydantic/handlers/base.py
diff --git a/superschema/handlers/boolean.py b/django2pydantic/handlers/boolean.py
similarity index 87%
rename from superschema/handlers/boolean.py
rename to django2pydantic/handlers/boolean.py
index 4ccffbb..21de5a3 100644
--- a/superschema/handlers/boolean.py
+++ b/django2pydantic/handlers/boolean.py
@@ -4,7 +4,7 @@
from django.db import models
-from superschema.handlers.base import DjangoFieldHandler
+from django2pydantic.handlers.base import DjangoFieldHandler
class BooleanFieldHandler(DjangoFieldHandler[models.BooleanField[bool]]):
diff --git a/superschema/handlers/contrib/.gitkeep b/django2pydantic/handlers/contrib/.gitkeep
similarity index 100%
rename from superschema/handlers/contrib/.gitkeep
rename to django2pydantic/handlers/contrib/.gitkeep
diff --git a/superschema/handlers/file.py b/django2pydantic/handlers/file.py
similarity index 96%
rename from superschema/handlers/file.py
rename to django2pydantic/handlers/file.py
index 2ce4091..fd944a2 100644
--- a/superschema/handlers/file.py
+++ b/django2pydantic/handlers/file.py
@@ -5,7 +5,7 @@
from django.db import models
from pydantic import FilePath
-from superschema.handlers.base import DjangoFieldHandler
+from django2pydantic.handlers.base import DjangoFieldHandler
class FileFieldHandler(DjangoFieldHandler[models.FileField]):
diff --git a/superschema/handlers/handlers.py b/django2pydantic/handlers/handlers.py
similarity index 100%
rename from superschema/handlers/handlers.py
rename to django2pydantic/handlers/handlers.py
diff --git a/superschema/handlers/json.py b/django2pydantic/handlers/json.py
similarity index 89%
rename from superschema/handlers/json.py
rename to django2pydantic/handlers/json.py
index 8035075..6ec6aac 100644
--- a/superschema/handlers/json.py
+++ b/django2pydantic/handlers/json.py
@@ -5,7 +5,7 @@
from django.db import models
from pydantic import Json
-from superschema.handlers.base import DjangoFieldHandler
+from django2pydantic.handlers.base import DjangoFieldHandler
JSONValue = str | int | float | bool | None | list["JSONValue"] | dict[str, "JSONValue"]
diff --git a/superschema/handlers/network.py b/django2pydantic/handlers/network.py
similarity index 89%
rename from superschema/handlers/network.py
rename to django2pydantic/handlers/network.py
index b586361..5d653f4 100644
--- a/superschema/handlers/network.py
+++ b/django2pydantic/handlers/network.py
@@ -5,7 +5,7 @@
from django.db import models
from pydantic import IPvAnyAddress
-from superschema.handlers.base import DjangoFieldHandler
+from django2pydantic.handlers.base import DjangoFieldHandler
class GenericIpAddressFieldHandler(
diff --git a/superschema/handlers/numbers.py b/django2pydantic/handlers/numbers.py
similarity index 94%
rename from superschema/handlers/numbers.py
rename to django2pydantic/handlers/numbers.py
index d8ff3fc..435a34c 100644
--- a/superschema/handlers/numbers.py
+++ b/django2pydantic/handlers/numbers.py
@@ -3,7 +3,7 @@
from django.db import connection, models
-from superschema.handlers.base import DjangoFieldHandler
+from django2pydantic.handlers.base import DjangoFieldHandler
class IntegerFieldHandler(DjangoFieldHandler[models.IntegerField[int]]):
@@ -41,14 +41,16 @@ def field(cls) -> type[models.SmallIntegerField[int]]:
@override
def ge(self) -> int | None:
return max(
- connection.ops.integer_field_range("SmallIntegerField")[0], super().ge
+ connection.ops.integer_field_range("SmallIntegerField")[0],
+ super().ge,
)
@property
@override
def le(self) -> int | None:
return min(
- connection.ops.integer_field_range("SmallIntegerField")[1], super().le
+ connection.ops.integer_field_range("SmallIntegerField")[1],
+ super().le,
)
@override
@@ -102,14 +104,16 @@ def field(cls) -> type[models.PositiveIntegerField[int]]:
@override
def ge(self) -> int | None:
return max(
- connection.ops.integer_field_range("PositiveIntegerField")[0], super().ge
+ connection.ops.integer_field_range("PositiveIntegerField")[0],
+ super().ge,
)
@property
@override
def le(self) -> int | None:
return min(
- connection.ops.integer_field_range("PositiveIntegerField")[1], super().le
+ connection.ops.integer_field_range("PositiveIntegerField")[1],
+ super().le,
)
@override
@@ -154,14 +158,16 @@ def field(cls) -> type[models.PositiveBigIntegerField[int]]:
@override
def ge(self) -> int | None:
return min(
- connection.ops.integer_field_range("PositiveBigIntegerField")[0], super().ge
+ connection.ops.integer_field_range("PositiveBigIntegerField")[0],
+ super().ge,
)
@property
@override
def le(self) -> int | None:
return max(
- connection.ops.integer_field_range("PositiveBigIntegerField")[1], super().le
+ connection.ops.integer_field_range("PositiveBigIntegerField")[1],
+ super().le,
)
@override
diff --git a/superschema/handlers/property.py b/django2pydantic/handlers/property.py
similarity index 93%
rename from superschema/handlers/property.py
rename to django2pydantic/handlers/property.py
index 8b1b0b9..9e02293 100644
--- a/superschema/handlers/property.py
+++ b/django2pydantic/handlers/property.py
@@ -5,7 +5,7 @@
from pydantic import Field
from pydantic.fields import FieldInfo
-from superschema.handlers.base import FieldTypeHandler
+from django2pydantic.handlers.base import FieldTypeHandler
ReturnType = str
diff --git a/superschema/handlers/relational.py b/django2pydantic/handlers/relational.py
similarity index 97%
rename from superschema/handlers/relational.py
rename to django2pydantic/handlers/relational.py
index c3d9b53..9731c12 100644
--- a/superschema/handlers/relational.py
+++ b/django2pydantic/handlers/relational.py
@@ -7,8 +7,8 @@
from django.db.models.fields.related import RelatedField
from pydantic.fields import FieldInfo
-from superschema.handlers.base import DjangoFieldHandler
-from superschema.registry import FieldTypeRegistry
+from django2pydantic.handlers.base import DjangoFieldHandler
+from django2pydantic.registry import FieldTypeRegistry
class RelatedFieldHandler(DjangoFieldHandler[RelatedField[Any, Any]]):
diff --git a/superschema/handlers/text.py b/django2pydantic/handlers/text.py
similarity index 98%
rename from superschema/handlers/text.py
rename to django2pydantic/handlers/text.py
index 0ce008c..dd12dae 100644
--- a/superschema/handlers/text.py
+++ b/django2pydantic/handlers/text.py
@@ -9,7 +9,7 @@
from django.db import models
from pydantic import UUID1, UUID3, UUID4, UUID5, AnyUrl, EmailStr
-from superschema.handlers.base import DjangoFieldHandler
+from django2pydantic.handlers.base import DjangoFieldHandler
class CharFieldHandler(DjangoFieldHandler[models.CharField[str]]):
diff --git a/superschema/handlers/time.py b/django2pydantic/handlers/time.py
similarity index 96%
rename from superschema/handlers/time.py
rename to django2pydantic/handlers/time.py
index 5bd253d..45816d6 100644
--- a/superschema/handlers/time.py
+++ b/django2pydantic/handlers/time.py
@@ -5,7 +5,7 @@
from django.db import models
-from superschema.handlers.base import DjangoFieldHandler
+from django2pydantic.handlers.base import DjangoFieldHandler
class TimeFieldHandler(DjangoFieldHandler[models.TimeField[datetime.time]]):
diff --git a/superschema/mixin.py b/django2pydantic/mixin.py
similarity index 85%
rename from superschema/mixin.py
rename to django2pydantic/mixin.py
index 0f7e917..2ad61e8 100644
--- a/superschema/mixin.py
+++ b/django2pydantic/mixin.py
@@ -3,12 +3,12 @@
from pydantic import BaseModel, ValidationInfo, model_validator
from pydantic.functional_validators import ModelWrapValidatorHandler
-from superschema.getter import DjangoGetter
+from django2pydantic.getter import DjangoGetter
if TYPE_CHECKING:
- from superschema import SuperSchema
+ from django2pydantic import django2pydantic
-SVar = TypeVar("SVar", bound="SuperSchema")
+SVar = TypeVar("SVar", bound="django2pydantic")
class BaseMixins(BaseModel):
diff --git a/superschema/py.typed b/django2pydantic/py.typed
similarity index 100%
rename from superschema/py.typed
rename to django2pydantic/py.typed
diff --git a/superschema/registry.py b/django2pydantic/registry.py
similarity index 97%
rename from superschema/registry.py
rename to django2pydantic/registry.py
index 9516b9a..df7d1d2 100644
--- a/superschema/registry.py
+++ b/django2pydantic/registry.py
@@ -8,7 +8,7 @@
from django.db import models
from pydantic_core import PydanticUndefinedType
-from superschema.handlers.base import PydanticConverter
+from django2pydantic.handlers.base import PydanticConverter
SupportedParentFields = (
models.Field[Any, Any]
diff --git a/superschema/schema.py b/django2pydantic/schema.py
similarity index 87%
rename from superschema/schema.py
rename to django2pydantic/schema.py
index b7ae3fa..3751118 100644
--- a/superschema/schema.py
+++ b/django2pydantic/schema.py
@@ -6,17 +6,17 @@
from pydantic import BaseModel, ValidationInfo, model_validator
from pydantic.functional_validators import ModelWrapValidatorHandler
-from superschema.base import SuperSchemaResolver
-from superschema.getter import DjangoGetter
-from superschema.types import ModelFields
+from django2pydantic.base import SuperSchemaResolver
+from django2pydantic.getter import DjangoGetter
+from django2pydantic.types import ModelFields
S = TypeVar("S", bound=BaseModel)
DictStrAny = dict[str, Any]
-class SuperSchema(BaseModel, metaclass=SuperSchemaResolver):
- """SuperSchema class."""
+class django2pydantic(BaseModel, metaclass=SuperSchemaResolver):
+ """django2pydantic class."""
# model_config = ConfigDict(from_attributes=True)
diff --git a/superschema/types.py b/django2pydantic/types.py
similarity index 95%
rename from superschema/types.py
rename to django2pydantic/types.py
index 9c6a471..2180cea 100644
--- a/superschema/types.py
+++ b/django2pydantic/types.py
@@ -1,4 +1,4 @@
-"""Public types for superschema."""
+"""Public types for django2pydantic."""
from typing import TypedDict, Union, override
diff --git a/examples.ipynb b/examples.ipynb
index 9491bb9..d81e64a 100644
--- a/examples.ipynb
+++ b/examples.ipynb
@@ -1,384 +1,384 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Lets define some example Django models to work with:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import os\n",
- "import django\n",
- "\n",
- "os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tests.settings')\n",
- "\n",
- "# Setup Django\n",
- "django.setup()\n",
- "\n",
- "from django.contrib.auth.models import User\n",
- "from django.db import models\n",
- "\n",
- "\n",
- "class Author(models.Model):\n",
- " name = models.CharField(max_length=100)\n",
- " birth_date = models.DateField()\n",
- "\n",
- " class Meta:\n",
- " app_label = \"tests\"\n",
- "\n",
- "class Publisher(models.Model):\n",
- " name = models.CharField(max_length=100)\n",
- " address = models.TextField(help_text=\"Publisher's official address\")\n",
- "\n",
- " class Meta:\n",
- " app_label = \"tests\"\n",
- "\n",
- "\n",
- "class Book(models.Model):\n",
- " title = models.CharField(max_length=200)\n",
- " isbn = models.CharField(max_length=13, unique=True)\n",
- " publication_date = models.DateField()\n",
- " authors = models.ManyToManyField(Author) # Many-to-Many relationship\n",
- " publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE) # Foreign Key relationship\n",
- "\n",
- " class Meta:\n",
- " app_label = \"tests\"\n",
- " default_related_name = 'books'\n",
- "\n",
- "\n",
- "class Library(models.Model):\n",
- " name = models.CharField(max_length=100)\n",
- " address = models.TextField()\n",
- "\n",
- " class Meta:\n",
- " app_label = \"tests\"\n",
- "\n",
- "\n",
- "class BookCopy(models.Model):\n",
- " book = models.ForeignKey(Book, on_delete=models.CASCADE) # Foreign Key relationship\n",
- " library = models.ForeignKey(Library, on_delete=models.CASCADE) # Foreign Key relationship\n",
- " inventory_number = models.CharField(max_length=20, unique=True)\n",
- "\n",
- " class Meta:\n",
- " app_label = \"tests\"\n",
- " default_related_name = \"book_copies\"\n",
- "\n",
- "\n",
- "class Borrowing(models.Model):\n",
- " user = models.ForeignKey(User, on_delete=models.CASCADE) # Foreign Key relationship\n",
- " book_copy = models.ForeignKey(BookCopy, on_delete=models.CASCADE) # Foreign Key relationship\n",
- " borrow_date = models.DateField()\n",
- " return_date = models.DateField(null=True, blank=True)\n",
- "\n",
- " class Meta:\n",
- " app_label = \"tests\"\n",
- " default_related_name = 'borrowings'\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now lets do some testing:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
{\n",
- " \"$defs\": {\n",
- " \"None_authors\": {\n",
- " \"properties\": {\n",
- " \"name\": {\n",
- " \"description\": \"Name\",\n",
- " \"maxLength\": 100,\n",
- " \"title\": \"Name\",\n",
- " \"type\": \"string\"\n",
- " }\n",
- " },\n",
- " \"required\": [\n",
- " \"name\"\n",
- " ],\n",
- " \"title\": \"None_authors\",\n",
- " \"type\": \"object\"\n",
- " },\n",
- " \"None_book_copies\": {\n",
- " \"properties\": {\n",
- " \"library\": {\n",
- " \"description\": \"Library\",\n",
- " \"title\": \"Library\",\n",
- " \"type\": \"integer\"\n",
- " }\n",
- " },\n",
- " \"required\": [\n",
- " \"library\"\n",
- " ],\n",
- " \"title\": \"None_book_copies\",\n",
- " \"type\": \"object\"\n",
- " },\n",
- " \"None_publisher\": {\n",
- " \"properties\": {\n",
- " \"name\": {\n",
- " \"description\": \"Name\",\n",
- " \"maxLength\": 100,\n",
- " \"title\": \"Name\",\n",
- " \"type\": \"string\"\n",
- " }\n",
- " },\n",
- " \"required\": [\n",
- " \"name\"\n",
- " ],\n",
- " \"title\": \"None_publisher\",\n",
- " \"type\": \"object\"\n",
- " }\n",
- " },\n",
- " \"properties\": {\n",
- " \"title\": {\n",
- " \"description\": \"Title\",\n",
- " \"maxLength\": 200,\n",
- " \"title\": \"Title\",\n",
- " \"type\": \"string\"\n",
- " },\n",
- " \"isbn\": {\n",
- " \"description\": \"Isbn\",\n",
- " \"maxLength\": 13,\n",
- " \"title\": \"Isbn\",\n",
- " \"type\": \"string\"\n",
- " },\n",
- " \"publication_date\": {\n",
- " \"description\": \"Publication Date\",\n",
- " \"format\": \"date\",\n",
- " \"title\": \"Publication Date\",\n",
- " \"type\": \"string\"\n",
- " },\n",
- " \"authors\": {\n",
- " \"anyOf\": [\n",
- " {\n",
- " \"items\": {\n",
- " \"$ref\": \"#/$defs/None_authors\"\n",
- " },\n",
- " \"type\": \"array\"\n",
- " },\n",
- " {\n",
- " \"type\": \"null\"\n",
- " }\n",
- " ],\n",
- " \"default\": null,\n",
- " \"description\": \"authors\",\n",
- " \"title\": \"authors\"\n",
- " },\n",
- " \"publisher\": {\n",
- " \"$ref\": \"#/$defs/None_publisher\",\n",
- " \"description\": \"publisher\",\n",
- " \"title\": \"publisher\"\n",
- " },\n",
- " \"book_copies\": {\n",
- " \"anyOf\": [\n",
- " {\n",
- " \"items\": {\n",
- " \"$ref\": \"#/$defs/None_book_copies\"\n",
- " },\n",
- " \"type\": \"array\"\n",
- " },\n",
- " {\n",
- " \"type\": \"null\"\n",
- " }\n",
- " ],\n",
- " \"default\": null,\n",
- " \"description\": \"book_copies\",\n",
- " \"title\": \"book_copies\"\n",
- " }\n",
- " },\n",
- " \"required\": [\n",
- " \"title\",\n",
- " \"isbn\",\n",
- " \"publication_date\",\n",
- " \"publisher\"\n",
- " ],\n",
- " \"title\": \"BookSchema\",\n",
- " \"type\": \"object\"\n",
- "}\n",
- "
\n"
- ],
- "text/plain": [
- "\u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"$defs\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"None_authors\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"properties\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"name\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"Name\"\u001b[0m,\n",
- " \u001b[1;34m\"maxLength\"\u001b[0m: \u001b[1;36m100\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"Name\"\u001b[0m,\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"string\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"required\"\u001b[0m: \u001b[1m[\u001b[0m\n",
- " \u001b[32m\"name\"\u001b[0m\n",
- " \u001b[1m]\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"None_authors\"\u001b[0m,\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"object\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"None_book_copies\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"properties\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"library\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"Library\"\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"Library\"\u001b[0m,\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"integer\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"required\"\u001b[0m: \u001b[1m[\u001b[0m\n",
- " \u001b[32m\"library\"\u001b[0m\n",
- " \u001b[1m]\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"None_book_copies\"\u001b[0m,\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"object\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"None_publisher\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"properties\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"name\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"Name\"\u001b[0m,\n",
- " \u001b[1;34m\"maxLength\"\u001b[0m: \u001b[1;36m100\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"Name\"\u001b[0m,\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"string\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"required\"\u001b[0m: \u001b[1m[\u001b[0m\n",
- " \u001b[32m\"name\"\u001b[0m\n",
- " \u001b[1m]\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"None_publisher\"\u001b[0m,\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"object\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"properties\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"Title\"\u001b[0m,\n",
- " \u001b[1;34m\"maxLength\"\u001b[0m: \u001b[1;36m200\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"Title\"\u001b[0m,\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"string\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"isbn\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"Isbn\"\u001b[0m,\n",
- " \u001b[1;34m\"maxLength\"\u001b[0m: \u001b[1;36m13\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"Isbn\"\u001b[0m,\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"string\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"publication_date\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"Publication Date\"\u001b[0m,\n",
- " \u001b[1;34m\"format\"\u001b[0m: \u001b[32m\"date\"\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"Publication Date\"\u001b[0m,\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"string\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"authors\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"anyOf\"\u001b[0m: \u001b[1m[\u001b[0m\n",
- " \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"items\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"$ref\"\u001b[0m: \u001b[32m\"#/$defs/None_authors\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"array\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"null\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m\n",
- " \u001b[1m]\u001b[0m,\n",
- " \u001b[1;34m\"default\"\u001b[0m: \u001b[3;35mnull\u001b[0m,\n",
- " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"authors\"\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"authors\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"publisher\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"$ref\"\u001b[0m: \u001b[32m\"#/$defs/None_publisher\"\u001b[0m,\n",
- " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"publisher\"\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"publisher\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"book_copies\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"anyOf\"\u001b[0m: \u001b[1m[\u001b[0m\n",
- " \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"items\"\u001b[0m: \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"$ref\"\u001b[0m: \u001b[32m\"#/$defs/None_book_copies\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"array\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1m{\u001b[0m\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"null\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m\n",
- " \u001b[1m]\u001b[0m,\n",
- " \u001b[1;34m\"default\"\u001b[0m: \u001b[3;35mnull\u001b[0m,\n",
- " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"book_copies\"\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"book_copies\"\u001b[0m\n",
- " \u001b[1m}\u001b[0m\n",
- " \u001b[1m}\u001b[0m,\n",
- " \u001b[1;34m\"required\"\u001b[0m: \u001b[1m[\u001b[0m\n",
- " \u001b[32m\"title\"\u001b[0m,\n",
- " \u001b[32m\"isbn\"\u001b[0m,\n",
- " \u001b[32m\"publication_date\"\u001b[0m,\n",
- " \u001b[32m\"publisher\"\u001b[0m\n",
- " \u001b[1m]\u001b[0m,\n",
- " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"BookSchema\"\u001b[0m,\n",
- " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"object\"\u001b[0m\n",
- "\u001b[1m}\u001b[0m\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "from typing import ClassVar\n",
- "\n",
- "from superschema.schema import SuperSchema\n",
- "from superschema.types import Infer, ModelFields\n",
- "from rich import print_json\n",
- "\n",
- "class BookSchema(SuperSchema):\n",
- " \"\"\"Book schema example with nested fields.\"\"\"\n",
- "\n",
- " class Meta(SuperSchema.Meta):\n",
- " \"\"\"Here we define the model and the fields we want to infer.\"\"\"\n",
- "\n",
- " model = Book\n",
- " fields: ClassVar[ModelFields] = {\n",
- " \"title\": Infer,\n",
- " \"isbn\": Infer,\n",
- " \"publication_date\": Infer,\n",
- " \"authors\": {\"name\": Infer},\n",
- " \"publisher\": {\"name\": Infer},\n",
- " \"book_copies\": {\"library\": Infer}, # note: here we use a reverse relation\n",
- " }\n",
- "\n",
- "print_json(data=BookSchema.model_json_schema())\n",
- "\n"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.12.7"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Lets define some example Django models to work with:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "import django\n",
+ "\n",
+ "os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tests.settings')\n",
+ "\n",
+ "# Setup Django\n",
+ "django.setup()\n",
+ "\n",
+ "from django.contrib.auth.models import User\n",
+ "from django.db import models\n",
+ "\n",
+ "\n",
+ "class Author(models.Model):\n",
+ " name = models.CharField(max_length=100)\n",
+ " birth_date = models.DateField()\n",
+ "\n",
+ " class Meta:\n",
+ " app_label = \"tests\"\n",
+ "\n",
+ "class Publisher(models.Model):\n",
+ " name = models.CharField(max_length=100)\n",
+ " address = models.TextField(help_text=\"Publisher's official address\")\n",
+ "\n",
+ " class Meta:\n",
+ " app_label = \"tests\"\n",
+ "\n",
+ "\n",
+ "class Book(models.Model):\n",
+ " title = models.CharField(max_length=200)\n",
+ " isbn = models.CharField(max_length=13, unique=True)\n",
+ " publication_date = models.DateField()\n",
+ " authors = models.ManyToManyField(Author) # Many-to-Many relationship\n",
+ " publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE) # Foreign Key relationship\n",
+ "\n",
+ " class Meta:\n",
+ " app_label = \"tests\"\n",
+ " default_related_name = 'books'\n",
+ "\n",
+ "\n",
+ "class Library(models.Model):\n",
+ " name = models.CharField(max_length=100)\n",
+ " address = models.TextField()\n",
+ "\n",
+ " class Meta:\n",
+ " app_label = \"tests\"\n",
+ "\n",
+ "\n",
+ "class BookCopy(models.Model):\n",
+ " book = models.ForeignKey(Book, on_delete=models.CASCADE) # Foreign Key relationship\n",
+ " library = models.ForeignKey(Library, on_delete=models.CASCADE) # Foreign Key relationship\n",
+ " inventory_number = models.CharField(max_length=20, unique=True)\n",
+ "\n",
+ " class Meta:\n",
+ " app_label = \"tests\"\n",
+ " default_related_name = \"book_copies\"\n",
+ "\n",
+ "\n",
+ "class Borrowing(models.Model):\n",
+ " user = models.ForeignKey(User, on_delete=models.CASCADE) # Foreign Key relationship\n",
+ " book_copy = models.ForeignKey(BookCopy, on_delete=models.CASCADE) # Foreign Key relationship\n",
+ " borrow_date = models.DateField()\n",
+ " return_date = models.DateField(null=True, blank=True)\n",
+ "\n",
+ " class Meta:\n",
+ " app_label = \"tests\"\n",
+ " default_related_name = 'borrowings'\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now lets do some testing:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "{\n",
+ " \"$defs\": {\n",
+ " \"None_authors\": {\n",
+ " \"properties\": {\n",
+ " \"name\": {\n",
+ " \"description\": \"Name\",\n",
+ " \"maxLength\": 100,\n",
+ " \"title\": \"Name\",\n",
+ " \"type\": \"string\"\n",
+ " }\n",
+ " },\n",
+ " \"required\": [\n",
+ " \"name\"\n",
+ " ],\n",
+ " \"title\": \"None_authors\",\n",
+ " \"type\": \"object\"\n",
+ " },\n",
+ " \"None_book_copies\": {\n",
+ " \"properties\": {\n",
+ " \"library\": {\n",
+ " \"description\": \"Library\",\n",
+ " \"title\": \"Library\",\n",
+ " \"type\": \"integer\"\n",
+ " }\n",
+ " },\n",
+ " \"required\": [\n",
+ " \"library\"\n",
+ " ],\n",
+ " \"title\": \"None_book_copies\",\n",
+ " \"type\": \"object\"\n",
+ " },\n",
+ " \"None_publisher\": {\n",
+ " \"properties\": {\n",
+ " \"name\": {\n",
+ " \"description\": \"Name\",\n",
+ " \"maxLength\": 100,\n",
+ " \"title\": \"Name\",\n",
+ " \"type\": \"string\"\n",
+ " }\n",
+ " },\n",
+ " \"required\": [\n",
+ " \"name\"\n",
+ " ],\n",
+ " \"title\": \"None_publisher\",\n",
+ " \"type\": \"object\"\n",
+ " }\n",
+ " },\n",
+ " \"properties\": {\n",
+ " \"title\": {\n",
+ " \"description\": \"Title\",\n",
+ " \"maxLength\": 200,\n",
+ " \"title\": \"Title\",\n",
+ " \"type\": \"string\"\n",
+ " },\n",
+ " \"isbn\": {\n",
+ " \"description\": \"Isbn\",\n",
+ " \"maxLength\": 13,\n",
+ " \"title\": \"Isbn\",\n",
+ " \"type\": \"string\"\n",
+ " },\n",
+ " \"publication_date\": {\n",
+ " \"description\": \"Publication Date\",\n",
+ " \"format\": \"date\",\n",
+ " \"title\": \"Publication Date\",\n",
+ " \"type\": \"string\"\n",
+ " },\n",
+ " \"authors\": {\n",
+ " \"anyOf\": [\n",
+ " {\n",
+ " \"items\": {\n",
+ " \"$ref\": \"#/$defs/None_authors\"\n",
+ " },\n",
+ " \"type\": \"array\"\n",
+ " },\n",
+ " {\n",
+ " \"type\": \"null\"\n",
+ " }\n",
+ " ],\n",
+ " \"default\": null,\n",
+ " \"description\": \"authors\",\n",
+ " \"title\": \"authors\"\n",
+ " },\n",
+ " \"publisher\": {\n",
+ " \"$ref\": \"#/$defs/None_publisher\",\n",
+ " \"description\": \"publisher\",\n",
+ " \"title\": \"publisher\"\n",
+ " },\n",
+ " \"book_copies\": {\n",
+ " \"anyOf\": [\n",
+ " {\n",
+ " \"items\": {\n",
+ " \"$ref\": \"#/$defs/None_book_copies\"\n",
+ " },\n",
+ " \"type\": \"array\"\n",
+ " },\n",
+ " {\n",
+ " \"type\": \"null\"\n",
+ " }\n",
+ " ],\n",
+ " \"default\": null,\n",
+ " \"description\": \"book_copies\",\n",
+ " \"title\": \"book_copies\"\n",
+ " }\n",
+ " },\n",
+ " \"required\": [\n",
+ " \"title\",\n",
+ " \"isbn\",\n",
+ " \"publication_date\",\n",
+ " \"publisher\"\n",
+ " ],\n",
+ " \"title\": \"BookSchema\",\n",
+ " \"type\": \"object\"\n",
+ "}\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"$defs\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"None_authors\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"properties\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"name\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"Name\"\u001b[0m,\n",
+ " \u001b[1;34m\"maxLength\"\u001b[0m: \u001b[1;36m100\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"Name\"\u001b[0m,\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"string\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"required\"\u001b[0m: \u001b[1m[\u001b[0m\n",
+ " \u001b[32m\"name\"\u001b[0m\n",
+ " \u001b[1m]\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"None_authors\"\u001b[0m,\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"object\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"None_book_copies\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"properties\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"library\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"Library\"\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"Library\"\u001b[0m,\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"integer\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"required\"\u001b[0m: \u001b[1m[\u001b[0m\n",
+ " \u001b[32m\"library\"\u001b[0m\n",
+ " \u001b[1m]\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"None_book_copies\"\u001b[0m,\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"object\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"None_publisher\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"properties\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"name\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"Name\"\u001b[0m,\n",
+ " \u001b[1;34m\"maxLength\"\u001b[0m: \u001b[1;36m100\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"Name\"\u001b[0m,\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"string\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"required\"\u001b[0m: \u001b[1m[\u001b[0m\n",
+ " \u001b[32m\"name\"\u001b[0m\n",
+ " \u001b[1m]\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"None_publisher\"\u001b[0m,\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"object\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"properties\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"Title\"\u001b[0m,\n",
+ " \u001b[1;34m\"maxLength\"\u001b[0m: \u001b[1;36m200\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"Title\"\u001b[0m,\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"string\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"isbn\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"Isbn\"\u001b[0m,\n",
+ " \u001b[1;34m\"maxLength\"\u001b[0m: \u001b[1;36m13\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"Isbn\"\u001b[0m,\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"string\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"publication_date\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"Publication Date\"\u001b[0m,\n",
+ " \u001b[1;34m\"format\"\u001b[0m: \u001b[32m\"date\"\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"Publication Date\"\u001b[0m,\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"string\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"authors\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"anyOf\"\u001b[0m: \u001b[1m[\u001b[0m\n",
+ " \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"items\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"$ref\"\u001b[0m: \u001b[32m\"#/$defs/None_authors\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"array\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"null\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m\n",
+ " \u001b[1m]\u001b[0m,\n",
+ " \u001b[1;34m\"default\"\u001b[0m: \u001b[3;35mnull\u001b[0m,\n",
+ " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"authors\"\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"authors\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"publisher\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"$ref\"\u001b[0m: \u001b[32m\"#/$defs/None_publisher\"\u001b[0m,\n",
+ " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"publisher\"\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"publisher\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"book_copies\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"anyOf\"\u001b[0m: \u001b[1m[\u001b[0m\n",
+ " \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"items\"\u001b[0m: \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"$ref\"\u001b[0m: \u001b[32m\"#/$defs/None_book_copies\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"array\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1m{\u001b[0m\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"null\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m\n",
+ " \u001b[1m]\u001b[0m,\n",
+ " \u001b[1;34m\"default\"\u001b[0m: \u001b[3;35mnull\u001b[0m,\n",
+ " \u001b[1;34m\"description\"\u001b[0m: \u001b[32m\"book_copies\"\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"book_copies\"\u001b[0m\n",
+ " \u001b[1m}\u001b[0m\n",
+ " \u001b[1m}\u001b[0m,\n",
+ " \u001b[1;34m\"required\"\u001b[0m: \u001b[1m[\u001b[0m\n",
+ " \u001b[32m\"title\"\u001b[0m,\n",
+ " \u001b[32m\"isbn\"\u001b[0m,\n",
+ " \u001b[32m\"publication_date\"\u001b[0m,\n",
+ " \u001b[32m\"publisher\"\u001b[0m\n",
+ " \u001b[1m]\u001b[0m,\n",
+ " \u001b[1;34m\"title\"\u001b[0m: \u001b[32m\"BookSchema\"\u001b[0m,\n",
+ " \u001b[1;34m\"type\"\u001b[0m: \u001b[32m\"object\"\u001b[0m\n",
+ "\u001b[1m}\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from typing import ClassVar\n",
+ "\n",
+ "from django2pydantic.schema import django2pydantic\n",
+ "from django2pydantic.types import Infer, ModelFields\n",
+ "from rich import print_json\n",
+ "\n",
+ "class BookSchema(django2pydantic):\n",
+ " \"\"\"Book schema example with nested fields.\"\"\"\n",
+ "\n",
+ " class Meta(django2pydantic.Meta):\n",
+ " \"\"\"Here we define the model and the fields we want to infer.\"\"\"\n",
+ "\n",
+ " model = Book\n",
+ " fields: ClassVar[ModelFields] = {\n",
+ " \"title\": Infer,\n",
+ " \"isbn\": Infer,\n",
+ " \"publication_date\": Infer,\n",
+ " \"authors\": {\"name\": Infer},\n",
+ " \"publisher\": {\"name\": Infer},\n",
+ " \"book_copies\": {\"library\": Infer}, # note: here we use a reverse relation\n",
+ " }\n",
+ "\n",
+ "print_json(data=BookSchema.model_json_schema())\n",
+ "\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.7"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/examples.py b/examples.py
index 4acee10..a3ebe53 100644
--- a/examples.py
+++ b/examples.py
@@ -123,14 +123,14 @@ class Meta:
from rich import print_json
-from superschema.schema import SuperSchema
-from superschema.types import Infer, ModelFields
+from django2pydantic.schema import django2pydantic
+from django2pydantic.types import Infer, ModelFields
-class BookSchema(SuperSchema):
+class BookSchema(django2pydantic):
"""Book schema example with nested fields."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Here we define the model and the fields we want to infer."""
model = Book
diff --git a/noxfile.py b/noxfile.py
index 73d392e..0ea8b73 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -9,41 +9,74 @@
@nox.session(python=["3.12", "3.13"], reuse_venv=True)
def tests(session: nox.Session) -> None:
"""Run the test suite."""
- session.run("poetry", "install", "--only=test", external=True)
session.run("pytest")
@nox.session
-def lint(session: nox.Session) -> None:
+def lint_with_flake8(session: nox.Session) -> None:
+ """Lint the codebase with flake8."""
session.install("flake8")
session.run("flake8")
+@nox.session
+def lint_with_ruff(session: nox.Session) -> None:
+ """Lint the codebase with ruff."""
+ session.install("ruff")
+ session.run("ruff")
+
+
+@nox.session
+def lint_with_pylint(session: nox.Session) -> None:
+ """Lint the codebase with pylint."""
+ session.install("pylint")
+ session.run("pylint")
+
+
@nox.session
def type_check_with_mypy(session: nox.Session) -> None:
+ """Type-check the codebase with mypy."""
session.install("mypy")
session.run("mypy")
@nox.session
def type_check_with_pyright(session: nox.Session) -> None:
+ """Type-check the codebase with pyright."""
session.install("pyright")
session.run("pyright")
@nox.session
def type_check_with_pytype(session: nox.Session) -> None:
+ """Type-check the codebase with pytype."""
session.install("pytype")
session.run("pytype")
@nox.session
def type_check_with_pyre(session: nox.Session) -> None:
+ """Type-check the codebase with pyre."""
session.install("pyre-check")
session.run("pyre")
@nox.session
def type_check_with_basedpyright(session: nox.Session) -> None:
+ """Type-check the codebase with basedpyright."""
session.install("basedpyright")
session.run("basedpyright")
+
+
+@nox.session
+def lint_imports(session: nox.Session) -> None:
+ """Lint the codebase with importlinter."""
+ session.run("lint-imports")
+
+
+@nox.session
+def noop(session: nox.Session) -> None:
+ """No operation.
+
+ Dummy one just to do nothing.
+ """
diff --git a/playground.py b/playground.py
deleted file mode 100644
index 26069af..0000000
--- a/playground.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""Example of using superschema.schema.ApiFields."""
-
-from ast import TypeVar
-from typing import Any, TypedDict, Union, reveal_type
-
-from pydantic import BaseModel, Field
-
-from superschema.types import Infer, InferExcept
-
-SubClassOfPydanticBaseModel_co = TypeVar(
- "SubClassOfPydanticBaseModel_co",
- bound=BaseModel,
- covariant=True,
-)
-
-
-class ApiSchema:
- def __new__(cls, *args, **kwargs) -> BaseModel:
- """Create a new ApiSchema class."""
- print("args", args)
- print("kwargs", kwargs)
-
- class SomeModel(BaseModel):
- id: int
-
- return SomeModel()
-
-
-FieldType = dict[
- str,
- Union[
- InferExcept,
- type[Infer],
- Any,
- list[type[BaseModel]],
- type[BaseModel],
- "FieldType",
- ],
-]
-
-create_fields: FieldType = {
- "id": InferExcept(title="some name"),
- "name": Infer,
- "description": Field(None, title="some name"),
- "organization": {"id": Infer, "name": Infer},
- "applications": [BaseModel],
- "account": BaseModel,
-}
-
-reveal_type(create_schema)
-
-In python why does this not work?
-
-class Model(TypedDict):
- attr: str
-
-
-m: Model = {"attr": "value"}
-
-t: dict[str, Any] = m
-
-Incompatible types in assignment (expression has type "Model", variable has type "dict[str, Any]") Mypy assignment
-Type "Model" is not assignable to declared type "dict[str, Any]"
- "Model" is not assignable to "dict[str, Any]" Pylance reportAssignmentType
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index f5f9e58..99d349c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,45 +1,50 @@
[project]
-name = "superschema"
-
-[project.urls]
-Homepage = "https://example.com"
-Documentation = "https://readthedocs.org"
-Repository = "https://github.com/me/spam.git"
-Issues = "https://github.com/me/spam/issues"
-Changelog = "https://github.com/me/spam/blob/master/CHANGELOG.md"
-
-[tool.poetry]
-name = "superschema"
+name = "django2pydantic"
version = "0.1.0"
description = "Converting Django models to Pydantic models"
+readme = "README.md"
+requires-python = "==3.12.*"
authors = [
- "Jukka Hassinen "
+ {name = "Jukka Hassinen", email = "jukka.hassinen@gmail.com"}
]
license = "MIT"
-readme = "README.md"
keywords = [
"django",
"pydantic",
"models",
- "schema"
+ "schema",
+ "converter",
]
-repository = "https://github.com/..."
-homepage = "https://..."
classifiers = [
- "Development Status :: 4 - Beta",
- "Environment :: Console",
- "Framework :: Flake8",
- "Intended Audience :: Developers",
- "Operating System :: OS Independent",
- "Topic :: Software Development :: Libraries :: Python Modules",
- "Topic :: Software Development :: Quality Assurance",
- "Typing :: Typed",
+ "License :: OSI Approved :: MIT License",
+ "Development Status :: 2 - Pre-Alpha",
+ "Environment :: Console",
+ "Programming Language :: Python :: 3.12",
+ "Framework :: Django :: 5.1",
+ "Framework :: Pydantic :: 2",
+ "Intended Audience :: Developers",
+ "Operating System :: OS Independent",
+ "Topic :: Software Development :: Libraries :: Python Modules",
+ "Typing :: Typed",
]
+
+[project.urls]
+Homepage = "https://github.com/NextGenContributions/django2pydantic"
+Documentation = "https://github.com/NextGenContributions/django2pydantic/blob/main/README.md"
+Repository = "https://github.com/NextGenContributions/django2pydantic.git"
+Issues = "https://github.com/NextGenContributions/django2pydantic/issues"
+Changelog = "https://github.com/NextGenContributions/django2pydantic/blob/main/CHANGELOG.md"
+ReleaseNotes = "https://github.com/NextGenContributions/django2pydantic/releases"
+Funding = "https://github.com/NextGenContributions/django2pydantic/blob/main/.github/FUNDING.yml"
+
[build-system]
-requires = ["poetry-core"]
-build-backend = "poetry.core.masonry.api"
+requires = ["hatchling"]
+build-backend = "hatchling.build"
+
+[tool.hatch.build.targets.sdist]
+only-include = ["django2pydantic"]
[dependency-groups]
dev = [
@@ -73,4 +78,85 @@ dev = [
"typeguard>=4.4.1",
"wemake-python-styleguide>=0.19.2",
"django-stubs-ext>=5.1.1",
+ "python-semantic-release>=9.14.0",
+ "semgrep>=1.85.0",
+]
+
+[tool.semantic_release]
+assets = []
+build_command_env = []
+commit_message = "{version}\n\nAutomatically generated by python-semantic-release"
+commit_parser = "angular"
+logging_use_named_masks = false
+major_on_zero = true
+allow_zero_version = true
+no_git_verify = false
+tag_format = "v{version}"
+version_toml = [
+ "pyproject.toml:project.version",
+]
+version_variables = [
+ "django2pydantic/__init__.py:__version__",
]
+
+[tool.semantic_release.branches.main]
+match = "(main|master)"
+prerelease_token = "rc"
+prerelease = false
+
+[tool.semantic_release.changelog]
+exclude_commit_patterns = [
+ '''chore(?:\([^)]*?\))?: .+''',
+ '''ci(?:\([^)]*?\))?: .+''',
+ '''refactor(?:\([^)]*?\))?: .+''',
+ '''style(?:\([^)]*?\))?: .+''',
+ '''test(?:\([^)]*?\))?: .+''',
+ '''build\((?!deps\): .+)''',
+ '''Merged? .*''',
+ '''Initial Commit.*''',
+ # Old semantic-release version commits
+ '''^\d+\.\d+\.\d+''',
+]
+mode = "init"
+insertion_flag = ""
+template_dir = "templates"
+
+[tool.semantic_release.changelog.default_templates]
+changelog_file = "CHANGELOG.md"
+output_format = "md"
+mask_initial_release = false
+
+[tool.semantic_release.changelog.environment]
+block_start_string = "{%"
+block_end_string = "%}"
+variable_start_string = "{{"
+variable_end_string = "}}"
+comment_start_string = "{#"
+comment_end_string = "#}"
+trim_blocks = false
+lstrip_blocks = false
+newline_sequence = "\n"
+keep_trailing_newline = false
+extensions = []
+autoescape = false
+
+[tool.semantic_release.commit_author]
+env = "GIT_COMMIT_AUTHOR"
+default = "semantic-release "
+
+[tool.semantic_release.commit_parser_options]
+minor_tags = ["feat"]
+patch_tags = ["fix", "perf"]
+allowed_tags = ["feat", "fix", "perf", "build", "chore", "ci", "docs", "style", "refactor", "test"]
+default_bump_level = 0
+
+[tool.semantic_release.remote]
+name = "origin"
+type = "github"
+ignore_token_for_push = false
+insecure = false
+
+[tool.semantic_release.publish]
+dist_glob_patterns = ["dist/*"]
+upload_to_vcs_release = true
+
diff --git a/pytest-with-beartype.py b/pytest-with-beartype.py
index b7da420..438f5ff 100755
--- a/pytest-with-beartype.py
+++ b/pytest-with-beartype.py
@@ -25,7 +25,7 @@
from beartype import BeartypeConf
from beartype.claw import beartype_package
-type_check_instrumented_packages: list[str] = ["superschema", "tests"]
+type_check_instrumented_packages: list[str] = ["django2pydantic", "tests"]
for package in type_check_instrumented_packages:
beartype_package(package_name=package, conf=BeartypeConf())
diff --git a/pytest-with-typeguard.py b/pytest-with-typeguard.py
index 34318ec..f2f9bf7 100755
--- a/pytest-with-typeguard.py
+++ b/pytest-with-typeguard.py
@@ -22,7 +22,7 @@
import pytest
from typeguard import install_import_hook
-type_check_instrumented_packages: list[str] = ["superschema", "tests"]
+type_check_instrumented_packages: list[str] = ["django2pydantic", "tests"]
install_import_hook(packages=type_check_instrumented_packages)
diff --git a/pytest.ini b/pytest.ini
index 0454ae4..6e73715 100644
--- a/pytest.ini
+++ b/pytest.ini
@@ -1,6 +1,6 @@
[pytest]
#addopts =
-# --cov=superschema
+# --cov=django2pydantic
# --cov=tests
# --cov-report=term-missing
testpaths = tests
\ No newline at end of file
diff --git a/superschema/__init__.py b/superschema/__init__.py
deleted file mode 100644
index 44ef5f8..0000000
--- a/superschema/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-"""Super schema packages."""
-
-from superschema.schema import SuperSchema
-from superschema.types import Infer, InferExcept, MetaFields, ModelFields
-
-__all__ = ["Infer", "InferExcept", "ModelFields", "MetaFields", "SuperSchema"]
diff --git a/tests/test_basics.py b/tests/test_basics.py
index 028932a..f486ced 100644
--- a/tests/test_basics.py
+++ b/tests/test_basics.py
@@ -10,8 +10,8 @@
from hypothesis import given
from hypothesis import strategies as st
-from superschema.schema import SuperSchema
-from superschema.types import Infer, ModelFields
+from django2pydantic.schema import django2pydantic
+from django2pydantic.types import Infer, ModelFields
from tests.utils import debug_json, get_openapi_schema_from_field
FieldClass = type[models.Field[Any, Any]]
@@ -246,10 +246,10 @@ class ModelA(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
- class SchemaA(SuperSchema):
+ class SchemaA(django2pydantic):
"""SchemaA class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelA
diff --git a/tests/test_error_messages.py b/tests/test_error_messages.py
index 5e00b54..ce77a14 100644
--- a/tests/test_error_messages.py
+++ b/tests/test_error_messages.py
@@ -5,8 +5,8 @@
import pytest
from django.db import models
-from superschema.schema import SuperSchema
-from superschema.types import Infer, ModelFields
+from django2pydantic.schema import django2pydantic
+from django2pydantic.types import Infer, ModelFields
def test_defing_a_non_existing_field_raises_exception() -> None:
@@ -16,10 +16,10 @@ def test_defing_a_non_existing_field_raises_exception() -> None:
class ModelA(models.Model): # noqa: DJ008
id = models.AutoField(primary_key=True)
- class SchemaA(SuperSchema):
+ class SchemaA(django2pydantic):
"""SchemaA class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelA
diff --git a/tests/test_id_fields.py b/tests/test_id_fields.py
index 756187f..02f827f 100644
--- a/tests/test_id_fields.py
+++ b/tests/test_id_fields.py
@@ -5,8 +5,8 @@
from django.db import models
from pydantic.v1.fields import ModelField
-from superschema.schema import SuperSchema
-from superschema.types import Infer
+from django2pydantic.schema import django2pydantic
+from django2pydantic.types import Infer
from tests.utils import debug_json
@@ -16,10 +16,10 @@ def test_implicit_id_fields_works() -> None:
class ModelA(models.Model):
name = models.CharField(max_length=100)
- class SchemaA(SuperSchema):
+ class SchemaA(django2pydantic):
"""SchemaA class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelA
@@ -41,10 +41,10 @@ class ModelA(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
- class SchemaA(SuperSchema):
+ class SchemaA(django2pydantic):
"""SchemaA class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelA
diff --git a/tests/test_property_method_fields.py b/tests/test_property_method_fields.py
index 8c150b8..05ca086 100644
--- a/tests/test_property_method_fields.py
+++ b/tests/test_property_method_fields.py
@@ -5,8 +5,8 @@
import pytest
from django.db import models
-from superschema.schema import SuperSchema
-from superschema.types import Infer, ModelFields
+from django2pydantic.schema import django2pydantic
+from django2pydantic.types import Infer, ModelFields
from tests.utils import add_property_method, debug_json, get_openapi_equivalent
BasicTypes = [
@@ -35,10 +35,10 @@ class ModelA(models.Model):
value="test",
)
- class SchemaA(SuperSchema):
+ class SchemaA(django2pydantic):
"""SchemaA class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelA
diff --git a/tests/test_relations_are_supported.py b/tests/test_relations_are_supported.py
index df00a78..4849909 100644
--- a/tests/test_relations_are_supported.py
+++ b/tests/test_relations_are_supported.py
@@ -3,8 +3,8 @@
from django.db import models
-from superschema.schema import SuperSchema
-from superschema.types import Infer, ModelFields
+from django2pydantic.schema import django2pydantic
+from django2pydantic.types import Infer, ModelFields
from tests.utils import debug_json, django_model_factory, get_openapi_schema_from_field
@@ -40,10 +40,10 @@ class ModelB(models.Model):
name = models.CharField(max_length=100)
rel_a = models.ForeignKey(ModelA, on_delete=models.CASCADE)
- class SchemaB(SuperSchema):
+ class SchemaB(django2pydantic):
"""SchemaB class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelB
@@ -75,10 +75,10 @@ class ModelB(models.Model):
name = models.CharField(max_length=100)
rel_a = models.ForeignKey(ModelA, on_delete=models.CASCADE, to_field="var")
- class SchemaB(SuperSchema):
+ class SchemaB(django2pydantic):
"""SchemaB class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelB
@@ -110,10 +110,10 @@ class ModelB(models.Model):
name = models.CharField(max_length=100)
rel_a = models.ManyToManyField(ModelA)
- class SchemaB(SuperSchema):
+ class SchemaB(django2pydantic):
"""SchemaB class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelB
@@ -151,10 +151,10 @@ class ModelB(models.Model):
name = models.CharField(max_length=100)
rel_a = models.OneToOneField(ModelA, on_delete=models.CASCADE)
- class SchemaB(SuperSchema):
+ class SchemaB(django2pydantic):
"""SchemaB class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelB
@@ -189,10 +189,10 @@ class ModelB(models.Model):
class Meta:
default_related_name = "rel_b"
- class SchemaA(SuperSchema):
+ class SchemaA(django2pydantic):
"""SchemaA class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelB
@@ -227,10 +227,10 @@ class ModelB(models.Model):
class Meta:
default_related_name = "rel_b"
- class SchemaA(SuperSchema):
+ class SchemaA(django2pydantic):
"""SchemaA class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelA
@@ -265,10 +265,10 @@ class ModelB(models.Model):
class Meta:
default_related_name = "rel_b"
- class SchemaA(SuperSchema):
+ class SchemaA(django2pydantic):
"""SchemaA class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelB
@@ -300,10 +300,10 @@ class ModelB(models.Model):
name = models.CharField(max_length=100)
rel_a = models.ForeignKey(ModelA, on_delete=models.CASCADE)
- class SchemaB(SuperSchema):
+ class SchemaB(django2pydantic):
"""SchemaB class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelB
@@ -327,10 +327,10 @@ class ModelA(models.Model):
name = models.CharField(max_length=100)
rel_a = models.ManyToManyField("self", symmetrical=True)
- class SchemaA(SuperSchema):
+ class SchemaA(django2pydantic):
"""SchemaA class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelA
@@ -362,10 +362,10 @@ class ModelB(models.Model):
name = models.CharField(max_length=100)
rel_a = models.ManyToManyField(ModelA)
- class SchemaB(SuperSchema):
+ class SchemaB(django2pydantic):
"""SchemaB class."""
- class Meta(SuperSchema.Meta):
+ class Meta(django2pydantic.Meta):
"""Meta class."""
model = ModelB
diff --git a/tests/utils.py b/tests/utils.py
index 4fa9a72..8385e2c 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -9,8 +9,8 @@
from django.db import models
from rich import print_json
-from superschema.schema import SuperSchema
-from superschema.types import Infer, MetaFields, ModelFields
+from django2pydantic.schema import django2pydantic
+from django2pydantic.types import Infer, MetaFields, ModelFields
DjangoField = models.Field[Any, Any]
@@ -55,7 +55,7 @@ def pydantic_schema_from_field(field: DjangoField) -> type[pydantic.BaseModel]:
return type(
"Schema",
- (SuperSchema,),
+ (django2pydantic,),
{
"Meta": meta_class,
},
diff --git a/uv.lock b/uv.lock
index a11e3d5..0d57b5e 100644
--- a/uv.lock
+++ b/uv.lock
@@ -1,9 +1,5 @@
version = 1
-requires-python = ">=3.12"
-resolution-markers = [
- "python_full_version < '3.13'",
- "python_full_version >= '3.13'",
-]
+requires-python = "==3.12.*"
[[package]]
name = "annotated-types"
@@ -97,14 +93,14 @@ wheels = [
[[package]]
name = "basedpyright"
-version = "1.21.0"
+version = "1.21.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "nodejs-wheel-binaries" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/94/91/d66f9ece468b3daa2f3d357304c816438be4595006928ea5639fb6b5139e/basedpyright-1.21.0.tar.gz", hash = "sha256:e3a9f5b89acc7f23d5a10d95ea6056b2247fcd15b8b248ad44c560c85c39d5e3", size = 20789741 }
+sdist = { url = "https://files.pythonhosted.org/packages/7a/57/ea77a6bad60ad7cb7b457957968a93f62730629316301b7d48fc439cb87f/basedpyright-1.21.1.tar.gz", hash = "sha256:c27e5921768db2141360889978678152a685fe1c6ff95652b2157240a5fd575c", size = 20840717 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/20/f7/97af385e43208d600f892da1b8c94f35d4e9165d5c774013bb202617dd7d/basedpyright-1.21.0-py3-none-any.whl", hash = "sha256:48902c476d6301c556df6eeae9acf1e34b176b14f8702ad5c770f4e6a747018a", size = 11148428 },
+ { url = "https://files.pythonhosted.org/packages/f6/94/06f6a4b34167e838b81e46e40d5acdb03cb56dd2c229319aff091f9f43cb/basedpyright-1.21.1-py3-none-any.whl", hash = "sha256:e4c30c84d5fe0f33ba2f7bd5b20019aa6f031ef4c5032705b4960dad52066667", size = 11173914 },
]
[[package]]
@@ -116,6 +112,33 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/64/69/f6db6e4cb2fe2f887dead40b76caa91af4844cb647dd2c7223bb010aa416/beartype-0.19.0-py3-none-any.whl", hash = "sha256:33b2694eda0daf052eb2aff623ed9a8a586703bbf0a90bbc475a83bbf427f699", size = 1039760 },
]
+[[package]]
+name = "boltons"
+version = "21.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ad/1f/6c0608d86e0fc77c982a2923ece80eef85f091f2332fc13cbce41d70d502/boltons-21.0.0.tar.gz", hash = "sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13", size = 180201 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f7/a7/1a31561d10a089fcb46fe286766dd4e053a12f6e23b4fd1c26478aff2475/boltons-21.0.0-py2.py3-none-any.whl", hash = "sha256:b9bb7b58b2b420bbe11a6025fdef6d3e5edc9f76a42fb467afe7ca212ef9948b", size = 193723 },
+]
+
+[[package]]
+name = "bracex"
+version = "2.5.post1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d6/6c/57418c4404cd22fe6275b8301ca2b46a8cdaa8157938017a9ae0b3edf363/bracex-2.5.post1.tar.gz", hash = "sha256:12c50952415bfa773d2d9ccb8e79651b8cdb1f31a42f6091b804f6ba2b4a66b6", size = 26641 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4b/02/8db98cdc1a58e0abd6716d5e63244658e6e63513c65f469f34b6f1053fd0/bracex-2.5.post1-py3-none-any.whl", hash = "sha256:13e5732fec27828d6af308628285ad358047cec36801598368cb28bc631dbaf6", size = 11558 },
+]
+
+[[package]]
+name = "certifi"
+version = "2024.8.30"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", size = 168507 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", size = 167321 },
+]
+
[[package]]
name = "cffi"
version = "1.17.1"
@@ -136,17 +159,30 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 },
{ url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 },
{ url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 },
- { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 },
- { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 },
- { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 },
- { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 },
- { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 },
- { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 },
- { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 },
- { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 },
- { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 },
- { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 },
- { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 },
+]
+
+[[package]]
+name = "charset-normalizer"
+version = "3.4.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", size = 106620 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d3/0b/4b7a70987abf9b8196845806198975b6aab4ce016632f817ad758a5aa056/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", size = 194445 },
+ { url = "https://files.pythonhosted.org/packages/50/89/354cc56cf4dd2449715bc9a0f54f3aef3dc700d2d62d1fa5bbea53b13426/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", size = 125275 },
+ { url = "https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", size = 119020 },
+ { url = "https://files.pythonhosted.org/packages/9d/e4/9263b8240ed9472a2ae7ddc3e516e71ef46617fe40eaa51221ccd4ad9a27/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", size = 139128 },
+ { url = "https://files.pythonhosted.org/packages/6b/e3/9f73e779315a54334240353eaea75854a9a690f3f580e4bd85d977cb2204/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", size = 149277 },
+ { url = "https://files.pythonhosted.org/packages/1a/cf/f1f50c2f295312edb8a548d3fa56a5c923b146cd3f24114d5adb7e7be558/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", size = 142174 },
+ { url = "https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", size = 143838 },
+ { url = "https://files.pythonhosted.org/packages/a4/01/2117ff2b1dfc61695daf2babe4a874bca328489afa85952440b59819e9d7/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", size = 146149 },
+ { url = "https://files.pythonhosted.org/packages/f6/9b/93a332b8d25b347f6839ca0a61b7f0287b0930216994e8bf67a75d050255/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", size = 140043 },
+ { url = "https://files.pythonhosted.org/packages/ab/f6/7ac4a01adcdecbc7a7587767c776d53d369b8b971382b91211489535acf0/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", size = 148229 },
+ { url = "https://files.pythonhosted.org/packages/9d/be/5708ad18161dee7dc6a0f7e6cf3a88ea6279c3e8484844c0590e50e803ef/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", size = 151556 },
+ { url = "https://files.pythonhosted.org/packages/5a/bb/3d8bc22bacb9eb89785e83e6723f9888265f3a0de3b9ce724d66bd49884e/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", size = 149772 },
+ { url = "https://files.pythonhosted.org/packages/f7/fa/d3fc622de05a86f30beea5fc4e9ac46aead4731e73fd9055496732bcc0a4/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", size = 144800 },
+ { url = "https://files.pythonhosted.org/packages/9a/65/bdb9bc496d7d190d725e96816e20e2ae3a6fa42a5cac99c3c3d6ff884118/charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", size = 94836 },
+ { url = "https://files.pythonhosted.org/packages/3e/67/7b72b69d25b89c0b3cea583ee372c43aa24df15f0e0f8d3982c57804984b/charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", size = 102187 },
+ { url = "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", size = 49446 },
]
[[package]]
@@ -161,6 +197,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941 },
]
+[[package]]
+name = "click-option-group"
+version = "0.5.6"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e7/b8/91054601a2e05fd9060cb1baf56be5b24145817b059e078669e1099529c7/click-option-group-0.5.6.tar.gz", hash = "sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777", size = 16517 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/af/75/81ea958bc0f7e410257cb2a42531b93a7695a31930cde87192c010a52c50/click_option_group-0.5.6-py3-none-any.whl", hash = "sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7", size = 12467 },
+]
+
[[package]]
name = "colorama"
version = "0.4.6"
@@ -196,40 +244,20 @@ wheels = [
[[package]]
name = "coverage"
-version = "7.6.4"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/52/12/3669b6382792783e92046730ad3327f53b2726f0603f4c311c4da4824222/coverage-7.6.4.tar.gz", hash = "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73", size = 798716 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/7d/e7/9291de916d084f41adddfd4b82246e68d61d6a75747f075f7e64628998d2/coverage-7.6.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2", size = 207013 },
- { url = "https://files.pythonhosted.org/packages/27/03/932c2c5717a7fa80cd43c6a07d3177076d97b79f12f40f882f9916db0063/coverage-7.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117", size = 207251 },
- { url = "https://files.pythonhosted.org/packages/d5/3f/0af47dcb9327f65a45455fbca846fe96eb57c153af46c4754a3ba678938a/coverage-7.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613", size = 240268 },
- { url = "https://files.pythonhosted.org/packages/8a/3c/37a9d81bbd4b23bc7d46ca820e16174c613579c66342faa390a271d2e18b/coverage-7.6.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27", size = 237298 },
- { url = "https://files.pythonhosted.org/packages/c0/70/6b0627e5bd68204ee580126ed3513140b2298995c1233bd67404b4e44d0e/coverage-7.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52", size = 239367 },
- { url = "https://files.pythonhosted.org/packages/3c/eb/634d7dfab24ac3b790bebaf9da0f4a5352cbc125ce6a9d5c6cf4c6cae3c7/coverage-7.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2", size = 238853 },
- { url = "https://files.pythonhosted.org/packages/d9/0d/8e3ed00f1266ef7472a4e33458f42e39492e01a64281084fb3043553d3f1/coverage-7.6.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1", size = 237160 },
- { url = "https://files.pythonhosted.org/packages/ce/9c/4337f468ef0ab7a2e0887a9c9da0e58e2eada6fc6cbee637a4acd5dfd8a9/coverage-7.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5", size = 238824 },
- { url = "https://files.pythonhosted.org/packages/5e/09/3e94912b8dd37251377bb02727a33a67ee96b84bbbe092f132b401ca5dd9/coverage-7.6.4-cp312-cp312-win32.whl", hash = "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17", size = 209639 },
- { url = "https://files.pythonhosted.org/packages/01/69/d4f3a4101171f32bc5b3caec8ff94c2c60f700107a6aaef7244b2c166793/coverage-7.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08", size = 210428 },
- { url = "https://files.pythonhosted.org/packages/c2/4d/2dede4f7cb5a70fb0bb40a57627fddf1dbdc6b9c1db81f7c4dcdcb19e2f4/coverage-7.6.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9", size = 207039 },
- { url = "https://files.pythonhosted.org/packages/3f/f9/d86368ae8c79e28f1fb458ebc76ae9ff3e8bd8069adc24e8f2fed03c58b7/coverage-7.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba", size = 207298 },
- { url = "https://files.pythonhosted.org/packages/64/c5/b4cc3c3f64622c58fbfd4d8b9a7a8ce9d355f172f91fcabbba1f026852f6/coverage-7.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c", size = 239813 },
- { url = "https://files.pythonhosted.org/packages/8a/86/14c42e60b70a79b26099e4d289ccdfefbc68624d096f4481163085aa614c/coverage-7.6.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06", size = 236959 },
- { url = "https://files.pythonhosted.org/packages/7f/f8/4436a643631a2fbab4b44d54f515028f6099bfb1cd95b13cfbf701e7f2f2/coverage-7.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f", size = 238950 },
- { url = "https://files.pythonhosted.org/packages/49/50/1571810ddd01f99a0a8be464a4ac8b147f322cd1e8e296a1528984fc560b/coverage-7.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b", size = 238610 },
- { url = "https://files.pythonhosted.org/packages/f3/8c/6312d241fe7cbd1f0cade34a62fea6f333d1a261255d76b9a87074d8703c/coverage-7.6.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21", size = 236697 },
- { url = "https://files.pythonhosted.org/packages/ce/5f/fef33dfd05d87ee9030f614c857deb6df6556b8f6a1c51bbbb41e24ee5ac/coverage-7.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a", size = 238541 },
- { url = "https://files.pythonhosted.org/packages/a9/64/6a984b6e92e1ea1353b7ffa08e27f707a5e29b044622445859200f541e8c/coverage-7.6.4-cp313-cp313-win32.whl", hash = "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e", size = 209707 },
- { url = "https://files.pythonhosted.org/packages/5c/60/ce5a9e942e9543783b3db5d942e0578b391c25cdd5e7f342d854ea83d6b7/coverage-7.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963", size = 210439 },
- { url = "https://files.pythonhosted.org/packages/78/53/6719677e92c308207e7f10561a1b16ab8b5c00e9328efc9af7cfd6fb703e/coverage-7.6.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f", size = 207784 },
- { url = "https://files.pythonhosted.org/packages/fa/dd/7054928930671fcb39ae6a83bb71d9ab5f0afb733172543ced4b09a115ca/coverage-7.6.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806", size = 208058 },
- { url = "https://files.pythonhosted.org/packages/b5/7d/fd656ddc2b38301927b9eb3aae3fe827e7aa82e691923ed43721fd9423c9/coverage-7.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11", size = 250772 },
- { url = "https://files.pythonhosted.org/packages/90/d0/eb9a3cc2100b83064bb086f18aedde3afffd7de6ead28f69736c00b7f302/coverage-7.6.4-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3", size = 246490 },
- { url = "https://files.pythonhosted.org/packages/45/44/3f64f38f6faab8a0cfd2c6bc6eb4c6daead246b97cf5f8fc23bf3788f841/coverage-7.6.4-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a", size = 248848 },
- { url = "https://files.pythonhosted.org/packages/5d/11/4c465a5f98656821e499f4b4619929bd5a34639c466021740ecdca42aa30/coverage-7.6.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc", size = 248340 },
- { url = "https://files.pythonhosted.org/packages/f1/96/ebecda2d016cce9da812f404f720ca5df83c6b29f65dc80d2000d0078741/coverage-7.6.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70", size = 246229 },
- { url = "https://files.pythonhosted.org/packages/16/d9/3d820c00066ae55d69e6d0eae11d6149a5ca7546de469ba9d597f01bf2d7/coverage-7.6.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef", size = 247510 },
- { url = "https://files.pythonhosted.org/packages/8f/c3/4fa1eb412bb288ff6bfcc163c11700ff06e02c5fad8513817186e460ed43/coverage-7.6.4-cp313-cp313t-win32.whl", hash = "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e", size = 210353 },
- { url = "https://files.pythonhosted.org/packages/7e/77/03fc2979d1538884d921c2013075917fc927f41cd8526909852fe4494112/coverage-7.6.4-cp313-cp313t-win_amd64.whl", hash = "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1", size = 211502 },
+version = "7.6.7"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/bf/68/26895f8b068e384b1ec9ab122565b913b735e6b4c618b3d265a280607edc/coverage-7.6.7.tar.gz", hash = "sha256:d79d4826e41441c9a118ff045e4bccb9fdbdcb1d02413e7ea6eb5c87b5439d24", size = 799938 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/84/30/30e9df650b9038962c62d900b093a17414d5b43b4d07d47b8698d9e7ce26/coverage-7.6.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f07ff574986bc3edb80e2c36391678a271d555f91fd1d332a1e0f4b5ea4b6ea9", size = 207172 },
+ { url = "https://files.pythonhosted.org/packages/88/8b/e28f86412317b9514692fd6f9d8ac6faa12494c3f470c3c63f202e10c756/coverage-7.6.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:49ed5ee4109258973630c1f9d099c7e72c5c36605029f3a91fe9982c6076c82b", size = 207406 },
+ { url = "https://files.pythonhosted.org/packages/ac/46/da1bd9a3a893f74f5ce85f35e2755fcb00a80ed21e18d300c54f64938b1c/coverage-7.6.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3e8796434a8106b3ac025fd15417315d7a58ee3e600ad4dbcfddc3f4b14342c", size = 240424 },
+ { url = "https://files.pythonhosted.org/packages/f6/12/af8e932496de1997bf4a36785d025ddac6427cbaf6954f26c2edaf21a58a/coverage-7.6.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3b925300484a3294d1c70f6b2b810d6526f2929de954e5b6be2bf8caa1f12c1", size = 237456 },
+ { url = "https://files.pythonhosted.org/packages/60/a2/23eb11eb60f825a84397cb94701d6f41d2e8e88ad7d0ba2b4339f38435fb/coverage-7.6.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c42ec2c522e3ddd683dec5cdce8e62817afb648caedad9da725001fa530d354", size = 239527 },
+ { url = "https://files.pythonhosted.org/packages/47/9e/63b318bc469308a32b0fbd6c80e2ea05dd7a2b7e840a46b3974843083a8c/coverage-7.6.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0266b62cbea568bd5e93a4da364d05de422110cbed5056d69339bd5af5685433", size = 239011 },
+ { url = "https://files.pythonhosted.org/packages/99/47/1e84b067df3f021dfbc9cba09ec9acd4cb64938648a234e5bdf3006fd08b/coverage-7.6.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e5f2a0f161d126ccc7038f1f3029184dbdf8f018230af17ef6fd6a707a5b881f", size = 237316 },
+ { url = "https://files.pythonhosted.org/packages/12/9d/96baaafc948d4a0ef2248a611d41051eea0917ef881d744879dd20be7c4a/coverage-7.6.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c132b5a22821f9b143f87446805e13580b67c670a548b96da945a8f6b4f2efbb", size = 238980 },
+ { url = "https://files.pythonhosted.org/packages/87/d9/97af1886ca3f612d0cea2999d33e90d2f5b8fdf9bedc2d3bc75883efec4c/coverage-7.6.7-cp312-cp312-win32.whl", hash = "sha256:7c07de0d2a110f02af30883cd7dddbe704887617d5c27cf373362667445a4c76", size = 209801 },
+ { url = "https://files.pythonhosted.org/packages/f8/4d/1e31c2018b1b3738154639f94188b1f54098fbf0f80c7ec104928576d0bb/coverage-7.6.7-cp312-cp312-win_amd64.whl", hash = "sha256:fd49c01e5057a451c30c9b892948976f5d38f2cbd04dc556a82743ba8e27ed8c", size = 210587 },
]
[[package]]
@@ -265,10 +293,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a5/6b/c336d1eba1aedc9f654aefcdfe47ec41657d149f28ca1477c5f9009681c6/debugpy-1.8.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64674e95916e53c2e9540a056e5f489e0ad4872645399d778f7c598eacb7b7f9", size = 4229617 },
{ url = "https://files.pythonhosted.org/packages/63/9c/d9276c41e9e14164b31bcba789c87a355c091d0fc2d4e4e36a4881c9aa54/debugpy-1.8.8-cp312-cp312-win32.whl", hash = "sha256:5c6e885dbf12015aed73770f29dec7023cb310d0dc2ba8bfbeb5c8e43f80edc9", size = 5167033 },
{ url = "https://files.pythonhosted.org/packages/6d/1c/fd4bc22196b2d0defaa9f644ea4d676d0cb53b6434091b5fa2d4e49c85f2/debugpy-1.8.8-cp312-cp312-win_amd64.whl", hash = "sha256:19ffbd84e757a6ca0113574d1bf5a2298b3947320a3e9d7d8dc3377f02d9f864", size = 5209968 },
- { url = "https://files.pythonhosted.org/packages/90/45/6745f342bbf41bde7eb5dbf5567b794a4a5498a7a729146cb3101b875b30/debugpy-1.8.8-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:705cd123a773d184860ed8dae99becd879dfec361098edbefb5fc0d3683eb804", size = 2499523 },
- { url = "https://files.pythonhosted.org/packages/5c/39/0374610062a384648db9b7b315d0c906facf23613bfd19527135a7c0a420/debugpy-1.8.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890fd16803f50aa9cb1a9b9b25b5ec321656dd6b78157c74283de241993d086f", size = 4218219 },
- { url = "https://files.pythonhosted.org/packages/cc/19/5b8a68eb9bbafd6bfd27ba0ed93d411f3fd50935ecdd2df242de2110a7c9/debugpy-1.8.8-cp313-cp313-win32.whl", hash = "sha256:90244598214bbe704aa47556ec591d2f9869ff9e042e301a2859c57106649add", size = 5171845 },
- { url = "https://files.pythonhosted.org/packages/cd/04/7381dab68e40ca877d5beffc25ad1a0d3d2557cf7465405435fac9e27ef5/debugpy-1.8.8-cp313-cp313-win_amd64.whl", hash = "sha256:4b93e4832fd4a759a0c465c967214ed0c8a6e8914bced63a28ddb0dd8c5f078b", size = 5206890 },
{ url = "https://files.pythonhosted.org/packages/03/99/ec2190d03df5dbd610418919bd1c3d8e6f61d0a97894e11ade6d3260cfb8/debugpy-1.8.8-py2.py3-none-any.whl", hash = "sha256:ec684553aba5b4066d4de510859922419febc710df7bba04fe9e7ef3de15d34f", size = 5157124 },
]
@@ -281,6 +305,27 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186", size = 9073 },
]
+[[package]]
+name = "defusedxml"
+version = "0.7.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 },
+]
+
+[[package]]
+name = "deprecated"
+version = "1.2.15"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/2e/a3/53e7d78a6850ffdd394d7048a31a6f14e44900adedf190f9a165f6b69439/deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d", size = 2977612 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1d/8f/c7f227eb42cfeaddce3eb0c96c60cbca37797fa7b34f8e1aeadf6c5c0983/Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320", size = 9941 },
+]
+
[[package]]
name = "dill"
version = "0.3.9"
@@ -360,6 +405,85 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/6a/ed/f79ae5ad993bdf900d61892d2a9fc0145441a507a7579890fb8e21e4a7bc/django_stubs_ext-5.1.1-py3-none-any.whl", hash = "sha256:3907f99e178c93323e2ce908aef8352adb8c047605161f8d9e5e7b4efb5a6a9c", size = 8965 },
]
+[[package]]
+name = "django2pydantic"
+version = "0.1.0"
+source = { editable = "." }
+
+[package.dev-dependencies]
+dev = [
+ { name = "basedpyright" },
+ { name = "beartype" },
+ { name = "debugpy" },
+ { name = "django" },
+ { name = "django-ninja" },
+ { name = "django-stubs", extra = ["compatible-mypy"] },
+ { name = "django-stubs-ext" },
+ { name = "email-validator" },
+ { name = "hypothesis" },
+ { name = "import-linter" },
+ { name = "ipykernel" },
+ { name = "isort" },
+ { name = "mypy" },
+ { name = "ninja-schema" },
+ { name = "nox" },
+ { name = "pydantic" },
+ { name = "pylint-django" },
+ { name = "pyre-check" },
+ { name = "pyright" },
+ { name = "pytest" },
+ { name = "pytest-cov" },
+ { name = "pytest-django" },
+ { name = "pytest-instafail" },
+ { name = "pytest-testmon" },
+ { name = "pytest-watch" },
+ { name = "python-semantic-release" },
+ { name = "pytype" },
+ { name = "rich" },
+ { name = "ruff" },
+ { name = "semgrep" },
+ { name = "typeguard" },
+ { name = "wemake-python-styleguide" },
+]
+
+[package.metadata]
+
+[package.metadata.requires-dev]
+dev = [
+ { name = "basedpyright", specifier = ">=1.21.0" },
+ { name = "beartype", specifier = ">=0.19.0" },
+ { name = "debugpy", specifier = ">=1.8.8" },
+ { name = "django", specifier = ">=5.1.3" },
+ { name = "django-ninja", specifier = ">=1.3.0" },
+ { name = "django-stubs", extras = ["compatible-mypy"], specifier = ">=5.1.1" },
+ { name = "django-stubs-ext", specifier = ">=5.1.1" },
+ { name = "email-validator", specifier = ">=2.2.0" },
+ { name = "hypothesis", specifier = ">=6.118.0" },
+ { name = "import-linter", specifier = ">=2.1" },
+ { name = "ipykernel", specifier = ">=6.29.5" },
+ { name = "isort", specifier = ">=5.13.2" },
+ { name = "mypy", specifier = ">=1.13.0" },
+ { name = "ninja-schema", specifier = ">=0.13.6" },
+ { name = "nox", specifier = ">=2024.10.9" },
+ { name = "pydantic", specifier = ">=2.9.2" },
+ { name = "pylint-django", specifier = ">=2.6.1" },
+ { name = "pyre-check", specifier = ">=0.9.23" },
+ { name = "pyright", specifier = ">=1.1.388" },
+ { name = "pytest", specifier = ">=8.3.3" },
+ { name = "pytest-cov", specifier = ">=6.0.0" },
+ { name = "pytest-django", specifier = ">=4.9.0" },
+ { name = "pytest-instafail", specifier = ">=0.5.0" },
+ { name = "pytest-testmon", specifier = ">=2.1.1" },
+ { name = "pytest-watch", specifier = ">=4.2.0" },
+ { name = "python-semantic-release", specifier = ">=9.14.0" },
+ { name = "pytype", specifier = ">=2024.10.11" },
+ { name = "rich", specifier = ">=13.9.4" },
+ { name = "ruff", specifier = ">=0.7.3" },
+ { name = "semgrep", specifier = ">=1.85.0" },
+ { name = "typeguard", specifier = ">=4.4.1" },
+ { name = "wemake-python-styleguide", specifier = ">=0.19.2" },
+]
+
[[package]]
name = "dnspython"
version = "2.7.0"
@@ -384,6 +508,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408 },
]
+[[package]]
+name = "dotty-dict"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6a/ab/88d67f02024700b48cd8232579ad1316aa9df2272c63049c27cc094229d6/dotty_dict-1.3.1.tar.gz", hash = "sha256:4b016e03b8ae265539757a53eba24b9bfda506fb94fbce0bee843c6f05541a15", size = 7699 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1a/91/e0d457ee03ec33d79ee2cd8d212debb1bc21dfb99728ae35efdb5832dc22/dotty_dict-1.3.1-py3-none-any.whl", hash = "sha256:5022d234d9922f13aa711b4950372a06a6d64cb6d6db9ba43d0ba133ebfce31f", size = 7014 },
+]
+
[[package]]
name = "email-validator"
version = "2.2.0"
@@ -406,6 +539,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/90/c2/533e1338429aeba1f089566a2314d69d3e78ab57a73006f16a923bf2b24c/eradicate-2.3.0-py3-none-any.whl", hash = "sha256:2b29b3dd27171f209e4ddd8204b70c02f0682ae95eecb353f10e8d72b149c63e", size = 6113 },
]
+[[package]]
+name = "exceptiongroup"
+version = "1.2.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 },
+]
+
[[package]]
name = "executing"
version = "2.1.0"
@@ -415,6 +557,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/b5/fd/afcd0496feca3276f509df3dbd5dae726fcc756f1a08d9e25abe1733f962/executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf", size = 25805 },
]
+[[package]]
+name = "face"
+version = "24.0.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "boltons" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ac/79/2484075a8549cd64beae697a8f664dee69a5ccf3a7439ee40c8f93c1978a/face-24.0.0.tar.gz", hash = "sha256:611e29a01ac5970f0077f9c577e746d48c082588b411b33a0dd55c4d872949f6", size = 62732 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e9/47/21867c2e5fd006c8d36a560df9e32cb4f1f566b20c5dd41f5f8a2124f7de/face-24.0.0-py3-none-any.whl", hash = "sha256:0e2c17b426fa4639a4e77d1de9580f74a98f4869ba4c7c8c175b810611622cd3", size = 54742 },
+]
+
[[package]]
name = "filelock"
version = "3.16.1"
@@ -589,6 +743,56 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/e8/22/e5f4ccc41dda8db61cf3bb7a93549f9ae8e1dd10547b3d71cc8483a0b437/flake8_string_format-0.3.0-py2.py3-none-any.whl", hash = "sha256:812ff431f10576a74c89be4e85b8e075a705be39bc40c4b4278b5b13e2afa9af", size = 7266 },
]
+[[package]]
+name = "gitdb"
+version = "4.0.11"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "smmap" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/19/0d/bbb5b5ee188dec84647a4664f3e11b06ade2bde568dbd489d9d64adef8ed/gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b", size = 394469 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/fd/5b/8f0c4a5bb9fd491c277c21eff7ccae71b47d43c4446c9d0c6cff2fe8c2c4/gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4", size = 62721 },
+]
+
+[[package]]
+name = "gitpython"
+version = "3.1.43"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "gitdb" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b6/a1/106fd9fa2dd989b6fb36e5893961f82992cf676381707253e0bf93eb1662/GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c", size = 214149 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e9/bd/cc3a402a6439c15c3d4294333e13042b915bbeab54edc457c723931fed3f/GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff", size = 207337 },
+]
+
+[[package]]
+name = "glom"
+version = "22.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "attrs" },
+ { name = "boltons" },
+ { name = "face" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/3f/d1/69432deefa6f5283ec75b246d0540097ae26f618b915519ee3824c4c5dd6/glom-22.1.0.tar.gz", hash = "sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5", size = 189738 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/27/e8/68e274b2a30e1fdfd25bdc27194382be3f233929c8f727c0440d58ac074f/glom-22.1.0-py2.py3-none-any.whl", hash = "sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772", size = 100687 },
+]
+
+[[package]]
+name = "googleapis-common-protos"
+version = "1.66.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "protobuf" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ff/a7/8e9cccdb1c49870de6faea2a2764fa23f627dd290633103540209f03524c/googleapis_common_protos-1.66.0.tar.gz", hash = "sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c", size = 114376 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl", hash = "sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed", size = 221682 },
+]
+
[[package]]
name = "grimp"
version = "3.5"
@@ -612,33 +816,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/73/a2/03ffdf03f2ab642bfe296eff94f51a6a8e3b04d4b5c7567a7b3c9261313c/grimp-3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3f83b85aad278dfcaf2bf27b9cfa6dd6533dd96ecc510ba3bc0141344686857f", size = 560996 },
{ url = "https://files.pythonhosted.org/packages/13/52/fb9ad8e26710d7eb0afccf083087810d8cbd0f4eb3863f0641c8b251c046/grimp-3.5-cp312-none-win32.whl", hash = "sha256:f88307f0e50883ab73cc59164a5a9396e8e1c8b68b8e2edef68d478b91d81000", size = 222988 },
{ url = "https://files.pythonhosted.org/packages/2e/85/4058a766fc2b53b4b1318944c46bc9405fc7dea7ebb2eca377896f3fbfd5/grimp-3.5-cp312-none-win_amd64.whl", hash = "sha256:6fa422c150597f8e6ad51c4fe2b271747057abe638acca5eebb2162e536065ed", size = 236195 },
- { url = "https://files.pythonhosted.org/packages/31/02/33f4b4bc6d22b5ff7672ce5c67464f4dcee6e86cf3a072cdc9b1d46e5178/grimp-3.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:448dba63f938d0e13e6121559749816e3b2644202c912cc308e7608c6034737a", size = 351545 },
- { url = "https://files.pythonhosted.org/packages/78/e0/44bd64767763160ea0862ad756b88dfd375060b5636aaeb79c10861f09ae/grimp-3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:17113aba41269d0ee91512c96eeb850c7c668440c6a8e0bfc94d17762184b293", size = 342780 },
- { url = "https://files.pythonhosted.org/packages/55/e6/b0fc52ab1ee04c80f1709eaa2e99468a8981d0a23dcbc7c2c6e781da22cc/grimp-3.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6a55614945c319d1dc692c3e43f3a02b80c116a1298e593f5f887b97e6c983a", size = 399300 },
- { url = "https://files.pythonhosted.org/packages/dc/b9/aa6365859c96881d02f6ad6ab8aa38eaced5887f3cc431165ed9ee7b35ea/grimp-3.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aba7ce7839b72efb4c6d06404d2b2a3026e28dd89816f4e546b3cd6626cbeeb1", size = 405288 },
- { url = "https://files.pythonhosted.org/packages/7d/f8/32446714ed0f23a1b8067f9f627c55f7c186d3477baa5c6e6312c95060ab/grimp-3.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eaedfba320a70d87b14acb25a685c8629586b943129c71ffd02b47d9531c11ce", size = 416565 },
- { url = "https://files.pythonhosted.org/packages/93/3c/185a0292111350823fdd7d61481157295d90260e248888ab274a00f84456/grimp-3.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60a9afd3dd00ad1d301a07f97e26bc9ecdc3d2db39ab6ac46c315a7dea0a96cb", size = 437249 },
- { url = "https://files.pythonhosted.org/packages/1a/21/55ede2511dc111e9ca90d23e479e263e0845dc7e389515587f9575c5b139/grimp-3.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:11c66039c0475e5c9fc6a086264f11870181ae79f603caa5dffa1411ddad636b", size = 443560 },
- { url = "https://files.pythonhosted.org/packages/12/e1/79f6a4212d46ae6db6281c5b179990d2dd53c72eed7587592c0968f0d3f0/grimp-3.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bff39a0061790f074f86a7841cd8e6064aa7b2208cb1ee5c3f2e685dead2b66e", size = 393185 },
- { url = "https://files.pythonhosted.org/packages/46/62/1a7f8b54d73f3ef6595dd8bfa10686321c04b562fbb997e9d46f95fe7b96/grimp-3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cf7f5367c4a87b8e9f08c09e7401d2d73f21cb65d6142445819f9df0d6ab3f6b", size = 573292 },
- { url = "https://files.pythonhosted.org/packages/24/1d/b90853a0b7eb7aa08073dafd896551d26a416e922a68eb1cab35319593c7/grimp-3.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:edee4b087f007dab8b65461caf6a1b67b2f9480cceb5f6aceea87008d8f283c4", size = 664226 },
- { url = "https://files.pythonhosted.org/packages/6b/7b/ce6cf6ba2da6305725692ea2a7a4080da60ac075d23353fc07cae7adb5b7/grimp-3.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6af125013ad2a56c18f2f53a3fcabbfbe96c70374abecd6f14b82dc444726ebe", size = 589077 },
- { url = "https://files.pythonhosted.org/packages/ad/29/03156310a1bf278e8dd46e2e02311bad1d1551b1555d245e28008c318086/grimp-3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:24aabae0183ca5fd5a710257ff37120b55d8e6d6d4cbb2c08481552832e5c901", size = 560463 },
- { url = "https://files.pythonhosted.org/packages/1e/29/300daf9b6a7f3f979a379cda69e04374912031fd85f3b6f0e03d9b637263/grimp-3.5-cp313-none-win32.whl", hash = "sha256:506091bfd600dd7ad427586998ef5e54a2098485148a1499bd9af5943d2fb0b7", size = 222673 },
- { url = "https://files.pythonhosted.org/packages/e5/8c/15834d919407c1ab11590367e03ac9d1c162d518a0f54f2970e315e0d623/grimp-3.5-cp313-none-win_amd64.whl", hash = "sha256:099388df82d922ddc589f362f1a523ab053c8dee5d29a6b622b2cddf481c6a2f", size = 236037 },
]
[[package]]
name = "hypothesis"
-version = "6.118.7"
+version = "6.119.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "attrs" },
{ name = "sortedcontainers" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/16/31/7cbfc717e2f529472695ab97d508a9b995f8e463a9b8a699762cdaa48ee3/hypothesis-6.118.7.tar.gz", hash = "sha256:604328f5d766a056182f54b4826f9b2d5f664f42bff68fd81b4d9d6c44b2398b", size = 410787 }
+sdist = { url = "https://files.pythonhosted.org/packages/a5/6f/98262d753772030d140d8cd04eadebac545ba4945702f4471decc37b8cb5/hypothesis-6.119.3.tar.gz", hash = "sha256:1403676d95bc9f118a30ce2c97fcbdd28dd99f3a1ffe3456970d98a56b370f36", size = 412497 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/3c/4c/b87dc5c9ca9a4cc0c6828a90c2d1de6089f844e0c5badcdeac14fdb386c3/hypothesis-6.118.7-py3-none-any.whl", hash = "sha256:5fe1d80f46d81c6160ef762e4e11a61bb4eb6838a8fb7bd3c5a2542fb107bc38", size = 471912 },
+ { url = "https://files.pythonhosted.org/packages/67/9d/32e2277a2dbc48b687f4acedbc6421c33a5f03177c8cb0d262d5ffc2ccf3/hypothesis-6.119.3-py3-none-any.whl", hash = "sha256:dff13689c4ceb0d84d92e0309fca3ccc1b547ac30552037c712a9080eb75cd05", size = 473632 },
]
[[package]]
@@ -652,11 +842,11 @@ wheels = [
[[package]]
name = "immutabledict"
-version = "4.2.0"
+version = "4.2.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/55/f4/710c84db4d77767176342913ac6b25f43aaed6d0a0bdb9168a8d2936d9c7/immutabledict-4.2.0.tar.gz", hash = "sha256:e003fd81aad2377a5a758bf7e1086cf3b70b63e9a5cc2f46bce8d0a2b4727c5f", size = 6165 }
+sdist = { url = "https://files.pythonhosted.org/packages/e0/c5/4240186fbabc58fba41bbe17c5f0cd37ffd4c0b85a5029ab104f946df175/immutabledict-4.2.1.tar.gz", hash = "sha256:d91017248981c72eb66c8ff9834e99c2f53562346f23e7f51e7a5ebcf66a3bcc", size = 6228 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/e2/13/3cf4ac5b3403f3456e645c4533883ef67b1bb0c72e56b79c707715f57a74/immutabledict-4.2.0-py3-none-any.whl", hash = "sha256:d728b2c2410d698d95e6200237feb50a695584d20289ad3379a439aa3d90baba", size = 4702 },
+ { url = "https://files.pythonhosted.org/packages/59/56/25ca7b848164b7d93dbd5fc97dd7751700c93e324fe854afbeb562ee2f98/immutabledict-4.2.1-py3-none-any.whl", hash = "sha256:c56a26ced38c236f79e74af3ccce53772827cef5c3bce7cab33ff2060f756373", size = 4700 },
]
[[package]]
@@ -685,6 +875,27 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/da/1e/cc7360b4259f283b1a2de153335ce15ac9e710d66145aa471cffefe4b394/importlab-0.8.1-py2.py3-none-any.whl", hash = "sha256:124cfa00e8a34fefe8aac1a5e94f56c781b178c9eb61a1d3f60f7e03b77338d3", size = 21671 },
]
+[[package]]
+name = "importlib-metadata"
+version = "7.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "zipp" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a0/fc/c4e6078d21fc4fa56300a241b87eae76766aa380a23fc450fc85bb7bf547/importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2", size = 52120 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2d/0a/679461c511447ffaf176567d5c496d1de27cbe34a87df6677d7171b2fbd4/importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570", size = 24409 },
+]
+
+[[package]]
+name = "importlib-resources"
+version = "6.4.5"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/98/be/f3e8c6081b684f176b761e6a2fef02a0be939740ed6f54109a2951d806f3/importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065", size = 43372 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717", size = 36115 },
+]
+
[[package]]
name = "iniconfig"
version = "2.0.0"
@@ -771,6 +982,33 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d", size = 133271 },
]
+[[package]]
+name = "jsonschema"
+version = "4.23.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "attrs" },
+ { name = "jsonschema-specifications" },
+ { name = "referencing" },
+ { name = "rpds-py" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/38/2e/03362ee4034a4c917f697890ccd4aec0800ccf9ded7f511971c75451deec/jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", size = 325778 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566", size = 88462 },
+]
+
+[[package]]
+name = "jsonschema-specifications"
+version = "2024.10.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "referencing" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/10/db/58f950c996c793472e336ff3655b13fbcf1e3b359dcf52dcf3ed3b52c352/jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", size = 15561 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf", size = 18459 },
+]
+
[[package]]
name = "jupyter-client"
version = "8.6.3"
@@ -816,12 +1054,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/63/c4/e056f3f34642f294421bd4a4d4b40aeccaf153a456bcb4d7e54f4337143f/libcst-1.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dba93cca0a5c6d771ed444c44d21ce8ea9b277af7036cea3743677aba9fbbb8", size = 2251411 },
{ url = "https://files.pythonhosted.org/packages/e8/d6/574fc6c8b0ca81586ee05f284ef6987730b841b31ce246ef9d3c45f17ec4/libcst-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80b5c4d87721a7bab265c202575809b810815ab81d5e2e7a5d4417a087975840", size = 2323144 },
{ url = "https://files.pythonhosted.org/packages/b1/92/5cb62834eec397f4b3218c03acc28b6b8470f87c8dad9e9b0fd738c3948c/libcst-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:b48bf71d52c1e891a0948465a94d9817b5fc1ec1a09603566af90585f3b11948", size = 2029603 },
- { url = "https://files.pythonhosted.org/packages/60/5e/dd156f628fed03a273d995008f1669e1964727df6a8818bbedaac51f9ae5/libcst-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:88520b6dea59eaea0cae80f77c0a632604a82c5b2d23dedb4b5b34035cbf1615", size = 2108562 },
- { url = "https://files.pythonhosted.org/packages/2c/54/f63bf0bd2d70179e0557c9474a0511e33e646d398945b5a01de36237ce60/libcst-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:208ea92d80b2eeed8cbc879d5f39f241582a5d56b916b1b65ed2be2f878a2425", size = 2024057 },
- { url = "https://files.pythonhosted.org/packages/dc/37/ce62947fd7305fb501589e4b8f6e82e3cf61fca2d62392e281c17a2112f5/libcst-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4592872aaf5b7fa5c2727a7d73c0985261f1b3fe7eff51f4fd5b8174f30b4e2", size = 2199474 },
- { url = "https://files.pythonhosted.org/packages/c9/95/b878c95af17f3e341ac5dc18e3160d45d86b2c05a0cafd866ceb0b766bbd/libcst-1.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2788b2b5838b78fe15df8e9fa6b6903195ea49b2d2ba43e8f423f6c90e4b69f", size = 2251410 },
- { url = "https://files.pythonhosted.org/packages/e1/26/697b54aa839c4dc6ea2787d5e977ed4be0636149f85df1a0cba7a29bd188/libcst-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b5b5bcd3a9ba92840f27ad34eaa038acbee195ec337da39536c0a2efbbf28efd", size = 2323144 },
- { url = "https://files.pythonhosted.org/packages/a0/9f/5b5481d716670ed5fbd8d06dfa94b7108272b645da2f2406eb909cb6a450/libcst-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:4d6acb0bdee1e55b44c6215c59755ec4693ac01e74bb1fde04c37358b378835d", size = 2029600 },
]
[[package]]
@@ -852,26 +1084,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 },
{ url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 },
{ url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 },
- { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 },
- { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 },
- { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 },
- { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 },
- { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 },
- { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 },
- { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 },
- { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 },
- { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 },
- { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 },
- { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 },
- { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 },
- { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 },
- { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 },
- { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 },
- { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 },
- { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 },
- { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 },
- { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 },
- { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 },
]
[[package]]
@@ -958,11 +1170,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ba/07/37d67048786ae84e6612575e173d713c9a05d0ae495dde1e68d972207d98/mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2", size = 12589275 },
{ url = "https://files.pythonhosted.org/packages/1f/17/b1018c6bb3e9f1ce3956722b3bf91bff86c1cefccca71cec05eae49d6d41/mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0", size = 13037783 },
{ url = "https://files.pythonhosted.org/packages/cb/32/cd540755579e54a88099aee0287086d996f5a24281a673f78a0e14dba150/mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2", size = 9726197 },
- { url = "https://files.pythonhosted.org/packages/11/bb/ab4cfdc562cad80418f077d8be9b4491ee4fb257440da951b85cbb0a639e/mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7", size = 11069721 },
- { url = "https://files.pythonhosted.org/packages/59/3b/a393b1607cb749ea2c621def5ba8c58308ff05e30d9dbdc7c15028bca111/mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62", size = 10063996 },
- { url = "https://files.pythonhosted.org/packages/d1/1f/6b76be289a5a521bb1caedc1f08e76ff17ab59061007f201a8a18cc514d1/mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8", size = 12584043 },
- { url = "https://files.pythonhosted.org/packages/a6/83/5a85c9a5976c6f96e3a5a7591aa28b4a6ca3a07e9e5ba0cec090c8b596d6/mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7", size = 13036996 },
- { url = "https://files.pythonhosted.org/packages/b4/59/c39a6f752f1f893fccbcf1bdd2aca67c79c842402b5283563d006a67cf76/mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc", size = 9737709 },
{ url = "https://files.pythonhosted.org/packages/3b/86/72ce7f57431d87a7ff17d442f521146a6585019eb8f4f31b7c02801f78ad/mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a", size = 2647043 },
]
@@ -1066,6 +1273,125 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/66/00/981f0dcaddf111b6caf6e03d7f7f01b07fd4af117316a7eb1c22039d9e37/nox-2024.10.9-py3-none-any.whl", hash = "sha256:1d36f309a0a2a853e9bccb76bbef6bb118ba92fa92674d15604ca99adeb29eab", size = 61210 },
]
+[[package]]
+name = "opentelemetry-api"
+version = "1.25.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "deprecated" },
+ { name = "importlib-metadata" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/df/0d/10357006dc10fc65f7c7b46c18232e466e355f9e606ac461cfc7193b4cbe/opentelemetry_api-1.25.0.tar.gz", hash = "sha256:77c4985f62f2614e42ce77ee4c9da5fa5f0bc1e1821085e9a47533a9323ae869", size = 60383 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7e/b2/4bc5e52c9a23df0ac17dbb23923e609a8269cd67000a712b4f5bcfae1490/opentelemetry_api-1.25.0-py3-none-any.whl", hash = "sha256:757fa1aa020a0f8fa139f8959e53dec2051cc26b832e76fa839a6d76ecefd737", size = 59910 },
+]
+
+[[package]]
+name = "opentelemetry-exporter-otlp-proto-common"
+version = "1.25.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-proto" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/37/a7/85ffaaacd712e4634fa1c56cbf79a02cf90b8a178fe1eee2cabfb0b7f44d/opentelemetry_exporter_otlp_proto_common-1.25.0.tar.gz", hash = "sha256:c93f4e30da4eee02bacd1e004eb82ce4da143a2f8e15b987a9f603e0a85407d3", size = 17152 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/05/02/74ac6619eec78c82a923324f916d3eccd2f2254cf4270b669e96b76bf717/opentelemetry_exporter_otlp_proto_common-1.25.0-py3-none-any.whl", hash = "sha256:15637b7d580c2675f70246563363775b4e6de947871e01d0f4e3881d1848d693", size = 17762 },
+]
+
+[[package]]
+name = "opentelemetry-exporter-otlp-proto-http"
+version = "1.25.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "deprecated" },
+ { name = "googleapis-common-protos" },
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-exporter-otlp-proto-common" },
+ { name = "opentelemetry-proto" },
+ { name = "opentelemetry-sdk" },
+ { name = "requests" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/72/d9/1c3c518853c27d323a46813d3e99d601959ca2c6963d5217fe2110f0d579/opentelemetry_exporter_otlp_proto_http-1.25.0.tar.gz", hash = "sha256:9f8723859e37c75183ea7afa73a3542f01d0fd274a5b97487ea24cb683d7d684", size = 14048 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1d/b9/a47734f7c5a45619d8c64c227f119092b4679b2c49d37116fda7c0fc4573/opentelemetry_exporter_otlp_proto_http-1.25.0-py3-none-any.whl", hash = "sha256:2eca686ee11b27acd28198b3ea5e5863a53d1266b91cda47c839d95d5e0541a6", size = 16790 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation"
+version = "0.46b0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "setuptools" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/0f/20/0a5d980843e048e9516443a91c63a559b40e5d50a730e73e72a5bde727fd/opentelemetry_instrumentation-0.46b0.tar.gz", hash = "sha256:974e0888fb2a1e01c38fbacc9483d024bb1132aad92d6d24e2e5543887a7adda", size = 24048 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/10/e5/d6fff0a6f6fbddf03c7fb48ab47925581c4f1a8268f9ad98e5ea4a8b90a5/opentelemetry_instrumentation-0.46b0-py3-none-any.whl", hash = "sha256:89cd721b9c18c014ca848ccd11181e6b3fd3f6c7669e35d59c48dc527408c18b", size = 29108 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-requests"
+version = "0.46b0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/f6/28/5b5e9fb74639e47f026a3fd6550bba965ca18b316a8178907540e711855c/opentelemetry_instrumentation_requests-0.46b0.tar.gz", hash = "sha256:ef0ad63bfd0d52631daaf7d687e763dbd89b465f5cb052f12a4e67e5e3d181e4", size = 13709 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/20/42/5eee8720eccd4b94dd3d4908364785db8b22c9ae512ee47caff29064ca4c/opentelemetry_instrumentation_requests-0.46b0-py3-none-any.whl", hash = "sha256:a8c2472800d8686f3f286cd524b8746b386154092e85a791ba14110d1acc9b81", size = 12170 },
+]
+
+[[package]]
+name = "opentelemetry-proto"
+version = "1.25.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "protobuf" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c9/3c/28c9ce40eb8ab287471af81659089ca98ef4f7ce289669e23b19c29f24a8/opentelemetry_proto-1.25.0.tar.gz", hash = "sha256:35b6ef9dc4a9f7853ecc5006738ad40443701e52c26099e197895cbda8b815a3", size = 35062 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/64/ae/d6b5f11ecbffafe8b6d54130fed0cc78aad3711e00074d63a7359d6dcf3b/opentelemetry_proto-1.25.0-py3-none-any.whl", hash = "sha256:f07e3341c78d835d9b86665903b199893befa5e98866f63d22b00d0b7ca4972f", size = 52450 },
+]
+
+[[package]]
+name = "opentelemetry-sdk"
+version = "1.25.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/05/3c/77076b77f1d73141adc119f62370ec9456ef314ba0b4e7072e3775c36ef7/opentelemetry_sdk-1.25.0.tar.gz", hash = "sha256:ce7fc319c57707ef5bf8b74fb9f8ebdb8bfafbe11898410e0d2a761d08a98ec7", size = 141042 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ae/b2/729a959a8aa032bce246c791f977161099ab60fb0188408ccec1bf283b00/opentelemetry_sdk-1.25.0-py3-none-any.whl", hash = "sha256:d97ff7ec4b351692e9d5a15af570c693b8715ad78b8aafbec5c7100fe966b4c9", size = 107028 },
+]
+
+[[package]]
+name = "opentelemetry-semantic-conventions"
+version = "0.46b0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/4e/ea/a4a5277247b3d2ed2e23a58b0d509c2eafa4ebb56038ba5b23c0f9ea6242/opentelemetry_semantic_conventions-0.46b0.tar.gz", hash = "sha256:fbc982ecbb6a6e90869b15c1673be90bd18c8a56ff1cffc0864e38e2edffaefa", size = 80198 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/fd/41/28dae1ec1fe0151373f06bd06d9170ca14b52d5b3a6c2dc55f85bc219619/opentelemetry_semantic_conventions-0.46b0-py3-none-any.whl", hash = "sha256:6daef4ef9fa51d51855d9f8e0ccd3a1bd59e0e545abe99ac6203804e36ab3e07", size = 130549 },
+]
+
+[[package]]
+name = "opentelemetry-util-http"
+version = "0.46b0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f0/91/45bf243850463b2c83000ca129442255eaef7c446bd0f59a2ab54b15abff/opentelemetry_util_http-0.46b0.tar.gz", hash = "sha256:03b6e222642f9c7eae58d9132343e045b50aca9761fcb53709bd2b663571fdf6", size = 7387 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a2/7f/26d3d8880ea79adde8bb7bc306b25ca5134d6f6c3006ba464716405b4729/opentelemetry_util_http-0.46b0-py3-none-any.whl", hash = "sha256:8dc1949ce63caef08db84ae977fdc1848fe6dc38e6bbaad0ae3e6ecd0d451629", size = 6920 },
+]
+
[[package]]
name = "packaging"
version = "24.2"
@@ -1093,6 +1419,12 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/1d/44/6a65ecd630393d47ad3e7d5354768cb7f9a10b3a0eb2cd8c6f52b28211ee/pbr-6.1.0-py2.py3-none-any.whl", hash = "sha256:a776ae228892d8013649c0aeccbb3d5f99ee15e005a4cbb7e61d55a067b28a2a", size = 108529 },
]
+[[package]]
+name = "peewee"
+version = "3.17.8"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b4/dc/832bcf4ea5ee2ebc4ea42ef36e44a451de5d80f8b9858bf2066e30738c67/peewee-3.17.8.tar.gz", hash = "sha256:ce1d05db3438830b989a1b9d0d0aa4e7f6134d5f6fd57686eeaa26a3e6485a8c", size = 948249 }
+
[[package]]
name = "pep8-naming"
version = "0.13.3"
@@ -1147,6 +1479,20 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a9/6a/fd08d94654f7e67c52ca30523a178b3f8ccc4237fce4be90d39c938a831a/prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e", size = 386595 },
]
+[[package]]
+name = "protobuf"
+version = "4.25.5"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/67/dd/48d5fdb68ec74d70fabcc252e434492e56f70944d9f17b6a15e3746d2295/protobuf-4.25.5.tar.gz", hash = "sha256:7f8249476b4a9473645db7f8ab42b02fe1488cbe5fb72fddd445e0665afd8584", size = 380315 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/00/35/1b3c5a5e6107859c4ca902f4fbb762e48599b78129a05d20684fef4a4d04/protobuf-4.25.5-cp310-abi3-win32.whl", hash = "sha256:5e61fd921603f58d2f5acb2806a929b4675f8874ff5f330b7d6f7e2e784bbcd8", size = 392457 },
+ { url = "https://files.pythonhosted.org/packages/a7/ad/bf3f358e90b7e70bf7fb520702cb15307ef268262292d3bdb16ad8ebc815/protobuf-4.25.5-cp310-abi3-win_amd64.whl", hash = "sha256:4be0571adcbe712b282a330c6e89eae24281344429ae95c6d85e79e84780f5ea", size = 413449 },
+ { url = "https://files.pythonhosted.org/packages/51/49/d110f0a43beb365758a252203c43eaaad169fe7749da918869a8c991f726/protobuf-4.25.5-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:b2fde3d805354df675ea4c7c6338c1aecd254dfc9925e88c6d31a2bcb97eb173", size = 394248 },
+ { url = "https://files.pythonhosted.org/packages/c6/ab/0f384ca0bc6054b1a7b6009000ab75d28a5506e4459378b81280ae7fd358/protobuf-4.25.5-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:919ad92d9b0310070f8356c24b855c98df2b8bd207ebc1c0c6fcc9ab1e007f3d", size = 293717 },
+ { url = "https://files.pythonhosted.org/packages/05/a6/094a2640be576d760baa34c902dcb8199d89bce9ed7dd7a6af74dcbbd62d/protobuf-4.25.5-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fe14e16c22be926d3abfcb500e60cab068baf10b542b8c858fa27e098123e331", size = 294635 },
+ { url = "https://files.pythonhosted.org/packages/33/90/f198a61df8381fb43ae0fe81b3d2718e8dcc51ae8502c7657ab9381fbc4f/protobuf-4.25.5-py3-none-any.whl", hash = "sha256:0aebecb809cae990f8129ada5ca273d9d670b76d9bfc9b1809f0a9c02b7dbf41", size = 156467 },
+]
+
[[package]]
name = "psutil"
version = "6.1.0"
@@ -1247,18 +1593,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/e3/b9/41f7efe80f6ce2ed3ee3c2dcfe10ab7adc1172f778cc9659509a79518c43/pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24", size = 2116872 },
{ url = "https://files.pythonhosted.org/packages/63/08/b59b7a92e03dd25554b0436554bf23e7c29abae7cce4b1c459cd92746811/pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84", size = 1738535 },
{ url = "https://files.pythonhosted.org/packages/88/8d/479293e4d39ab409747926eec4329de5b7129beaedc3786eca070605d07f/pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9", size = 1917992 },
- { url = "https://files.pythonhosted.org/packages/ad/ef/16ee2df472bf0e419b6bc68c05bf0145c49247a1095e85cee1463c6a44a1/pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc", size = 1856143 },
- { url = "https://files.pythonhosted.org/packages/da/fa/bc3dbb83605669a34a93308e297ab22be82dfb9dcf88c6cf4b4f264e0a42/pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd", size = 1770063 },
- { url = "https://files.pythonhosted.org/packages/4e/48/e813f3bbd257a712303ebdf55c8dc46f9589ec74b384c9f652597df3288d/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05", size = 1790013 },
- { url = "https://files.pythonhosted.org/packages/b4/e0/56eda3a37929a1d297fcab1966db8c339023bcca0b64c5a84896db3fcc5c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d", size = 1801077 },
- { url = "https://files.pythonhosted.org/packages/04/be/5e49376769bfbf82486da6c5c1683b891809365c20d7c7e52792ce4c71f3/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510", size = 1996782 },
- { url = "https://files.pythonhosted.org/packages/bc/24/e3ee6c04f1d58cc15f37bcc62f32c7478ff55142b7b3e6d42ea374ea427c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6", size = 2661375 },
- { url = "https://files.pythonhosted.org/packages/c1/f8/11a9006de4e89d016b8de74ebb1db727dc100608bb1e6bbe9d56a3cbbcce/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b", size = 2071635 },
- { url = "https://files.pythonhosted.org/packages/7c/45/bdce5779b59f468bdf262a5bc9eecbae87f271c51aef628d8c073b4b4b4c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327", size = 1916994 },
- { url = "https://files.pythonhosted.org/packages/d8/fa/c648308fe711ee1f88192cad6026ab4f925396d1293e8356de7e55be89b5/pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6", size = 1968877 },
- { url = "https://files.pythonhosted.org/packages/16/16/b805c74b35607d24d37103007f899abc4880923b04929547ae68d478b7f4/pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f", size = 2116814 },
- { url = "https://files.pythonhosted.org/packages/d1/58/5305e723d9fcdf1c5a655e6a4cc2a07128bf644ff4b1d98daf7a9dbf57da/pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769", size = 1738360 },
- { url = "https://files.pythonhosted.org/packages/a5/ae/e14b0ff8b3f48e02394d8acd911376b7b66e164535687ef7dc24ea03072f/pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5", size = 1919411 },
]
[[package]]
@@ -1391,15 +1725,15 @@ wheels = [
[[package]]
name = "pyright"
-version = "1.1.388"
+version = "1.1.389"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "nodeenv" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/9c/83/e9867538a794638d2d20ac3ab3106a31aca1d9cfea530c9b2921809dae03/pyright-1.1.388.tar.gz", hash = "sha256:0166d19b716b77fd2d9055de29f71d844874dbc6b9d3472ccd22df91db3dfa34", size = 21939 }
+sdist = { url = "https://files.pythonhosted.org/packages/72/4e/9a5ab8745e7606b88c2c7ca223449ac9d82a71fd5e31df47b453f2cb39a1/pyright-1.1.389.tar.gz", hash = "sha256:716bf8cc174ab8b4dcf6828c3298cac05c5ed775dda9910106a5dcfe4c7fe220", size = 21940 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/03/57/7fb00363b7f267a398c5bdf4f55f3e64f7c2076b2e7d2901b3373d52b6ff/pyright-1.1.388-py3-none-any.whl", hash = "sha256:c7068e9f2c23539c6ac35fc9efac6c6c1b9aa5a0ce97a9a8a6cf0090d7cbf84c", size = 18579 },
+ { url = "https://files.pythonhosted.org/packages/1b/26/c288cabf8cfc5a27e1aa9e5029b7682c0f920b8074f45d22bf844314d66a/pyright-1.1.389-py3-none-any.whl", hash = "sha256:41e9620bba9254406dc1f621a88ceab5a88af4c826feb4f614d95691ed243a60", size = 18581 },
]
[[package]]
@@ -1491,6 +1825,42 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 },
]
+[[package]]
+name = "python-gitlab"
+version = "4.13.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "requests" },
+ { name = "requests-toolbelt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c4/ea/e2cde926d63526935c1df259177371a195089b631d67a577fe5c39fbc7e1/python_gitlab-4.13.0.tar.gz", hash = "sha256:576bfb0901faca0c6b2d1ff2592e02944a6ec3e086c3129fb43c2a0df56a1c67", size = 484996 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6b/5e/5fb4dcae9f5af5463c16952823d446ca449cce920efe8669871f600f0ab9/python_gitlab-4.13.0-py3-none-any.whl", hash = "sha256:8299a054fb571da16e1a8c1868fff01f34ac41ea1410c713a4647b3bbb2aa279", size = 145254 },
+]
+
+[[package]]
+name = "python-semantic-release"
+version = "9.14.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+ { name = "click-option-group" },
+ { name = "dotty-dict" },
+ { name = "gitpython" },
+ { name = "importlib-resources" },
+ { name = "jinja2" },
+ { name = "pydantic" },
+ { name = "python-gitlab" },
+ { name = "requests" },
+ { name = "rich" },
+ { name = "shellingham" },
+ { name = "tomlkit" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/71/19/72d0fb90df1b20b4623a99ddd9a454bfba02b832e85a3e27ab57ec38f715/python_semantic_release-9.14.0.tar.gz", hash = "sha256:5b69a626458bfb50686d27d9713160eb2bf9897b0c17985f1c68d7316b8e07b6", size = 233999 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c4/8f/86c618d7df34d8a45b37b867bb7cdd0447ee142e902093f742546b97f1f0/python_semantic_release-9.14.0-py3-none-any.whl", hash = "sha256:f089a6ad976e909d5f87015e9f541f9fd503d3db41653efaf0157d874902e519", size = 107682 },
+]
+
[[package]]
name = "pytype"
version = "2024.10.11"
@@ -1525,9 +1895,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/00/7c/d00d6bdd96de4344e06c4afbf218bc86b54436a94c01c71a8701f613aa56/pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897", size = 5939729 },
{ url = "https://files.pythonhosted.org/packages/21/27/0c8811fbc3ca188f93b5354e7c286eb91f80a53afa4e11007ef661afa746/pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47", size = 6543015 },
{ url = "https://files.pythonhosted.org/packages/9d/0f/d40f8373608caed2255781a3ad9a51d03a594a1248cd632d6a298daca693/pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091", size = 7976033 },
- { url = "https://files.pythonhosted.org/packages/a9/a4/aa562d8935e3df5e49c161b427a3a2efad2ed4e9cf81c3de636f1fdddfd0/pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed", size = 5938579 },
- { url = "https://files.pythonhosted.org/packages/c7/50/b0efb8bb66210da67a53ab95fd7a98826a97ee21f1d22949863e6d588b22/pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4", size = 6542056 },
- { url = "https://files.pythonhosted.org/packages/26/df/2b63e3e4f2df0224f8aaf6d131f54fe4e8c96400eb9df563e2aae2e1a1f9/pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd", size = 7974986 },
]
[[package]]
@@ -1545,15 +1912,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 },
{ url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 },
{ url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 },
- { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 },
- { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 },
- { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 },
- { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 },
- { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 },
- { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 },
- { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 },
- { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 },
- { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 },
]
[[package]]
@@ -1577,27 +1935,46 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/07/18/907134c85c7152f679ed744e73e645b365f3ad571f38bdb62e36f347699a/pyzmq-26.2.0-cp312-cp312-win32.whl", hash = "sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7", size = 575533 },
{ url = "https://files.pythonhosted.org/packages/ce/2c/a6f4a20202a4d3c582ad93f95ee78d79bbdc26803495aec2912b17dbbb6c/pyzmq-26.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a", size = 637768 },
{ url = "https://files.pythonhosted.org/packages/5f/0e/eb16ff731632d30554bf5af4dbba3ffcd04518219d82028aea4ae1b02ca5/pyzmq-26.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b", size = 540675 },
- { url = "https://files.pythonhosted.org/packages/04/a7/0f7e2f6c126fe6e62dbae0bc93b1bd3f1099cf7fea47a5468defebe3f39d/pyzmq-26.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726", size = 1006564 },
- { url = "https://files.pythonhosted.org/packages/31/b6/a187165c852c5d49f826a690857684333a6a4a065af0a6015572d2284f6a/pyzmq-26.2.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3", size = 1340447 },
- { url = "https://files.pythonhosted.org/packages/68/ba/f4280c58ff71f321602a6e24fd19879b7e79793fb8ab14027027c0fb58ef/pyzmq-26.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50", size = 665485 },
- { url = "https://files.pythonhosted.org/packages/77/b5/c987a5c53c7d8704216f29fc3d810b32f156bcea488a940e330e1bcbb88d/pyzmq-26.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb", size = 903484 },
- { url = "https://files.pythonhosted.org/packages/29/c9/07da157d2db18c72a7eccef8e684cefc155b712a88e3d479d930aa9eceba/pyzmq-26.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187", size = 859981 },
- { url = "https://files.pythonhosted.org/packages/43/09/e12501bd0b8394b7d02c41efd35c537a1988da67fc9c745cae9c6c776d31/pyzmq-26.2.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b", size = 860334 },
- { url = "https://files.pythonhosted.org/packages/eb/ff/f5ec1d455f8f7385cc0a8b2acd8c807d7fade875c14c44b85c1bddabae21/pyzmq-26.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18", size = 1196179 },
- { url = "https://files.pythonhosted.org/packages/ec/8a/bb2ac43295b1950fe436a81fc5b298be0b96ac76fb029b514d3ed58f7b27/pyzmq-26.2.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115", size = 1507668 },
- { url = "https://files.pythonhosted.org/packages/a9/49/dbc284ebcfd2dca23f6349227ff1616a7ee2c4a35fe0a5d6c3deff2b4fed/pyzmq-26.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e", size = 1406539 },
- { url = "https://files.pythonhosted.org/packages/00/68/093cdce3fe31e30a341d8e52a1ad86392e13c57970d722c1f62a1d1a54b6/pyzmq-26.2.0-cp313-cp313-win32.whl", hash = "sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5", size = 575567 },
- { url = "https://files.pythonhosted.org/packages/92/ae/6cc4657148143412b5819b05e362ae7dd09fb9fe76e2a539dcff3d0386bc/pyzmq-26.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad", size = 637551 },
- { url = "https://files.pythonhosted.org/packages/6c/67/fbff102e201688f97c8092e4c3445d1c1068c2f27bbd45a578df97ed5f94/pyzmq-26.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797", size = 540378 },
- { url = "https://files.pythonhosted.org/packages/3f/fe/2d998380b6e0122c6c4bdf9b6caf490831e5f5e2d08a203b5adff060c226/pyzmq-26.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a", size = 1007378 },
- { url = "https://files.pythonhosted.org/packages/4a/f4/30d6e7157f12b3a0390bde94d6a8567cdb88846ed068a6e17238a4ccf600/pyzmq-26.2.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc", size = 1329532 },
- { url = "https://files.pythonhosted.org/packages/82/86/3fe917870e15ee1c3ad48229a2a64458e36036e64b4afa9659045d82bfa8/pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5", size = 653242 },
- { url = "https://files.pythonhosted.org/packages/50/2d/242e7e6ef6c8c19e6cb52d095834508cd581ffb925699fd3c640cdc758f1/pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672", size = 888404 },
- { url = "https://files.pythonhosted.org/packages/ac/11/7270566e1f31e4ea73c81ec821a4b1688fd551009a3d2bab11ec66cb1e8f/pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797", size = 845858 },
- { url = "https://files.pythonhosted.org/packages/91/d5/72b38fbc69867795c8711bdd735312f9fef1e3d9204e2f63ab57085434b9/pyzmq-26.2.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386", size = 847375 },
- { url = "https://files.pythonhosted.org/packages/dd/9a/10ed3c7f72b4c24e719c59359fbadd1a27556a28b36cdf1cd9e4fb7845d5/pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306", size = 1183489 },
- { url = "https://files.pythonhosted.org/packages/72/2d/8660892543fabf1fe41861efa222455811adac9f3c0818d6c3170a1153e3/pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6", size = 1492932 },
- { url = "https://files.pythonhosted.org/packages/7b/d6/32fd69744afb53995619bc5effa2a405ae0d343cd3e747d0fbc43fe894ee/pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0", size = 1392485 },
+]
+
+[[package]]
+name = "referencing"
+version = "0.35.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "attrs" },
+ { name = "rpds-py" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/99/5b/73ca1f8e72fff6fa52119dbd185f73a907b1989428917b24cff660129b6d/referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c", size = 62991 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b7/59/2056f61236782a2c86b33906c025d4f4a0b17be0161b63b70fd9e8775d36/referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de", size = 26684 },
+]
+
+[[package]]
+name = "requests"
+version = "2.32.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "certifi" },
+ { name = "charset-normalizer" },
+ { name = "idna" },
+ { name = "urllib3" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 },
+]
+
+[[package]]
+name = "requests-toolbelt"
+version = "1.0.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "requests" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481 },
]
[[package]]
@@ -1622,38 +1999,132 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424 },
]
+[[package]]
+name = "rpds-py"
+version = "0.21.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/23/80/afdf96daf9b27d61483ef05b38f282121db0e38f5fd4e89f40f5c86c2a4f/rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db", size = 26335 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d9/5a/3aa6f5d8bacbe4f55ebf9a3c9628dad40cdb57f845124cf13c78895ea156/rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d", size = 329516 },
+ { url = "https://files.pythonhosted.org/packages/df/c0/67c8c8ac850c6e3681e356a59d46315bf73bc77cb50c9a32db8ae44325b7/rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72", size = 321245 },
+ { url = "https://files.pythonhosted.org/packages/64/83/bf31341f21fa594035891ff04a497dc86b210cc1a903a9cc01b097cc614f/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266", size = 363951 },
+ { url = "https://files.pythonhosted.org/packages/a2/e1/8218bba36737621262df316fbb729639af25ff611cc07bfeaadc1bfa6292/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be", size = 373113 },
+ { url = "https://files.pythonhosted.org/packages/39/8d/4afcd688e3ad33ec273900f42e6a41e9bd9f43cfc509b6d498683d2d0338/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab", size = 405944 },
+ { url = "https://files.pythonhosted.org/packages/fa/65/3326efa721b6ecd70262aab69a26c9bc19398cdb0a2a416ef30b58326460/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7", size = 422874 },
+ { url = "https://files.pythonhosted.org/packages/31/fb/48a647d0afab74289dd21a4128002d58684c22600a22c4bfb76cb9e3bfb0/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf", size = 364227 },
+ { url = "https://files.pythonhosted.org/packages/f1/b0/1cdd179d7382dd52d65b1fd19c54d090b6bd0688dfbe259bb5ab7548c359/rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4", size = 386447 },
+ { url = "https://files.pythonhosted.org/packages/dc/41/84ace07f31aac3a96b73a374d89106cf252f7d3274e7cae85d17a27c602d/rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca", size = 549386 },
+ { url = "https://files.pythonhosted.org/packages/33/ce/bf51bc5a3aa539171ea8c7737ab5ac06cef54c79b6b2a0511afc41533c89/rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b", size = 554777 },
+ { url = "https://files.pythonhosted.org/packages/76/b1/950568e55a94c2979c2b61ec24e76e648a525fbc7551ccfc1f2841e39d44/rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11", size = 530918 },
+ { url = "https://files.pythonhosted.org/packages/78/84/93f00e3613426c8a7a9ca16782d2828f2ac55296dd5c6b599379d9f59ee2/rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952", size = 203112 },
+ { url = "https://files.pythonhosted.org/packages/e6/08/7a186847dd78881a781d2be9b42c8e49c3261c0f4a6d0289ba9a1e4cde71/rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd", size = 220735 },
+]
+
+[[package]]
+name = "ruamel-yaml"
+version = "0.17.40"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "ruamel-yaml-clib", marker = "platform_python_implementation == 'CPython'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d1/d6/eb2833ccba5ea36f8f4de4bcfa0d1a91eb618f832d430b70e3086821f251/ruamel.yaml-0.17.40.tar.gz", hash = "sha256:6024b986f06765d482b5b07e086cc4b4cd05dd22ddcbc758fa23d54873cf313d", size = 137672 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/35/79/5e2cffa1c77432f11cd93a5351f30732c997a239d3a3090856a72d6d8ba7/ruamel.yaml-0.17.40-py3-none-any.whl", hash = "sha256:b16b6c3816dff0a93dca12acf5e70afd089fa5acb80604afd1ffa8b465b7722c", size = 113666 },
+]
+
+[[package]]
+name = "ruamel-yaml-clib"
+version = "0.2.12"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433 },
+ { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362 },
+ { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118 },
+ { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497 },
+ { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042 },
+ { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831 },
+ { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777 },
+ { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523 },
+]
+
[[package]]
name = "ruff"
-version = "0.7.3"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/4b/06/09d1276df977eece383d0ed66052fc24ec4550a61f8fbc0a11200e690496/ruff-0.7.3.tar.gz", hash = "sha256:e1d1ba2e40b6e71a61b063354d04be669ab0d39c352461f3d789cac68b54a313", size = 3243664 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/c0/56/933d433c2489e4642487b835f53dd9ff015fb3d8fa459b09bb2ce42d7c4b/ruff-0.7.3-py3-none-linux_armv6l.whl", hash = "sha256:34f2339dc22687ec7e7002792d1f50712bf84a13d5152e75712ac08be565d344", size = 10372090 },
- { url = "https://files.pythonhosted.org/packages/20/ea/1f0a22a6bcdd3fc26c73f63a025d05bd565901b729d56bcb093c722a6c4c/ruff-0.7.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:fb397332a1879b9764a3455a0bb1087bda876c2db8aca3a3cbb67b3dbce8cda0", size = 10190037 },
- { url = "https://files.pythonhosted.org/packages/16/74/aca75666e0d481fe394e76a8647c44ea919087748024924baa1a17371e3e/ruff-0.7.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:37d0b619546103274e7f62643d14e1adcbccb242efda4e4bdb9544d7764782e9", size = 9811998 },
- { url = "https://files.pythonhosted.org/packages/20/a1/cf446a0d7f78ea1f0bd2b9171c11dfe746585c0c4a734b25966121eb4f5d/ruff-0.7.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59f0c3ee4d1a6787614e7135b72e21024875266101142a09a61439cb6e38a5", size = 10620626 },
- { url = "https://files.pythonhosted.org/packages/cd/c1/82b27d09286ae855f5d03b1ad37cf243f21eb0081732d4d7b0d658d439cb/ruff-0.7.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:44eb93c2499a169d49fafd07bc62ac89b1bc800b197e50ff4633aed212569299", size = 10177598 },
- { url = "https://files.pythonhosted.org/packages/b9/42/c0acac22753bf74013d035a5ef6c5c4c40ad4d6686bfb3fda7c6f37d9b37/ruff-0.7.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d0242ce53f3a576c35ee32d907475a8d569944c0407f91d207c8af5be5dae4e", size = 11171963 },
- { url = "https://files.pythonhosted.org/packages/43/18/bb0befb7fb9121dd9009e6a72eb98e24f1bacb07c6f3ecb55f032ba98aed/ruff-0.7.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:6b6224af8b5e09772c2ecb8dc9f3f344c1aa48201c7f07e7315367f6dd90ac29", size = 11856157 },
- { url = "https://files.pythonhosted.org/packages/5e/91/04e98d7d6e32eca9d1372be595f9abc7b7f048795e32eb2edbd8794d50bd/ruff-0.7.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c50f95a82b94421c964fae4c27c0242890a20fe67d203d127e84fbb8013855f5", size = 11440331 },
- { url = "https://files.pythonhosted.org/packages/f5/dc/3fe99f2ce10b76d389041a1b9f99e7066332e479435d4bebcceea16caff5/ruff-0.7.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f3eff9961b5d2644bcf1616c606e93baa2d6b349e8aa8b035f654df252c8c67", size = 12725354 },
- { url = "https://files.pythonhosted.org/packages/43/7b/1daa712de1c5bc6cbbf9fa60e9c41cc48cda962dc6d2c4f2a224d2c3007e/ruff-0.7.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8963cab06d130c4df2fd52c84e9f10d297826d2e8169ae0c798b6221be1d1d2", size = 11010091 },
- { url = "https://files.pythonhosted.org/packages/b6/db/1227a903587432eb569e57a95b15a4f191a71fe315cde4c0312df7bc85da/ruff-0.7.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:61b46049d6edc0e4317fb14b33bd693245281a3007288b68a3f5b74a22a0746d", size = 10610687 },
- { url = "https://files.pythonhosted.org/packages/db/e2/dc41ee90c3085aadad4da614d310d834f641aaafddf3dfbba08210c616ce/ruff-0.7.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:10ebce7696afe4644e8c1a23b3cf8c0f2193a310c18387c06e583ae9ef284de2", size = 10254843 },
- { url = "https://files.pythonhosted.org/packages/6f/09/5f6cac1c91542bc5bd33d40b4c13b637bf64d7bb29e091dadb01b62527fe/ruff-0.7.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3f36d56326b3aef8eeee150b700e519880d1aab92f471eefdef656fd57492aa2", size = 10730962 },
- { url = "https://files.pythonhosted.org/packages/d3/42/89a4b9a24ef7d00269e24086c417a006f9a3ffeac2c80f2629eb5ce140ee/ruff-0.7.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5d024301109a0007b78d57ab0ba190087b43dce852e552734ebf0b0b85e4fb16", size = 11101907 },
- { url = "https://files.pythonhosted.org/packages/b0/5c/efdb4777686683a8edce94ffd812783bddcd3d2454d38c5ac193fef7c500/ruff-0.7.3-py3-none-win32.whl", hash = "sha256:4ba81a5f0c5478aa61674c5a2194de8b02652f17addf8dfc40c8937e6e7d79fc", size = 8611095 },
- { url = "https://files.pythonhosted.org/packages/bb/b8/28fbc6a4efa50178f973972d1c84b2d0a33cdc731588522ab751ac3da2f5/ruff-0.7.3-py3-none-win_amd64.whl", hash = "sha256:588a9ff2fecf01025ed065fe28809cd5a53b43505f48b69a1ac7707b1b7e4088", size = 9418283 },
- { url = "https://files.pythonhosted.org/packages/3f/77/b587cba6febd5e2003374f37eb89633f79f161e71084f94057c8653b7fb3/ruff-0.7.3-py3-none-win_arm64.whl", hash = "sha256:1713e2c5545863cdbfe2cbce21f69ffaf37b813bfd1fb3b90dc9a6f1963f5a8c", size = 8725228 },
+version = "0.7.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/0b/8b/bc4e0dfa1245b07cf14300e10319b98e958a53ff074c1dd86b35253a8c2a/ruff-0.7.4.tar.gz", hash = "sha256:cd12e35031f5af6b9b93715d8c4f40360070b2041f81273d0527683d5708fce2", size = 3275547 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e6/4b/f5094719e254829766b807dadb766841124daba75a37da83e292ae5ad12f/ruff-0.7.4-py3-none-linux_armv6l.whl", hash = "sha256:a4919925e7684a3f18e18243cd6bea7cfb8e968a6eaa8437971f681b7ec51478", size = 10447512 },
+ { url = "https://files.pythonhosted.org/packages/9e/1d/3d2d2c9f601cf6044799c5349ff5267467224cefed9b35edf5f1f36486e9/ruff-0.7.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfb365c135b830778dda8c04fb7d4280ed0b984e1aec27f574445231e20d6c63", size = 10235436 },
+ { url = "https://files.pythonhosted.org/packages/62/83/42a6ec6216ded30b354b13e0e9327ef75a3c147751aaf10443756cb690e9/ruff-0.7.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:63a569b36bc66fbadec5beaa539dd81e0527cb258b94e29e0531ce41bacc1f20", size = 9888936 },
+ { url = "https://files.pythonhosted.org/packages/4d/26/e1e54893b13046a6ad05ee9b89ee6f71542ba250f72b4c7a7d17c3dbf73d/ruff-0.7.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d06218747d361d06fd2fdac734e7fa92df36df93035db3dc2ad7aa9852cb109", size = 10697353 },
+ { url = "https://files.pythonhosted.org/packages/21/24/98d2e109c4efc02bfef144ec6ea2c3e1217e7ce0cfddda8361d268dfd499/ruff-0.7.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0cea28d0944f74ebc33e9f934238f15c758841f9f5edd180b5315c203293452", size = 10228078 },
+ { url = "https://files.pythonhosted.org/packages/ad/b7/964c75be9bc2945fc3172241b371197bb6d948cc69e28bc4518448c368f3/ruff-0.7.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80094ecd4793c68b2571b128f91754d60f692d64bc0d7272ec9197fdd09bf9ea", size = 11264823 },
+ { url = "https://files.pythonhosted.org/packages/12/8d/20abdbf705969914ce40988fe71a554a918deaab62c38ec07483e77866f6/ruff-0.7.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:997512325c6620d1c4c2b15db49ef59543ef9cd0f4aa8065ec2ae5103cedc7e7", size = 11951855 },
+ { url = "https://files.pythonhosted.org/packages/b8/fc/6519ce58c57b4edafcdf40920b7273dfbba64fc6ebcaae7b88e4dc1bf0a8/ruff-0.7.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00b4cf3a6b5fad6d1a66e7574d78956bbd09abfd6c8a997798f01f5da3d46a05", size = 11516580 },
+ { url = "https://files.pythonhosted.org/packages/37/1a/5ec1844e993e376a86eb2456496831ed91b4398c434d8244f89094758940/ruff-0.7.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7dbdc7d8274e1422722933d1edddfdc65b4336abf0b16dfcb9dedd6e6a517d06", size = 12692057 },
+ { url = "https://files.pythonhosted.org/packages/50/90/76867152b0d3c05df29a74bb028413e90f704f0f6701c4801174ba47f959/ruff-0.7.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e92dfb5f00eaedb1501b2f906ccabfd67b2355bdf117fea9719fc99ac2145bc", size = 11085137 },
+ { url = "https://files.pythonhosted.org/packages/c8/eb/0a7cb6059ac3555243bd026bb21785bbc812f7bbfa95a36c101bd72b47ae/ruff-0.7.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3bd726099f277d735dc38900b6a8d6cf070f80828877941983a57bca1cd92172", size = 10681243 },
+ { url = "https://files.pythonhosted.org/packages/5e/76/2270719dbee0fd35780b05c08a07b7a726c3da9f67d9ae89ef21fc18e2e5/ruff-0.7.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2e32829c429dd081ee5ba39aef436603e5b22335c3d3fff013cd585806a6486a", size = 10319187 },
+ { url = "https://files.pythonhosted.org/packages/9f/e5/39100f72f8ba70bec1bd329efc880dea8b6c1765ea1cb9d0c1c5f18b8d7f/ruff-0.7.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:662a63b4971807623f6f90c1fb664613f67cc182dc4d991471c23c541fee62dd", size = 10803715 },
+ { url = "https://files.pythonhosted.org/packages/a5/89/40e904784f305fb56850063f70a998a64ebba68796d823dde67e89a24691/ruff-0.7.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:876f5e09eaae3eb76814c1d3b68879891d6fde4824c015d48e7a7da4cf066a3a", size = 11162912 },
+ { url = "https://files.pythonhosted.org/packages/8d/1b/dd77503b3875c51e3dbc053fd8367b845ab8b01c9ca6d0c237082732856c/ruff-0.7.4-py3-none-win32.whl", hash = "sha256:75c53f54904be42dd52a548728a5b572344b50d9b2873d13a3f8c5e3b91f5cac", size = 8702767 },
+ { url = "https://files.pythonhosted.org/packages/63/76/253ddc3e89e70165bba952ecca424b980b8d3c2598ceb4fc47904f424953/ruff-0.7.4-py3-none-win_amd64.whl", hash = "sha256:745775c7b39f914238ed1f1b0bebed0b9155a17cd8bc0b08d3c87e4703b990d6", size = 9497534 },
+ { url = "https://files.pythonhosted.org/packages/aa/70/f8724f31abc0b329ca98b33d73c14020168babcf71b0cba3cded5d9d0e66/ruff-0.7.4-py3-none-win_arm64.whl", hash = "sha256:11bff065102c3ae9d3ea4dc9ecdfe5a5171349cdd0787c1fc64761212fc9cf1f", size = 8851590 },
+]
+
+[[package]]
+name = "semgrep"
+version = "1.85.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "attrs" },
+ { name = "boltons" },
+ { name = "click" },
+ { name = "click-option-group" },
+ { name = "colorama" },
+ { name = "defusedxml" },
+ { name = "exceptiongroup" },
+ { name = "glom" },
+ { name = "jsonschema" },
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-exporter-otlp-proto-http" },
+ { name = "opentelemetry-instrumentation-requests" },
+ { name = "opentelemetry-sdk" },
+ { name = "packaging" },
+ { name = "peewee" },
+ { name = "requests" },
+ { name = "rich" },
+ { name = "ruamel-yaml" },
+ { name = "tomli" },
+ { name = "typing-extensions" },
+ { name = "urllib3" },
+ { name = "wcmatch" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/80/41/3e42c952458400baf0cf3f89e79dfc1d93ea636eedeb6ebaae33280e4383/semgrep-1.85.0.tar.gz", hash = "sha256:1a321cca4c5da84eb466ca1a4ceda10223e806225e371c4fef710cfe4b4b1df7", size = 27204522 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c3/04/53e7df61e90f66f45e0f7d60b52d3787bdaae550c5c5a0940c40dce28036/semgrep-1.85.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-any.whl", hash = "sha256:91fab3a0aa7f987a6605e01617179a363338350cca51174905d6ad0080a8d08e", size = 27619862 },
+ { url = "https://files.pythonhosted.org/packages/e0/6a/0762eded629759b3b876dcd81a33a736a3ecae08a4896f21abcc4c800b3d/semgrep-1.85.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-macosx_10_14_x86_64.whl", hash = "sha256:a63055b392da70c46947780f43fecf54064fb60d8de11a16902e0cc149350a3e", size = 27833827 },
+ { url = "https://files.pythonhosted.org/packages/97/fc/d34edce42fc2785645f64345d91b3ebd7d705c129306e0b420bd4ae0d31a/semgrep-1.85.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-macosx_11_0_arm64.whl", hash = "sha256:157b7724c35a8bda972921abfaaf252bdb754bbda004b2a82aaa38ac8099e176", size = 33557689 },
+ { url = "https://files.pythonhosted.org/packages/23/0e/679e6fe0b6f3e1496f01ad28a79829b832df69f19815a3891f0e9a144b35/semgrep-1.85.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-musllinux_1_0_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6b5d509576bbe0d68245d9ee2973ccecb485ca5907e85a7a8793552bf622cb", size = 32246576 },
]
[[package]]
name = "setuptools"
-version = "75.3.0"
+version = "75.5.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/ed/22/a438e0caa4576f8c383fa4d35f1cc01655a46c75be358960d815bfbb12bd/setuptools-75.3.0.tar.gz", hash = "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686", size = 1351577 }
+sdist = { url = "https://files.pythonhosted.org/packages/c8/db/722a42ffdc226e950c4757b3da7b56ff5c090bb265dccd707f7b8a3c6fee/setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef", size = 1336032 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/90/12/282ee9bce8b58130cb762fbc9beabd531549952cac11fc56add11dcb7ea0/setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd", size = 1251070 },
+ { url = "https://files.pythonhosted.org/packages/fe/df/88ccbee85aefbca071db004fdc8f8d2507d55d5a9dc27ebb93c92edb1bd8/setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829", size = 1222710 },
+]
+
+[[package]]
+name = "shellingham"
+version = "1.5.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 },
]
[[package]]
@@ -1665,6 +2136,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 },
]
+[[package]]
+name = "smmap"
+version = "5.0.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/88/04/b5bf6d21dc4041000ccba7eb17dd3055feb237e7ffc2c20d3fae3af62baa/smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62", size = 22291 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a7/a5/10f97f73544edcdef54409f1d839f6049a0d79df68adbc1ceb24d1aaca42/smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da", size = 24282 },
+]
+
[[package]]
name = "snowballstemmer"
version = "2.2.0"
@@ -1685,11 +2165,11 @@ wheels = [
[[package]]
name = "sqlparse"
-version = "0.5.1"
+version = "0.5.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/73/82/dfa23ec2cbed08a801deab02fe7c904bfb00765256b155941d789a338c68/sqlparse-0.5.1.tar.gz", hash = "sha256:bb6b4df465655ef332548e24f08e205afc81b9ab86cb1c45657a7ff173a3a00e", size = 84502 }
+sdist = { url = "https://files.pythonhosted.org/packages/57/61/5bc3aff85dc5bf98291b37cf469dab74b3d0aef2dd88eade9070a200af05/sqlparse-0.5.2.tar.gz", hash = "sha256:9e37b35e16d1cc652a2545f0997c1deb23ea28fa1f3eefe609eee3063c3b105f", size = 84951 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/5d/a5/b2860373aa8de1e626b2bdfdd6df4355f0565b47e51f7d0c54fe70faf8fe/sqlparse-0.5.1-py3-none-any.whl", hash = "sha256:773dcbf9a5ab44a090f3441e2180efe2560220203dc2f8c0b0fa141e18b505e4", size = 44156 },
+ { url = "https://files.pythonhosted.org/packages/7a/13/5f6654c9d915077fae255686ca6fa42095b62b7337e3e1aa9e82caa6f43a/sqlparse-0.5.2-py3-none-any.whl", hash = "sha256:e99bc85c78160918c3e1d9230834ab8d80fc06c59d03f8db2618f65f65dda55e", size = 44407 },
]
[[package]]
@@ -1718,81 +2198,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ec/50/70762bdb23f6c2b746b90661f461d33c4913a22a46bb5265b10947e85ffb/stevedore-5.3.0-py3-none-any.whl", hash = "sha256:1efd34ca08f474dad08d9b19e934a22c68bb6fe416926479ba29e5013bcc8f78", size = 49661 },
]
-[[package]]
-name = "superschema"
-version = "0.1.0"
-source = { editable = "." }
-
-[package.dev-dependencies]
-dev = [
- { name = "basedpyright" },
- { name = "beartype" },
- { name = "debugpy" },
- { name = "django" },
- { name = "django-ninja" },
- { name = "django-stubs", extra = ["compatible-mypy"] },
- { name = "django-stubs-ext" },
- { name = "email-validator" },
- { name = "hypothesis" },
- { name = "import-linter" },
- { name = "ipykernel" },
- { name = "isort" },
- { name = "mypy" },
- { name = "ninja-schema" },
- { name = "nox" },
- { name = "pydantic" },
- { name = "pylint-django" },
- { name = "pyre-check" },
- { name = "pyright" },
- { name = "pytest" },
- { name = "pytest-cov" },
- { name = "pytest-django" },
- { name = "pytest-instafail" },
- { name = "pytest-testmon" },
- { name = "pytest-watch" },
- { name = "pytype" },
- { name = "rich" },
- { name = "ruff" },
- { name = "typeguard" },
- { name = "wemake-python-styleguide" },
-]
-
-[package.metadata]
-
-[package.metadata.requires-dev]
-dev = [
- { name = "basedpyright", specifier = ">=1.21.0" },
- { name = "beartype", specifier = ">=0.19.0" },
- { name = "debugpy", specifier = ">=1.8.8" },
- { name = "django", specifier = ">=5.1.3" },
- { name = "django-ninja", specifier = ">=1.3.0" },
- { name = "django-stubs", extras = ["compatible-mypy"], specifier = ">=5.1.1" },
- { name = "django-stubs-ext", specifier = ">=5.1.1" },
- { name = "email-validator", specifier = ">=2.2.0" },
- { name = "hypothesis", specifier = ">=6.118.0" },
- { name = "import-linter", specifier = ">=2.1" },
- { name = "ipykernel", specifier = ">=6.29.5" },
- { name = "isort", specifier = ">=5.13.2" },
- { name = "mypy", specifier = ">=1.13.0" },
- { name = "ninja-schema", specifier = ">=0.13.6" },
- { name = "nox", specifier = ">=2024.10.9" },
- { name = "pydantic", specifier = ">=2.9.2" },
- { name = "pylint-django", specifier = ">=2.6.1" },
- { name = "pyre-check", specifier = ">=0.9.23" },
- { name = "pyright", specifier = ">=1.1.388" },
- { name = "pytest", specifier = ">=8.3.3" },
- { name = "pytest-cov", specifier = ">=6.0.0" },
- { name = "pytest-django", specifier = ">=4.9.0" },
- { name = "pytest-instafail", specifier = ">=0.5.0" },
- { name = "pytest-testmon", specifier = ">=2.1.1" },
- { name = "pytest-watch", specifier = ">=4.2.0" },
- { name = "pytype", specifier = ">=2024.10.11" },
- { name = "rich", specifier = ">=13.9.4" },
- { name = "ruff", specifier = ">=0.7.3" },
- { name = "typeguard", specifier = ">=4.4.1" },
- { name = "wemake-python-styleguide", specifier = ">=0.19.2" },
-]
-
[[package]]
name = "tabulate"
version = "0.9.0"
@@ -1822,6 +2227,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588 },
]
+[[package]]
+name = "tomli"
+version = "2.0.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/35/b9/de2a5c0144d7d75a57ff355c0c24054f965b2dc3036456ae03a51ea6264b/tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed", size = 16096 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/cf/db/ce8eda256fa131af12e0a76d481711abe4681b6923c27efb9a255c9e4594/tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38", size = 13237 },
+]
+
[[package]]
name = "tomlkit"
version = "0.13.2"
@@ -1910,6 +2324,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 },
]
+[[package]]
+name = "urllib3"
+version = "2.2.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", size = 300677 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", size = 126338 },
+]
+
[[package]]
name = "virtualenv"
version = "20.27.1"
@@ -1933,9 +2356,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471 },
{ url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449 },
{ url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054 },
- { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480 },
- { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451 },
- { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057 },
{ url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079 },
{ url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078 },
{ url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076 },
@@ -1948,6 +2368,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067 },
]
+[[package]]
+name = "wcmatch"
+version = "8.5.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "bracex" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ea/c4/55e0d36da61d7b8b2a49fd273e6b296fd5e8471c72ebbe438635d1af3968/wcmatch-8.5.2.tar.gz", hash = "sha256:a70222b86dea82fb382dd87b73278c10756c138bd6f8f714e2183128887b9eb2", size = 114983 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/09/78/533ef890536e5ba0fd4f7df37482b5800ecaaceae9afc30978a1a7f88ff1/wcmatch-8.5.2-py3-none-any.whl", hash = "sha256:17d3ad3758f9d0b5b4dedc770b65420d4dac62e680229c287bf24c9db856a478", size = 39397 },
+]
+
[[package]]
name = "wcwidth"
version = "0.2.13"
@@ -1987,3 +2419,31 @@ sdist = { url = "https://files.pythonhosted.org/packages/c2/f4/2a76c59661fae8534
wheels = [
{ url = "https://files.pythonhosted.org/packages/fd/c4/0e36d00c88e995f2a0e5de8c61bb130a4acdc1b458b6bf8c7a474b127890/wemake_python_styleguide-0.19.2-py3-none-any.whl", hash = "sha256:d53205dbb629755026d853d15fb3ca03ebb2717c97de4198b5676b9bdc0663bd", size = 224081 },
]
+
+[[package]]
+name = "wrapt"
+version = "1.16.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/95/4c/063a912e20bcef7124e0df97282a8af3ff3e4b603ce84c481d6d7346be0a/wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d", size = 53972 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/92/17/224132494c1e23521868cdd57cd1e903f3b6a7ba6996b7b8f077ff8ac7fe/wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b", size = 37614 },
+ { url = "https://files.pythonhosted.org/packages/6a/d7/cfcd73e8f4858079ac59d9db1ec5a1349bc486ae8e9ba55698cc1f4a1dff/wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36", size = 38316 },
+ { url = "https://files.pythonhosted.org/packages/7e/79/5ff0a5c54bda5aec75b36453d06be4f83d5cd4932cc84b7cb2b52cee23e2/wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73", size = 86322 },
+ { url = "https://files.pythonhosted.org/packages/c4/81/e799bf5d419f422d8712108837c1d9bf6ebe3cb2a81ad94413449543a923/wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809", size = 79055 },
+ { url = "https://files.pythonhosted.org/packages/62/62/30ca2405de6a20448ee557ab2cd61ab9c5900be7cbd18a2639db595f0b98/wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b", size = 87291 },
+ { url = "https://files.pythonhosted.org/packages/49/4e/5d2f6d7b57fc9956bf06e944eb00463551f7d52fc73ca35cfc4c2cdb7aed/wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81", size = 90374 },
+ { url = "https://files.pythonhosted.org/packages/a6/9b/c2c21b44ff5b9bf14a83252a8b973fb84923764ff63db3e6dfc3895cf2e0/wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9", size = 83896 },
+ { url = "https://files.pythonhosted.org/packages/14/26/93a9fa02c6f257df54d7570dfe8011995138118d11939a4ecd82cb849613/wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c", size = 91738 },
+ { url = "https://files.pythonhosted.org/packages/a2/5b/4660897233eb2c8c4de3dc7cefed114c61bacb3c28327e64150dc44ee2f6/wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc", size = 35568 },
+ { url = "https://files.pythonhosted.org/packages/5c/cc/8297f9658506b224aa4bd71906447dea6bb0ba629861a758c28f67428b91/wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8", size = 37653 },
+ { url = "https://files.pythonhosted.org/packages/ff/21/abdedb4cdf6ff41ebf01a74087740a709e2edb146490e4d9beea054b0b7a/wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1", size = 23362 },
+]
+
+[[package]]
+name = "zipp"
+version = "3.21.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/3f/50/bad581df71744867e9468ebd0bcd6505de3b275e06f202c2cb016e3ff56f/zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", size = 24545 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931", size = 9630 },
+]