diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..dc99be7 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,25 @@ +name: "Continuous integration" + +concurrency: + group: ${{ github.ref }} + cancel-in-progress: false + +on: + push: + branches: + - main + pull_request: + +jobs: + ci: + name: Continuous integration + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: astral-sh/setup-uv@v5 + - name: Sync + run: uv sync + - name: Lint + run: scripts/lint + - name: Test + run: uv run pytest diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..a65faa5 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,26 @@ +[project] +name = "pystapi" +version = "0.0.0" # This package should never be released, only the workspace members should be +description = "Monorepo for Satellite Tasking API (STAPI) Specification Python packages" +readme = "README.md" +requires-python = ">=3.10" +dependencies = [ + "stapi-pydantic" +] + +[dependency-groups] +dev = [ + "mypy>=1.15.0", + "pytest>=8.3.5", + "ruff>=0.11.2", +] + +[tool.uv.workspace] +members = ["stapi-pydantic"] + +[tool.uv.sources] +stapi-pydantic.workspace = true + +[tool.mypy] +strict = true +files = "stapi-pydantic/src/stapi_pydantic/**/*.py" diff --git a/scripts/format b/scripts/format new file mode 100755 index 0000000..8b3e0c9 --- /dev/null +++ b/scripts/format @@ -0,0 +1,4 @@ +#!/usr/bin/env sh + +uv run ruff check --fix +uv run ruff format diff --git a/scripts/lint b/scripts/lint new file mode 100755 index 0000000..8902375 --- /dev/null +++ b/scripts/lint @@ -0,0 +1,6 @@ + +#!/usr/bin/env sh + +uv run ruff check +uv run ruff format --check +uv run mypy diff --git a/stapi-pydantic/README.md b/stapi-pydantic/README.md new file mode 100644 index 0000000..e69de29 diff --git a/stapi-pydantic/pyproject.toml b/stapi-pydantic/pyproject.toml new file mode 100644 index 0000000..cee2153 --- /dev/null +++ b/stapi-pydantic/pyproject.toml @@ -0,0 +1,21 @@ +[project] +name = "stapi-pydantic" +version = "0.0.1" +description = "Pydantic models for Satellite Tasking API (STAPI) Specification" +readme = "README.md" +authors = [ + { name = "Phil Varner", email = "phil@philvarner.com" }, + { name = "Pete Gadomski", email = "pete.gadomski@gmail.com" }, +] +requires-python = ">=3.10" +dependencies = [ + "cql2>=0.3.6", + "geojson-pydantic>=1.2.0", +] + +[project.scripts] +stapi-pydantic = "stapi_pydantic:main" + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" diff --git a/stapi-pydantic/src/stapi_pydantic/__init__.py b/stapi-pydantic/src/stapi_pydantic/__init__.py new file mode 100644 index 0000000..084f481 --- /dev/null +++ b/stapi-pydantic/src/stapi_pydantic/__init__.py @@ -0,0 +1,11 @@ +from .opportunity import OpportunityProperties +from .product import Product, Provider, ProviderRole +from .shared import Link + +__all__ = [ + "Link", + "OpportunityProperties", + "Product", + "Provider", + "ProviderRole", +] diff --git a/stapi-pydantic/src/stapi_pydantic/conformance.py b/stapi-pydantic/src/stapi_pydantic/conformance.py new file mode 100644 index 0000000..d211fc8 --- /dev/null +++ b/stapi-pydantic/src/stapi_pydantic/conformance.py @@ -0,0 +1,11 @@ +from pydantic import BaseModel, Field + +CORE = "https://stapi.example.com/v0.1.0/core" +OPPORTUNITIES = "https://stapi.example.com/v0.1.0/opportunities" +ASYNC_OPPORTUNITIES = "https://stapi.example.com/v0.1.0/async-opportunities" + + +class Conformance(BaseModel): + conforms_to: list[str] = Field( + default_factory=list, serialization_alias="conformsTo" + ) diff --git a/stapi-pydantic/src/stapi_pydantic/constraints.py b/stapi-pydantic/src/stapi_pydantic/constraints.py new file mode 100644 index 0000000..ad3e6de --- /dev/null +++ b/stapi-pydantic/src/stapi_pydantic/constraints.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel, ConfigDict + + +class Constraints(BaseModel): + model_config = ConfigDict(extra="allow") diff --git a/stapi-pydantic/src/stapi_pydantic/datetime_interval.py b/stapi-pydantic/src/stapi_pydantic/datetime_interval.py new file mode 100644 index 0000000..83be44a --- /dev/null +++ b/stapi-pydantic/src/stapi_pydantic/datetime_interval.py @@ -0,0 +1,42 @@ +from datetime import datetime +from typing import Annotated, Callable + +from pydantic import ( + AfterValidator, + AwareDatetime, + BeforeValidator, + WithJsonSchema, + WrapSerializer, +) + + +def validate_before( + value: str | tuple[datetime, datetime], +) -> tuple[datetime, datetime]: + if isinstance(value, str): + start, end = value.split("/", 1) + return (datetime.fromisoformat(start), datetime.fromisoformat(end)) + return value + + +def validate_after(value: tuple[datetime, datetime]) -> tuple[datetime, datetime]: + if value[1] < value[0]: + raise ValueError("end before start") + return value + + +def serialize( + value: tuple[datetime, datetime], + serializer: Callable[[tuple[datetime, datetime]], tuple[str, str]], +) -> str: + del serializer # unused + return f"{value[0].isoformat()}/{value[1].isoformat()}" + + +type DatetimeInterval = Annotated[ + tuple[AwareDatetime, AwareDatetime], + BeforeValidator(validate_before), + AfterValidator(validate_after), + WrapSerializer(serialize, return_type=str), + WithJsonSchema({"type": "string"}, mode="serialization"), +] diff --git a/stapi-pydantic/src/stapi_pydantic/filter.py b/stapi-pydantic/src/stapi_pydantic/filter.py new file mode 100644 index 0000000..00877b1 --- /dev/null +++ b/stapi-pydantic/src/stapi_pydantic/filter.py @@ -0,0 +1,17 @@ +from typing import Annotated, Any + +from cql2 import Expr +from pydantic import BeforeValidator + + +def validate(v: dict[str, Any]) -> dict[str, Any]: + if v: + expr = Expr(v) + expr.validate() + return v + + +type CQL2Filter = Annotated[ + dict, + BeforeValidator(validate), +] diff --git a/stapi-pydantic/src/stapi_pydantic/json_schema_model.py b/stapi-pydantic/src/stapi_pydantic/json_schema_model.py new file mode 100644 index 0000000..95f0203 --- /dev/null +++ b/stapi-pydantic/src/stapi_pydantic/json_schema_model.py @@ -0,0 +1,26 @@ +from typing import Annotated, Any + +from pydantic import ( + BaseModel, + PlainSerializer, + PlainValidator, + WithJsonSchema, +) + + +def validate(v: Any) -> Any: + if not issubclass(v, BaseModel): + raise RuntimeError("BaseModel class required") + return v + + +def serialize(v: type[BaseModel]) -> dict[str, Any]: + return v.model_json_schema() + + +type JsonSchemaModel = Annotated[ + type[BaseModel], + PlainValidator(validate), + PlainSerializer(serialize), + WithJsonSchema({"type": "object"}), +] diff --git a/stapi-pydantic/src/stapi_pydantic/opportunity.py b/stapi-pydantic/src/stapi_pydantic/opportunity.py new file mode 100644 index 0000000..f12d16c --- /dev/null +++ b/stapi-pydantic/src/stapi_pydantic/opportunity.py @@ -0,0 +1,83 @@ +from enum import StrEnum +from typing import Any, Literal, TypeVar + +from geojson_pydantic import Feature, FeatureCollection +from geojson_pydantic.geometries import Geometry +from pydantic import AwareDatetime, BaseModel, ConfigDict, Field + +from .datetime_interval import DatetimeInterval +from .filter import CQL2Filter +from .shared import Link + + +# Copied and modified from https://github.com/stac-utils/stac-pydantic/blob/main/stac_pydantic/item.py#L11 +class OpportunityProperties(BaseModel): + datetime: DatetimeInterval + product_id: str + model_config = ConfigDict(extra="allow") + + +class OpportunityPayload(BaseModel): + datetime: DatetimeInterval + geometry: Geometry + filter: CQL2Filter | None = None + + next: str | None = None + limit: int = 10 + + model_config = ConfigDict(strict=True) + + def search_body(self) -> dict[str, Any]: + return self.model_dump(mode="json", include={"datetime", "geometry", "filter"}) + + def body(self) -> dict[str, Any]: + return self.model_dump(mode="json") + + +G = TypeVar("G", bound=Geometry) +P = TypeVar("P", bound=OpportunityProperties) + + +class Opportunity(Feature[G, P]): + type: Literal["Feature"] = "Feature" + links: list[Link] = Field(default_factory=list) + + +class OpportunityCollection(FeatureCollection[Opportunity[G, P]]): + type: Literal["FeatureCollection"] = "FeatureCollection" + links: list[Link] = Field(default_factory=list) + id: str | None = None + + +class OpportunitySearchStatusCode(StrEnum): + received = "received" + in_progress = "in_progress" + failed = "failed" + canceled = "canceled" + completed = "completed" + + +class OpportunitySearchStatus(BaseModel): + timestamp: AwareDatetime + status_code: OpportunitySearchStatusCode + reason_code: str | None = None + reason_text: str | None = None + links: list[Link] = Field(default_factory=list) + + +class OpportunitySearchRecord(BaseModel): + id: str + product_id: str + opportunity_request: OpportunityPayload + status: OpportunitySearchStatus + links: list[Link] = Field(default_factory=list) + + +class OpportunitySearchRecords(BaseModel): + search_records: list[OpportunitySearchRecord] + links: list[Link] = Field(default_factory=list) + + +class Prefer(StrEnum): + respond_async = "respond-async" + wait = "wait" diff --git a/stapi-pydantic/src/stapi_pydantic/order.py b/stapi-pydantic/src/stapi_pydantic/order.py new file mode 100644 index 0000000..69ef2a4 --- /dev/null +++ b/stapi-pydantic/src/stapi_pydantic/order.py @@ -0,0 +1,131 @@ +from collections.abc import Iterator +from enum import StrEnum +from typing import Any, Generic, Literal, Optional, TypeVar, Union + +from geojson_pydantic.base import _GeoJsonBase +from geojson_pydantic.geometries import Geometry +from pydantic import ( + AwareDatetime, + BaseModel, + ConfigDict, + Field, + StrictStr, + field_validator, +) + +from .datetime_interval import DatetimeInterval +from .filter import CQL2Filter +from .opportunity import OpportunityProperties +from .shared import Link + +Props = TypeVar("Props", bound=Union[dict[str, Any], BaseModel]) +Geom = TypeVar("Geom", bound=Geometry) + + +class OrderParameters(BaseModel): + model_config = ConfigDict(extra="forbid") + + +OPP = TypeVar("OPP", bound=OpportunityProperties) +ORP = TypeVar("ORP", bound=OrderParameters) + + +class OrderStatusCode(StrEnum): + received = "received" + accepted = "accepted" + rejected = "rejected" + completed = "completed" + canceled = "canceled" + scheduled = "scheduled" + held = "held" + processing = "processing" + reserved = "reserved" + tasked = "tasked" + user_canceled = "user_canceled" + + +class OrderStatus(BaseModel): + timestamp: AwareDatetime + status_code: OrderStatusCode + reason_code: Optional[str] = None + reason_text: Optional[str] = None + links: list[Link] = Field(default_factory=list) + + model_config = ConfigDict(extra="allow") + + +class OrderStatuses[T: OrderStatus](BaseModel): + statuses: list[T] + links: list[Link] = Field(default_factory=list) + + +class OrderSearchParameters(BaseModel): + datetime: DatetimeInterval + geometry: Geometry + # TODO: validate the CQL2 filter? + filter: CQL2Filter | None = None + + +class OrderProperties[T: OrderStatus](BaseModel): + product_id: str + created: AwareDatetime + status: T + + search_parameters: OrderSearchParameters + opportunity_properties: dict[str, Any] + order_parameters: dict[str, Any] + + model_config = ConfigDict(extra="allow") + + +# derived from geojson_pydantic.Feature +class Order[T: OrderStatus](_GeoJsonBase): + # We need to enforce that orders have an id defined, as that is required to + # retrieve them via the API + id: StrictStr + type: Literal["Feature"] = "Feature" + + geometry: Geometry = Field(...) + properties: OrderProperties[T] = Field(...) + + links: list[Link] = Field(default_factory=list) + + __geojson_exclude_if_none__ = {"bbox", "id"} + + @field_validator("geometry", mode="before") + def set_geometry(cls, geometry: Any) -> Any: + """set geometry from geo interface or input""" + if hasattr(geometry, "__geo_interface__"): + return geometry.__geo_interface__ + + return geometry + + +# derived from geojson_pydantic.FeatureCollection +class OrderCollection[T: OrderStatus](_GeoJsonBase): + type: Literal["FeatureCollection"] = "FeatureCollection" + features: list[Order[T]] + links: list[Link] = Field(default_factory=list) + + def __iter__(self) -> Iterator[Order[T]]: # type: ignore [override] + """iterate over features""" + return iter(self.features) + + def __len__(self) -> int: + """return features length""" + return len(self.features) + + def __getitem__(self, index: int) -> Order[T]: + """get feature at a given index""" + return self.features[index] + + +class OrderPayload(BaseModel, Generic[ORP]): + datetime: DatetimeInterval + geometry: Geometry + # TODO: validate the CQL2 filter? + filter: CQL2Filter | None = None + + order_parameters: ORP + + model_config = ConfigDict(strict=True) diff --git a/stapi-pydantic/src/stapi_pydantic/product.py b/stapi-pydantic/src/stapi_pydantic/product.py new file mode 100644 index 0000000..dcfdcfd --- /dev/null +++ b/stapi-pydantic/src/stapi_pydantic/product.py @@ -0,0 +1,88 @@ +from enum import StrEnum +from typing import Any, Literal, Optional, Self + +from pydantic import AnyHttpUrl, BaseModel, Field + +from .opportunity import OpportunityProperties +from .order import OrderParameters +from .shared import Link + +type Constraints = BaseModel + + +class ProviderRole(StrEnum): + licensor = "licensor" + producer = "producer" + processor = "processor" + host = "host" + + +class Provider(BaseModel): + name: str + description: Optional[str] = None + roles: list[ProviderRole] + url: AnyHttpUrl + + # redefining init is a hack to get str type to validate for `url`, + # as str is ultimately coerced into an AnyHttpUrl automatically anyway + def __init__(self, url: AnyHttpUrl | str, **kwargs: Any) -> None: + super().__init__(url=url, **kwargs) + + +class Product(BaseModel): + type_: Literal["Product"] = Field(default="Product", alias="type") + conformsTo: list[str] = Field(default_factory=list) + id: str + title: str = "" + description: str = "" + keywords: list[str] = Field(default_factory=list) + license: str + providers: list[Provider] = Field(default_factory=list) + links: list[Link] = Field(default_factory=list) + + # we don't want to include these in the model fields + _constraints: type[Constraints] + _opportunity_properties: type[OpportunityProperties] + _order_parameters: type[OrderParameters] + + def __init__( + self, + *args: Any, + constraints: type[Constraints], + opportunity_properties: type[OpportunityProperties], + order_parameters: type[OrderParameters], + **kwargs: Any, + ) -> None: + super().__init__(*args, **kwargs) + + self._constraints = constraints + self._opportunity_properties = opportunity_properties + self._order_parameters = order_parameters + + @property + def constraints(self) -> type[Constraints]: + return self._constraints + + @property + def opportunity_properties(self) -> type[OpportunityProperties]: + return self._opportunity_properties + + @property + def order_parameters(self) -> type[OrderParameters]: + return self._order_parameters + + def with_links(self, links: list[Link] | None = None) -> Self: + if not links: + return self + + new = self.model_copy(deep=True) + new.links.extend(links) + return new + + +class ProductsCollection(BaseModel): + type_: Literal["ProductCollection"] = Field( + default="ProductCollection", alias="type" + ) + links: list[Link] = Field(default_factory=list) + products: list[Product] diff --git a/stapi-pydantic/src/stapi_pydantic/root.py b/stapi-pydantic/src/stapi_pydantic/root.py new file mode 100644 index 0000000..e42efae --- /dev/null +++ b/stapi-pydantic/src/stapi_pydantic/root.py @@ -0,0 +1,11 @@ +from pydantic import BaseModel, Field + +from .shared import Link + + +class RootResponse(BaseModel): + id: str + conformsTo: list[str] = Field(default_factory=list) + title: str = "" + description: str = "" + links: list[Link] = Field(default_factory=list) diff --git a/stapi-pydantic/src/stapi_pydantic/shared.py b/stapi-pydantic/src/stapi_pydantic/shared.py new file mode 100644 index 0000000..92d61a6 --- /dev/null +++ b/stapi-pydantic/src/stapi_pydantic/shared.py @@ -0,0 +1,32 @@ +from typing import Any + +from pydantic import ( + AnyUrl, + BaseModel, + ConfigDict, + SerializerFunctionWrapHandler, + model_serializer, +) + + +class Link(BaseModel): + href: AnyUrl + rel: str + type: str | None = None + title: str | None = None + method: str | None = None + headers: dict[str, str | list[str]] | None = None + body: Any = None + + model_config = ConfigDict(extra="allow") + + # redefining init is a hack to get str type to validate for `href`, + # as str is ultimately coerced into an AnyUrl automatically anyway + def __init__(self, href: AnyUrl | str, **kwargs: Any): + super().__init__(href=href, **kwargs) + + # overriding the default serialization to filter None field values from + # dumped json + @model_serializer(mode="wrap", when_used="json") + def serialize(self, handler: SerializerFunctionWrapHandler) -> dict[str, Any]: + return {k: v for k, v in handler(self).items() if v is not None} diff --git a/stapi-pydantic/tests/test_opportunity.py b/stapi-pydantic/tests/test_opportunity.py new file mode 100644 index 0000000..922e9dd --- /dev/null +++ b/stapi-pydantic/tests/test_opportunity.py @@ -0,0 +1,7 @@ +from stapi_pydantic import OpportunityProperties + + +def test_create_properties() -> None: + _ = OpportunityProperties.model_validate( + {"datetime": "2025-04-01T00:00:00Z/2025-04-01T23:59:59Z", "product_id": "foo"} + ) diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..ca74550 --- /dev/null +++ b/uv.lock @@ -0,0 +1,456 @@ +version = 1 +revision = 1 +requires-python = ">=3.10" + +[manifest] +members = [ + "pystapi", + "stapi-pydantic", +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "cql2" +version = "0.3.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/04/fc/477f0df08dba9f246735606601aa510247aaa395c27d27c84b8505f6dfbc/cql2-0.3.6.tar.gz", hash = "sha256:3a3f8d645b0ab15bd0815030702aa901e2de1f6747a30ce93b6ef0125068e40e", size = 153557 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/da/533c9fa3f5dcb1272160296c8083e1acfa35fd9d7e860151f4e55ee10230/cql2-0.3.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c66ba0c6ae414d96a48e4c48f18f8b20732fac65b67e4987a2abaf7af99878", size = 2688143 }, + { url = "https://files.pythonhosted.org/packages/88/9b/e966c63b52dc79a7486c9aac8bf44700d603dc1b32c2b4201b93672fdcde/cql2-0.3.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f4a16ce872effe8febec686c88859a9f0c2b8b169bb115c2a432c866be20c3e", size = 2618553 }, + { url = "https://files.pythonhosted.org/packages/bc/a4/312b6610331e3a59c79642e68d5ac5616a423089ac2c3365c74a0f861ffc/cql2-0.3.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a4f37b806710ed374cdc08db8ad6b20a262030af012874ed53e8c69f5531f8", size = 2894639 }, + { url = "https://files.pythonhosted.org/packages/0d/5c/ac34e1a1adb5e561204e6092cf4de784d0fd0b353644cdb5b030e1715196/cql2-0.3.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3354f404b512bb1d9915dd598a0e9468c07bb3668fbefd149ddeff1b20123a04", size = 2934543 }, + { url = "https://files.pythonhosted.org/packages/8c/d7/d2dbf953bd1614886d6d1b92ef1a5d6fe092f2d2e03ffe40fc9b6c2838a4/cql2-0.3.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0adee738961b71a20cf3b5d7d3413340bbee1d6d8e8f8ff8cfe9f985c54b14c6", size = 3192017 }, + { url = "https://files.pythonhosted.org/packages/2a/33/6882dc23a23c69d9b4c214840692f8ecaa0d11286afd12d0c22fa9ed6bae/cql2-0.3.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05b0841550f04bbf83e30f5c6180b647f859e99fdd7025601229784d51fc5120", size = 2787981 }, + { url = "https://files.pythonhosted.org/packages/aa/c7/d9c224539a6ba5a0332d8606e317e687e29f3c974b5b561e5f46ebe6f719/cql2-0.3.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9bcf4decb0fd3b880f3ea258c65d0446f9ee3659a22df24b65c9bdd27b986b47", size = 2855146 }, + { url = "https://files.pythonhosted.org/packages/b7/ae/82e5f9b1a2bf6a73cf434f3080a2371654af9013550ab8a154bb36d25238/cql2-0.3.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:fa3ed641fc110caf144c1a3f56c622ebc26599dd15fd6d277899d2473a36119e", size = 2881466 }, + { url = "https://files.pythonhosted.org/packages/9d/32/72b5935fc69b8de6f85634f306cc202e2ab6e10e587cd6e2a9aaa5147032/cql2-0.3.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4deb664b7422fa39964160a1b3e967618f8118b030cd9703f4dd0a881165a7bb", size = 2920160 }, + { url = "https://files.pythonhosted.org/packages/37/59/691ebd3a35dc3ead368f6bccb3786f2ec6ec098d5278ac52656aae239cb2/cql2-0.3.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:44cf85b2ce1342d3c06781bef65b0bbf5202fe67a375f7844281fb838ac27158", size = 2957761 }, + { url = "https://files.pythonhosted.org/packages/d8/c5/0ab1a904137532b91a354a459283749b7b8f8f682700b403230fb567e677/cql2-0.3.6-cp310-cp310-win32.whl", hash = "sha256:9e00dd2d16cf7c696f844eeadb96453392f3e527ca9699cb9ccfcaeea9adf20d", size = 2096159 }, + { url = "https://files.pythonhosted.org/packages/b6/c9/040be87a531b3523dde2093f83f04ed03a72d74b95ee3b4f0133637ca903/cql2-0.3.6-cp310-cp310-win_amd64.whl", hash = "sha256:8fb86a9bd43dfa3a0b21b8e0f47d699ec5dd17bf2baee01a43d5305a98bfa185", size = 2280431 }, + { url = "https://files.pythonhosted.org/packages/d9/0d/495da572b8a803e18e644568b1f29ebcfbf2c39583020625d2d84047b724/cql2-0.3.6-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5924dcab15e79ebcdb3716e14a9739189cf49ae004fbeaeaee94f999a5737759", size = 2559322 }, + { url = "https://files.pythonhosted.org/packages/f7/76/92213eba7e6ffe58c4641557c8cecbf7428e8ab09798b9f3002c85cf32df/cql2-0.3.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6fd8c2cfdf33601dc590da46226835bf7ecf27b4fecc67adfd50b099cae42be1", size = 2450932 }, + { url = "https://files.pythonhosted.org/packages/67/e3/3bcbf7e0536882eea494d67e607264193ef34509a3e4707aef50c0e899a8/cql2-0.3.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be819d720fbc2e7dd4b445431b633b133b6964db88b8f172b71f411f03a0e9ac", size = 2687808 }, + { url = "https://files.pythonhosted.org/packages/34/ea/d0a66728dacfaa5135f9b77d391cac1c8ef40a0489ce07f65c746f39ed56/cql2-0.3.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b9646835fb98a270fec1849a2724f537022394e0e42fcadfbba8b5b4c8e5a6c4", size = 2618460 }, + { url = "https://files.pythonhosted.org/packages/77/b3/1b0d875522748c21f1df10e83f693702f04823860f1e2f82c0fd54ae1c47/cql2-0.3.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bce85e4258e06f686956275fe6ca7453f3305fb4a72a6f85cbe952424e4fabe9", size = 2894860 }, + { url = "https://files.pythonhosted.org/packages/f1/fb/24c193242f02107e560d5f4d47f64a32cfe2f826e9efc56b0eec8420e0ab/cql2-0.3.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d20b3eb6c34cd8ca472c6a2e7d7218ef5bacdbf4d7eb389afec0f53b7a4471", size = 2934468 }, + { url = "https://files.pythonhosted.org/packages/29/0f/b165363897939e74ea57896b69a918b3c73ec88a0c6af541d1411b88934d/cql2-0.3.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c84bd68aa3850a398f45e15cfccb47e673898bd46beb207c868ac4346afe2de", size = 3192151 }, + { url = "https://files.pythonhosted.org/packages/85/db/b0d2f641710142d37152dc658f18d252e60168f06d9c747792b6a67a3c0f/cql2-0.3.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4fddd3ee6cea81af36a3da8f3adb63be7187652709f6235e9d10da7da720d1e", size = 2788090 }, + { url = "https://files.pythonhosted.org/packages/ba/ea/62d5b0e78acd1c0ddad4e7be50931d3a8e75272fceebc1e7df7492596ddd/cql2-0.3.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3e29467e49d1703cb642d0947c70a0063abf32f25919b90fd9cafd08195b4ab3", size = 2855406 }, + { url = "https://files.pythonhosted.org/packages/25/09/9b06a51a6423a0f428bf0e331c40decb870764bba04d0cd8fac2cad99365/cql2-0.3.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:7df87624368fcfe150a317b92b37fb6e7e1d5954f16f154c0ae8e81fc56cf7de", size = 2881766 }, + { url = "https://files.pythonhosted.org/packages/8b/a4/b4289fd6ba371c95baa0b3962549303210c521a27ca77e8b42d894ccc074/cql2-0.3.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bf64cb3216becb0a8ef01fc08c3182820837e8d5a50074ab520267c32badfbec", size = 2920172 }, + { url = "https://files.pythonhosted.org/packages/86/c3/ca3944a5daa5ea410c3301fed63743a1643363d93e1bf8c2d3391cf8f0fe/cql2-0.3.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2a6e9a49febdc3e97ac07fd2af4208f813364e0983cc2953901e62265e1e2e59", size = 2957883 }, + { url = "https://files.pythonhosted.org/packages/77/82/6c1b3d3a3ca5fad8475cf60c117d48077d4aa69d0bb31fd74a04af14f0b9/cql2-0.3.6-cp311-cp311-win32.whl", hash = "sha256:854851841951cf62462c66f826db1669fb27f03cdcba9a352d2fd90c5a91136a", size = 2096438 }, + { url = "https://files.pythonhosted.org/packages/f4/96/9b8b891663c911670872c6a57da1194452029886097d01960b2111a846d4/cql2-0.3.6-cp311-cp311-win_amd64.whl", hash = "sha256:c75f56a6b3316b2d209222e5cb30564e9df23c422bc03ae111818012410634bd", size = 2280791 }, + { url = "https://files.pythonhosted.org/packages/29/ba/1e31f6ffbd058db0d6f6c8e8e03e5ffe13844520c697529b84abc0d6330b/cql2-0.3.6-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c03a1b302616c66f1d897f1533a60ce8985c69b42448a778d80cee3c15377c25", size = 2555577 }, + { url = "https://files.pythonhosted.org/packages/ed/7e/e66f4618593f174a80a7a04af86db30f3d07d3b9656d0fdb2625bc229af0/cql2-0.3.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1f42c559cfe689d199febde241e7126ce690eacdb89ecc1770c087660ec69b8a", size = 2445609 }, + { url = "https://files.pythonhosted.org/packages/f7/5d/09a32d1eb32a73179bfe66ef89e07f3dd29de42e0442c2d5d783076025f2/cql2-0.3.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc643a2554b064073aa09f8825ab8e4b05ba713314b16ff6dac9c11a1c9bd942", size = 2687180 }, + { url = "https://files.pythonhosted.org/packages/a6/57/7bdd011a72ba76f7be3c0ee3eb8935d2ebebb46c1b1af07210792a14b9a7/cql2-0.3.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4101a0062791ae5934311dd45737ab48b033b9ec649c84590bea684b88f07ed8", size = 2618796 }, + { url = "https://files.pythonhosted.org/packages/a4/43/9c7f254f7e62e8db67a9cc49de588f4193d941aa6a01c24c808aa08a2a11/cql2-0.3.6-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28264577ba79cafcd0dea74314a3d7f9d74bba9d3b42dd37f13cca6d9bfa5bf3", size = 2894076 }, + { url = "https://files.pythonhosted.org/packages/d5/a5/753b6ddfd1b4e7372b485b0f10d78b920a24013305b0630368344e88cacf/cql2-0.3.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0da478a44f3723f9c3a1b74884877e1761bc90239428f1318511d1eb2642ddea", size = 2936683 }, + { url = "https://files.pythonhosted.org/packages/c5/5e/009849747faf354bf6dbc33bbb9b8647534e98b65fa17e6886e7ee8afb41/cql2-0.3.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8891c756a51541ca36be9cea6d3f863969da5d9d7f9b00ad2d99c07425f4b4e1", size = 3190640 }, + { url = "https://files.pythonhosted.org/packages/6d/86/0c974fb33ac9f1bf0a292fa9081ae70bdb62d9e1757ed914e7b7bc6912c1/cql2-0.3.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b0a01042c6b1122a6f6d84a22aca31e74bfdda5b3791241a612f60f0cf857c7", size = 2790918 }, + { url = "https://files.pythonhosted.org/packages/d3/e1/755922d7bbf8772a23b61e459814ec15c2019b1c13db5b15da32f4419981/cql2-0.3.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:78c597201dc8256d77582157c3d10ae8b0635738d8417c07d600b22f7f453cf1", size = 2855762 }, + { url = "https://files.pythonhosted.org/packages/80/38/a0ae33acab7d1ed8f746d05d95d2d13913b29d5f1135a072324193a3da34/cql2-0.3.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b8c88c456c3f01712145e7aeaa22638bb7992a979b18c046a4ba2e265a0c1a67", size = 2880716 }, + { url = "https://files.pythonhosted.org/packages/ce/82/e6b6cdcf658b29556e9fbf597a9588ea9efc3777c60852bdb2b20d69a628/cql2-0.3.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4a4b94248e075ee8e8851790baa35cf7e8782786082f331177d221a3fedfbcef", size = 2919196 }, + { url = "https://files.pythonhosted.org/packages/57/a6/a7cbe674e11eb65ae48d39f17589d4d34f3eefbc90dfd087fe70f2feb9a3/cql2-0.3.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c605eb11fa8179cb76dc2ae71ffb7afc6184ce08b25b33dff2b32b181692da53", size = 2961143 }, + { url = "https://files.pythonhosted.org/packages/f3/4e/9189c8095d1ebabbd1c2597c712fa4fdc951cb5c1997b773d120830671ce/cql2-0.3.6-cp312-cp312-win32.whl", hash = "sha256:fad464f03ec2b1e8a7104543053d04dcc3e6a890365924f7e5937cb42bd25af1", size = 2096094 }, + { url = "https://files.pythonhosted.org/packages/35/9a/ea584020b0ac8edbf0b0f13a4e4b5a98c588a2e5dde1fb7407527f1ff789/cql2-0.3.6-cp312-cp312-win_amd64.whl", hash = "sha256:e72f35d6fb6a2afc318cce597d9939ab07c8e636e593e3348a52e9e8ef1741fe", size = 2281187 }, + { url = "https://files.pythonhosted.org/packages/7a/fa/c60492963db28002dd6adf17d873e498e20ea075ce1d075fdb2125326e9d/cql2-0.3.6-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:33a3a2464f50b8d3b08b91d6566f5ac7d40ed24a39f79486fbf10eaa690b5869", size = 2556076 }, + { url = "https://files.pythonhosted.org/packages/50/3e/9d7c31691bc9d7752c37c478b9f7c25c7e0cf6e2bc7acc223c51d991de1b/cql2-0.3.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:463f4a9e0e005d5517895ab48646dee5aa53ebe5344050291a10d1010f49b21f", size = 2445973 }, + { url = "https://files.pythonhosted.org/packages/16/5c/64781984241a53dee6b39e6efddfd35dd1a6cb7191a6635fa969d28b5b84/cql2-0.3.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54a0427ea79f9e5dc9f460187c19a6d6affed34ba0fab85152ee8a83a0f74d7b", size = 2687472 }, + { url = "https://files.pythonhosted.org/packages/5c/f8/6fe2b147b14f02012ac7eb51a28ad8aadd22c382465ab775158c4e8807f1/cql2-0.3.6-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2415889c94fc8d3d639072e4cd1d4f3a71ed49ecd02adf895910b5a159f1ac6c", size = 2619014 }, + { url = "https://files.pythonhosted.org/packages/75/aa/ff8a45f0c51dbb9f17149fcd70e7afdec9bef3727efa8154976c8cb0e66f/cql2-0.3.6-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5971857a56ca8984635b11b0909743f34d2cea9762a7b746aeff5b84ceb76cef", size = 2894368 }, + { url = "https://files.pythonhosted.org/packages/d7/d0/d404cd209371e2b2c27d8d8de6ea3ce3a7dc3795f540329b7b73701ebba7/cql2-0.3.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c31aeafcdf11e706ca33dbd3d22c56d0556e064da505814f5c03508f20eb575", size = 2936517 }, + { url = "https://files.pythonhosted.org/packages/94/96/eb8a5f0e2452af1d3fc3ae50d23bceefca0779315910037afbe9ee50a9d6/cql2-0.3.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aec17a8023caf3bf26d50d3cb5b53abf23cd707951abfd8cd2f224bfbeb9a9f1", size = 3190174 }, + { url = "https://files.pythonhosted.org/packages/43/7f/94f63afdb2a05077dcb39982af37f228daca79854ddb78a253363c0f6f8b/cql2-0.3.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432e722332c16c75e229dce49893ea41feff956d65a43c1e963a0840d16a8239", size = 2791438 }, + { url = "https://files.pythonhosted.org/packages/42/28/ccf4af229c95ae0af7c07ab554c584f9b354bd3bd01878870d15632732bc/cql2-0.3.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9d2cdd2637b235d46d977d90f192aed436dd0a1f0bee845be558911ef1bde9e", size = 2855903 }, + { url = "https://files.pythonhosted.org/packages/4b/8e/6953d72144a06e896c1cbe0bfe4fdecaf85bffba0dbdbf2d3524f160bb58/cql2-0.3.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c222d3f86545f94af84ad46173c501298f60e03138574be449345b6ea2cb2a8e", size = 2882461 }, + { url = "https://files.pythonhosted.org/packages/77/79/8869ad5aed5a980cfec52db61ca99050f65a9d10f7b5093092d4d49a7bbe/cql2-0.3.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d05eb3eec8beec121a5931defa5d137152d438ffbc49cf7934c8bdf9b3a08580", size = 2919340 }, + { url = "https://files.pythonhosted.org/packages/58/9c/849c0ca96cb327dce9f38d528d55b4b7bddbdb1c48e4af01a221939b07c0/cql2-0.3.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e5d97f242b78fbc19d1b575ae124633288ff777ef1415a78bd878aa98d3c27fe", size = 2961005 }, + { url = "https://files.pythonhosted.org/packages/9e/a5/a2b5884c02549d38fad7c414d0acc354bb539b8ca95760669b6a9262b3d6/cql2-0.3.6-cp313-cp313-win32.whl", hash = "sha256:2bf1ce7938d0b253519e5628cc826aaec536667c500cde17f371ec7ece802a0e", size = 2096237 }, + { url = "https://files.pythonhosted.org/packages/bf/e7/e022adf18d5815cea347f9dfeee7958fa20ec132696f34e2b0008d8e8d77/cql2-0.3.6-cp313-cp313-win_amd64.whl", hash = "sha256:d5472798eb1793838c24f8cbed50783597b1a5974575c11f4429e2ad5f505377", size = 2281300 }, + { url = "https://files.pythonhosted.org/packages/b0/69/1b341fcea6e6843f5bf05008ba1a98b1f535c6ebe9db6b0da469f47d1394/cql2-0.3.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:399a66df407e28ec967dc6fadc92ddd2b4651811787a47ff172051162ad2d8b1", size = 2684711 }, + { url = "https://files.pythonhosted.org/packages/89/1f/b9854299f6a9ae888e3cc1646c65840668d3df0101783e9bab79336b2d5c/cql2-0.3.6-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9fd2d7c0f833e083377b2f2b85695a9bfdfac4802cd2221babd768f4663b3e22", size = 2616352 }, + { url = "https://files.pythonhosted.org/packages/77/b4/6a8c3c4249253ad1cda19af17f43bba84380fbc43a038d746da611811c07/cql2-0.3.6-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:184edb7d43d9653ee51afb24654bbad827262f026c4adf0cf2baff1974020b90", size = 2932409 }, + { url = "https://files.pythonhosted.org/packages/00/52/a22d1fe298a0688f6c3b47021d1d76fc54a7b9fee074e90af285f490a2dc/cql2-0.3.6-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6cce42d2cab5e35f58c3b28c83bd075bdd213e9e7bf850fd76297701a1489dbb", size = 3188393 }, + { url = "https://files.pythonhosted.org/packages/13/95/91be87f27c2011b086f348800d03858730f253793ac4c97585c08aafd438/cql2-0.3.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14f3f2100dc13458b8701e2078d716903d93a41818b0b8b6e2bdb1898347bfa6", size = 2851003 }, + { url = "https://files.pythonhosted.org/packages/86/6f/1464cdb48e483506d26a9c6fb91d894a62548415b11174b07e8896a2d17c/cql2-0.3.6-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:90ba2470f69edaa0e666f7605c65b473fb7470919da4cf8f12cdb82c5289f5f2", size = 2878689 }, + { url = "https://files.pythonhosted.org/packages/75/35/e976d899984224cbe6483f1216415d91273c5ee7e66a5bd943c62440ec60/cql2-0.3.6-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f88faa0d70328ce86506751a5364627e8c3dfbe0f9784dc46c4a5be90c922bce", size = 2916899 }, + { url = "https://files.pythonhosted.org/packages/01/97/6bbc90fc65cfe8210458c3e8b5fbafdd971b787a0b70d0b19877e6561660/cql2-0.3.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cef8280dbe87ae3d2efe5ded039564ff04302862fd6faad97e4b64fcd877fc2f", size = 2957031 }, + { url = "https://files.pythonhosted.org/packages/75/0f/b90a56d65ce7f9584685ebd3de723e8b7b3617c1aabc8230b87434974ce3/cql2-0.3.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b89d052c1171b0ee2d2b690c230c31d7622f15a843670894c9aae3a032ade7e", size = 2687097 }, + { url = "https://files.pythonhosted.org/packages/5c/49/d45b1d7b701e015a4ac6dbb22412f387a79819bc7b313f001d2fe2d06984/cql2-0.3.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:205702d78e76800bc2c9bacbc5b73fbd5e783f9da9f660762b4684df8c80912e", size = 2619433 }, + { url = "https://files.pythonhosted.org/packages/16/fe/b0455ec43c90565dd71387a6ef0b929b15fa21ee6f7c48e1bbaf26acd9a7/cql2-0.3.6-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eebfc038c3fb191afaff88926ca4bce7829a84d8a49b91466317aa541fafbf9e", size = 2895893 }, + { url = "https://files.pythonhosted.org/packages/d1/55/5d2f4c80e00d957535638d4c9fe4dfc319ac40d0dce60448640fb3429c7c/cql2-0.3.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6e0476928c13729a92e0a10ebf246759a313cea3637d30d23541bd490312b403", size = 2933775 }, + { url = "https://files.pythonhosted.org/packages/ff/77/3e0c547270cbee1bc01daafe0ec8b10e5194c76fc950153489e76824e024/cql2-0.3.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48f8f8b689e0c791a4b106282a9f41f629edbf4cc89a173e78ca7356e0697606", size = 3191860 }, + { url = "https://files.pythonhosted.org/packages/1e/e9/ec7a88b05e3fca248cc5ee843d973167ad62bf6badd338b36d005d4b84a6/cql2-0.3.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f070a95c2952936fffc9b424caad60327637ad7f078329758098c078690e045", size = 2787901 }, + { url = "https://files.pythonhosted.org/packages/53/e6/6432445a4c2dbb2fba590b622f5751e382ace745e3e540a58f2d746489aa/cql2-0.3.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:fbdba362cffc524bc44853f1489fe068eb3f3760351d2ac709a829ddcb3e8c71", size = 2855251 }, + { url = "https://files.pythonhosted.org/packages/0e/af/9260c304be74c9bd3c1c436b70bb8d6e1d9b3a6edd7837c6b5c00331f374/cql2-0.3.6-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:f44fa4a1d7c73f4ade7840cc706500863704b8582c358b75eeb28b9b070410f5", size = 2882240 }, + { url = "https://files.pythonhosted.org/packages/07/75/fda8755569850eeaf7f8f16699266dc0d278debd0eb230b81016f4412f60/cql2-0.3.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:0db5e7a1d7512c85cf612cf73e54283c2b856b7c49927c786f635af9b82b0edc", size = 2919810 }, + { url = "https://files.pythonhosted.org/packages/86/66/1585682afbb1e332e7125d761871a4638f205fec4947343ccbf9a6b7071d/cql2-0.3.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:98fb0ad44a76f4eecec7010f2ab473e2e49d25093015a7f4978922a512302db7", size = 2958543 }, + { url = "https://files.pythonhosted.org/packages/3f/ab/ee78bc836127393c18098421f638288cf33d3f59a31bf88b3a2063e1eb9d/cql2-0.3.6-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16607a30562cacaed3e18cc9a5ab895fb0bbeaf6ec2a02a2f67051c4737e8e94", size = 2687194 }, + { url = "https://files.pythonhosted.org/packages/e8/94/ad7de8f53d40c51237c4732e2296135495e6b003f7c5bf6e26ea7cc38009/cql2-0.3.6-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d3a8b9fd82890ffe0264b94b52a11707d9520464abc23f35c07c61740207fb3c", size = 2619155 }, + { url = "https://files.pythonhosted.org/packages/6a/87/9fb65a8fb20f9149df43e46a99b0bb642211024b09f135cd8c5f3c6da7d6/cql2-0.3.6-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e08c44b0fd5b0c4ae869f3fcebcdc564b325b51c0a786a4b54d93426241bfff4", size = 2896296 }, + { url = "https://files.pythonhosted.org/packages/83/4c/3a8a21e3c3746ab3ce65a9ea74efa9acb84c0114974544b99225809cf172/cql2-0.3.6-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:baa0a94c41c588847bf776da67ff7e34b60bb81b0262660b47255573d9c25856", size = 2934023 }, + { url = "https://files.pythonhosted.org/packages/9e/4c/19ff270ce2eb4e22a832303f31782655e9a2ba174a685213d83761de347f/cql2-0.3.6-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d923307ed6a80185c0d874362419ce6dd72f244fb3228106321a410638802a33", size = 3191628 }, + { url = "https://files.pythonhosted.org/packages/0b/9e/e28ea37c7abe37fbf86bb598040ea3c87fbeff6c4ddc43eb5e1abe0a4eb0/cql2-0.3.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b64fde3fb0068e6ed673ab019bd5ef3f0610b8a1b961e0a19bda3610165640db", size = 2787993 }, + { url = "https://files.pythonhosted.org/packages/13/dd/bf99e04246a07c667622e8e43b740cf5ebc541a32e31378120a32b92355a/cql2-0.3.6-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4a6f484e9ebad7ca9f4813eb153e8d7f5283f0da22ab5cdfe09f24752aa73de6", size = 2855090 }, + { url = "https://files.pythonhosted.org/packages/07/86/b8572df931274479e1a03ed75d176b59c9125757879e79b5321074dd2193/cql2-0.3.6-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:872562f2ee8989f440f3b2802bd5b0eb9af46a2d2db8cb59ef4f401aa5d9a253", size = 2882259 }, + { url = "https://files.pythonhosted.org/packages/43/a0/e3c24bfdd88bc4a525a55dd963d52adce0b88e8ff6da927a0ace47396623/cql2-0.3.6-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:188fc43a8482baf4d9a057360dd23b12350424ad588b355d052eb0c55e00a16b", size = 2920502 }, + { url = "https://files.pythonhosted.org/packages/0a/13/53194cfb61f9d844059f3c3ceb987877ae639257270dc7bf2a52e094ae4c/cql2-0.3.6-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4db7d426c9dc4c7475856ef51a1766ef71a65bb92e291b08c26965bc1bf85f5f", size = 2958585 }, +] + +[[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 = "geojson-pydantic" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/45/2aefc48622a54a050e0ba9a312e96e65ca77a277e2da1484460714afa0e5/geojson_pydantic-1.2.0.tar.gz", hash = "sha256:eb5c61d3106a28bc71c936ef4cb44f36025db314059217063fee87d82e50cc81", size = 9231 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/1d/302eada860ab11524af66c90943de586846f112581ababf104c69ceb6747/geojson_pydantic-1.2.0-py3-none-any.whl", hash = "sha256:30f469d05f7f73dcac5f995579209d1ae74a148c0724018fa9492675e05eebf6", size = 8743 }, +] + +[[package]] +name = "iniconfig" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, +] + +[[package]] +name = "mypy" +version = "1.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/43/d5e49a86afa64bd3839ea0d5b9c7103487007d728e1293f52525d6d5486a/mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43", size = 3239717 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/f8/65a7ce8d0e09b6329ad0c8d40330d100ea343bd4dd04c4f8ae26462d0a17/mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13", size = 10738433 }, + { url = "https://files.pythonhosted.org/packages/b4/95/9c0ecb8eacfe048583706249439ff52105b3f552ea9c4024166c03224270/mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559", size = 9861472 }, + { url = "https://files.pythonhosted.org/packages/84/09/9ec95e982e282e20c0d5407bc65031dfd0f0f8ecc66b69538296e06fcbee/mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b", size = 11611424 }, + { url = "https://files.pythonhosted.org/packages/78/13/f7d14e55865036a1e6a0a69580c240f43bc1f37407fe9235c0d4ef25ffb0/mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3", size = 12365450 }, + { url = "https://files.pythonhosted.org/packages/48/e1/301a73852d40c241e915ac6d7bcd7fedd47d519246db2d7b86b9d7e7a0cb/mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b", size = 12551765 }, + { url = "https://files.pythonhosted.org/packages/77/ba/c37bc323ae5fe7f3f15a28e06ab012cd0b7552886118943e90b15af31195/mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828", size = 9274701 }, + { url = "https://files.pythonhosted.org/packages/03/bc/f6339726c627bd7ca1ce0fa56c9ae2d0144604a319e0e339bdadafbbb599/mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f", size = 10662338 }, + { url = "https://files.pythonhosted.org/packages/e2/90/8dcf506ca1a09b0d17555cc00cd69aee402c203911410136cd716559efe7/mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5", size = 9787540 }, + { url = "https://files.pythonhosted.org/packages/05/05/a10f9479681e5da09ef2f9426f650d7b550d4bafbef683b69aad1ba87457/mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e", size = 11538051 }, + { url = "https://files.pythonhosted.org/packages/e9/9a/1f7d18b30edd57441a6411fcbc0c6869448d1a4bacbaee60656ac0fc29c8/mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c", size = 12286751 }, + { url = "https://files.pythonhosted.org/packages/72/af/19ff499b6f1dafcaf56f9881f7a965ac2f474f69f6f618b5175b044299f5/mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f", size = 12421783 }, + { url = "https://files.pythonhosted.org/packages/96/39/11b57431a1f686c1aed54bf794870efe0f6aeca11aca281a0bd87a5ad42c/mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f", size = 9265618 }, + { url = "https://files.pythonhosted.org/packages/98/3a/03c74331c5eb8bd025734e04c9840532226775c47a2c39b56a0c8d4f128d/mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd", size = 10793981 }, + { url = "https://files.pythonhosted.org/packages/f0/1a/41759b18f2cfd568848a37c89030aeb03534411eef981df621d8fad08a1d/mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f", size = 9749175 }, + { url = "https://files.pythonhosted.org/packages/12/7e/873481abf1ef112c582db832740f4c11b2bfa510e829d6da29b0ab8c3f9c/mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464", size = 11455675 }, + { url = "https://files.pythonhosted.org/packages/b3/d0/92ae4cde706923a2d3f2d6c39629134063ff64b9dedca9c1388363da072d/mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee", size = 12410020 }, + { url = "https://files.pythonhosted.org/packages/46/8b/df49974b337cce35f828ba6fda228152d6db45fed4c86ba56ffe442434fd/mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e", size = 12498582 }, + { url = "https://files.pythonhosted.org/packages/13/50/da5203fcf6c53044a0b699939f31075c45ae8a4cadf538a9069b165c1050/mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22", size = 9366614 }, + { url = "https://files.pythonhosted.org/packages/6a/9b/fd2e05d6ffff24d912f150b87db9e364fa8282045c875654ce7e32fffa66/mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445", size = 10788592 }, + { url = "https://files.pythonhosted.org/packages/74/37/b246d711c28a03ead1fd906bbc7106659aed7c089d55fe40dd58db812628/mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d", size = 9753611 }, + { url = "https://files.pythonhosted.org/packages/a6/ac/395808a92e10cfdac8003c3de9a2ab6dc7cde6c0d2a4df3df1b815ffd067/mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5", size = 11438443 }, + { url = "https://files.pythonhosted.org/packages/d2/8b/801aa06445d2de3895f59e476f38f3f8d610ef5d6908245f07d002676cbf/mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036", size = 12402541 }, + { url = "https://files.pythonhosted.org/packages/c7/67/5a4268782eb77344cc613a4cf23540928e41f018a9a1ec4c6882baf20ab8/mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357", size = 12494348 }, + { url = "https://files.pythonhosted.org/packages/83/3e/57bb447f7bbbfaabf1712d96f9df142624a386d98fb026a761532526057e/mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf", size = 9373648 }, + { url = "https://files.pythonhosted.org/packages/09/4e/a7d65c7322c510de2c409ff3828b03354a7c43f5a8ed458a7a131b41c7b9/mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e", size = 2221777 }, +] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 }, +] + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, +] + +[[package]] +name = "pluggy" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, +] + +[[package]] +name = "pydantic" +version = "2.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/93/a3/698b87a4d4d303d7c5f62ea5fbf7a79cab236ccfbd0a17847b7f77f8163e/pydantic-2.11.1.tar.gz", hash = "sha256:442557d2910e75c991c39f4b4ab18963d57b9b55122c8b2a9cd176d8c29ce968", size = 782817 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/12/f9221a949f2419e2e23847303c002476c26fbcfd62dc7f3d25d0bec5ca99/pydantic-2.11.1-py3-none-any.whl", hash = "sha256:5b6c415eee9f8123a14d859be0c84363fec6b1feb6b688d6435801230b56e0b8", size = 442648 }, +] + +[[package]] +name = "pydantic-core" +version = "2.33.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/05/91ce14dfd5a3a99555fce436318cc0fd1f08c4daa32b3248ad63669ea8b4/pydantic_core-2.33.0.tar.gz", hash = "sha256:40eb8af662ba409c3cbf4a8150ad32ae73514cd7cb1f1a2113af39763dd616b3", size = 434080 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/43/0649ad07e66b36a3fb21442b425bd0348ac162c5e686b36471f363201535/pydantic_core-2.33.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71dffba8fe9ddff628c68f3abd845e91b028361d43c5f8e7b3f8b91d7d85413e", size = 2042968 }, + { url = "https://files.pythonhosted.org/packages/a0/a6/975fea4774a459e495cb4be288efd8b041ac756a0a763f0b976d0861334b/pydantic_core-2.33.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:abaeec1be6ed535a5d7ffc2e6c390083c425832b20efd621562fbb5bff6dc518", size = 1860347 }, + { url = "https://files.pythonhosted.org/packages/aa/49/7858dadad305101a077ec4d0c606b6425a2b134ea8d858458a6d287fd871/pydantic_core-2.33.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:759871f00e26ad3709efc773ac37b4d571de065f9dfb1778012908bcc36b3a73", size = 1910060 }, + { url = "https://files.pythonhosted.org/packages/8d/4f/6522527911d9c5fe6d76b084d8b388d5c84b09d113247b39f91937500b34/pydantic_core-2.33.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dcfebee69cd5e1c0b76a17e17e347c84b00acebb8dd8edb22d4a03e88e82a207", size = 1997129 }, + { url = "https://files.pythonhosted.org/packages/75/d0/06f396da053e3d73001ea4787e56b4d7132a87c0b5e2e15a041e808c35cd/pydantic_core-2.33.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b1262b912435a501fa04cd213720609e2cefa723a07c92017d18693e69bf00b", size = 2140389 }, + { url = "https://files.pythonhosted.org/packages/f5/6b/b9ff5b69cd4ef007cf665463f3be2e481dc7eb26c4a55b2f57a94308c31a/pydantic_core-2.33.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4726f1f3f42d6a25678c67da3f0b10f148f5655813c5aca54b0d1742ba821b8f", size = 2754237 }, + { url = "https://files.pythonhosted.org/packages/53/80/b4879de375cdf3718d05fcb60c9aa1f119d28e261dafa51b6a69c78f7178/pydantic_core-2.33.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e790954b5093dff1e3a9a2523fddc4e79722d6f07993b4cd5547825c3cbf97b5", size = 2007433 }, + { url = "https://files.pythonhosted.org/packages/46/24/54054713dc0af98a94eab37e0f4294dfd5cd8f70b2ca9dcdccd15709fd7e/pydantic_core-2.33.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:34e7fb3abe375b5c4e64fab75733d605dda0f59827752debc99c17cb2d5f3276", size = 2123980 }, + { url = "https://files.pythonhosted.org/packages/3a/4c/257c1cb89e14cfa6e95ebcb91b308eb1dd2b348340ff76a6e6fcfa9969e1/pydantic_core-2.33.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ecb158fb9b9091b515213bed3061eb7deb1d3b4e02327c27a0ea714ff46b0760", size = 2087433 }, + { url = "https://files.pythonhosted.org/packages/0c/62/927df8a39ad78ef7b82c5446e01dec9bb0043e1ad71d8f426062f5f014db/pydantic_core-2.33.0-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:4d9149e7528af8bbd76cc055967e6e04617dcb2a2afdaa3dea899406c5521faa", size = 2260242 }, + { url = "https://files.pythonhosted.org/packages/74/f2/389414f7c77a100954e84d6f52a82bd1788ae69db72364376d8a73b38765/pydantic_core-2.33.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e81a295adccf73477220e15ff79235ca9dcbcee4be459eb9d4ce9a2763b8386c", size = 2258227 }, + { url = "https://files.pythonhosted.org/packages/53/99/94516313e15d906a1264bb40faf24a01a4af4e2ca8a7c10dd173b6513c5a/pydantic_core-2.33.0-cp310-cp310-win32.whl", hash = "sha256:f22dab23cdbce2005f26a8f0c71698457861f97fc6318c75814a50c75e87d025", size = 1925523 }, + { url = "https://files.pythonhosted.org/packages/7d/67/cc789611c6035a0b71305a1ec6ba196256ced76eba8375f316f840a70456/pydantic_core-2.33.0-cp310-cp310-win_amd64.whl", hash = "sha256:9cb2390355ba084c1ad49485d18449b4242da344dea3e0fe10babd1f0db7dcfc", size = 1951872 }, + { url = "https://files.pythonhosted.org/packages/f0/93/9e97af2619b4026596487a79133e425c7d3c374f0a7f100f3d76bcdf9c83/pydantic_core-2.33.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a608a75846804271cf9c83e40bbb4dab2ac614d33c6fd5b0c6187f53f5c593ef", size = 2042784 }, + { url = "https://files.pythonhosted.org/packages/42/b4/0bba8412fd242729feeb80e7152e24f0e1a1c19f4121ca3d4a307f4e6222/pydantic_core-2.33.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e1c69aa459f5609dec2fa0652d495353accf3eda5bdb18782bc5a2ae45c9273a", size = 1858179 }, + { url = "https://files.pythonhosted.org/packages/69/1f/c1c40305d929bd08af863df64b0a26203b70b352a1962d86f3bcd52950fe/pydantic_core-2.33.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9ec80eb5a5f45a2211793f1c4aeddff0c3761d1c70d684965c1807e923a588b", size = 1909396 }, + { url = "https://files.pythonhosted.org/packages/0f/99/d2e727375c329c1e652b5d450fbb9d56e8c3933a397e4bd46e67c68c2cd5/pydantic_core-2.33.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e925819a98318d17251776bd3d6aa9f3ff77b965762155bdad15d1a9265c4cfd", size = 1998264 }, + { url = "https://files.pythonhosted.org/packages/9c/2e/3119a33931278d96ecc2e9e1b9d50c240636cfeb0c49951746ae34e4de74/pydantic_core-2.33.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bf68bb859799e9cec3d9dd8323c40c00a254aabb56fe08f907e437005932f2b", size = 2140588 }, + { url = "https://files.pythonhosted.org/packages/35/bd/9267bd1ba55f17c80ef6cb7e07b3890b4acbe8eb6014f3102092d53d9300/pydantic_core-2.33.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b2ea72dea0825949a045fa4071f6d5b3d7620d2a208335207793cf29c5a182d", size = 2746296 }, + { url = "https://files.pythonhosted.org/packages/6f/ed/ef37de6478a412ee627cbebd73e7b72a680f45bfacce9ff1199de6e17e88/pydantic_core-2.33.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1583539533160186ac546b49f5cde9ffc928062c96920f58bd95de32ffd7bffd", size = 2005555 }, + { url = "https://files.pythonhosted.org/packages/dd/84/72c8d1439585d8ee7bc35eb8f88a04a4d302ee4018871f1f85ae1b0c6625/pydantic_core-2.33.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:23c3e77bf8a7317612e5c26a3b084c7edeb9552d645742a54a5867635b4f2453", size = 2124452 }, + { url = "https://files.pythonhosted.org/packages/a7/8f/cb13de30c6a3e303423751a529a3d1271c2effee4b98cf3e397a66ae8498/pydantic_core-2.33.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a7a7f2a3f628d2f7ef11cb6188bcf0b9e1558151d511b974dfea10a49afe192b", size = 2087001 }, + { url = "https://files.pythonhosted.org/packages/83/d0/e93dc8884bf288a63fedeb8040ac8f29cb71ca52e755f48e5170bb63e55b/pydantic_core-2.33.0-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:f1fb026c575e16f673c61c7b86144517705865173f3d0907040ac30c4f9f5915", size = 2261663 }, + { url = "https://files.pythonhosted.org/packages/4c/ba/4b7739c95efa0b542ee45fd872c8f6b1884ab808cf04ce7ac6621b6df76e/pydantic_core-2.33.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:635702b2fed997e0ac256b2cfbdb4dd0bf7c56b5d8fba8ef03489c03b3eb40e2", size = 2257786 }, + { url = "https://files.pythonhosted.org/packages/cc/98/73cbca1d2360c27752cfa2fcdcf14d96230e92d7d48ecd50499865c56bf7/pydantic_core-2.33.0-cp311-cp311-win32.whl", hash = "sha256:07b4ced28fccae3f00626eaa0c4001aa9ec140a29501770a88dbbb0966019a86", size = 1925697 }, + { url = "https://files.pythonhosted.org/packages/9a/26/d85a40edeca5d8830ffc33667d6fef329fd0f4bc0c5181b8b0e206cfe488/pydantic_core-2.33.0-cp311-cp311-win_amd64.whl", hash = "sha256:4927564be53239a87770a5f86bdc272b8d1fbb87ab7783ad70255b4ab01aa25b", size = 1949859 }, + { url = "https://files.pythonhosted.org/packages/7e/0b/5a381605f0b9870465b805f2c86c06b0a7c191668ebe4117777306c2c1e5/pydantic_core-2.33.0-cp311-cp311-win_arm64.whl", hash = "sha256:69297418ad644d521ea3e1aa2e14a2a422726167e9ad22b89e8f1130d68e1e9a", size = 1907978 }, + { url = "https://files.pythonhosted.org/packages/a9/c4/c9381323cbdc1bb26d352bc184422ce77c4bc2f2312b782761093a59fafc/pydantic_core-2.33.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6c32a40712e3662bebe524abe8abb757f2fa2000028d64cc5a1006016c06af43", size = 2025127 }, + { url = "https://files.pythonhosted.org/packages/6f/bd/af35278080716ecab8f57e84515c7dc535ed95d1c7f52c1c6f7b313a9dab/pydantic_core-2.33.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ec86b5baa36f0a0bfb37db86c7d52652f8e8aa076ab745ef7725784183c3fdd", size = 1851687 }, + { url = "https://files.pythonhosted.org/packages/12/e4/a01461225809c3533c23bd1916b1e8c2e21727f0fea60ab1acbffc4e2fca/pydantic_core-2.33.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4deac83a8cc1d09e40683be0bc6d1fa4cde8df0a9bf0cda5693f9b0569ac01b6", size = 1892232 }, + { url = "https://files.pythonhosted.org/packages/51/17/3d53d62a328fb0a49911c2962036b9e7a4f781b7d15e9093c26299e5f76d/pydantic_core-2.33.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:175ab598fb457a9aee63206a1993874badf3ed9a456e0654273e56f00747bbd6", size = 1977896 }, + { url = "https://files.pythonhosted.org/packages/30/98/01f9d86e02ec4a38f4b02086acf067f2c776b845d43f901bd1ee1c21bc4b/pydantic_core-2.33.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f36afd0d56a6c42cf4e8465b6441cf546ed69d3a4ec92724cc9c8c61bd6ecf4", size = 2127717 }, + { url = "https://files.pythonhosted.org/packages/3c/43/6f381575c61b7c58b0fd0b92134c5a1897deea4cdfc3d47567b3ff460a4e/pydantic_core-2.33.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a98257451164666afafc7cbf5fb00d613e33f7e7ebb322fbcd99345695a9a61", size = 2680287 }, + { url = "https://files.pythonhosted.org/packages/01/42/c0d10d1451d161a9a0da9bbef023b8005aa26e9993a8cc24dc9e3aa96c93/pydantic_core-2.33.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecc6d02d69b54a2eb83ebcc6f29df04957f734bcf309d346b4f83354d8376862", size = 2008276 }, + { url = "https://files.pythonhosted.org/packages/20/ca/e08df9dba546905c70bae44ced9f3bea25432e34448d95618d41968f40b7/pydantic_core-2.33.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a69b7596c6603afd049ce7f3835bcf57dd3892fc7279f0ddf987bebed8caa5a", size = 2115305 }, + { url = "https://files.pythonhosted.org/packages/03/1f/9b01d990730a98833113581a78e595fd40ed4c20f9693f5a658fb5f91eff/pydantic_core-2.33.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea30239c148b6ef41364c6f51d103c2988965b643d62e10b233b5efdca8c0099", size = 2068999 }, + { url = "https://files.pythonhosted.org/packages/20/18/fe752476a709191148e8b1e1139147841ea5d2b22adcde6ee6abb6c8e7cf/pydantic_core-2.33.0-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:abfa44cf2f7f7d7a199be6c6ec141c9024063205545aa09304349781b9a125e6", size = 2241488 }, + { url = "https://files.pythonhosted.org/packages/81/22/14738ad0a0bf484b928c9e52004f5e0b81dd8dabbdf23b843717b37a71d1/pydantic_core-2.33.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:20d4275f3c4659d92048c70797e5fdc396c6e4446caf517ba5cad2db60cd39d3", size = 2248430 }, + { url = "https://files.pythonhosted.org/packages/e8/27/be7571e215ac8d321712f2433c445b03dbcd645366a18f67b334df8912bc/pydantic_core-2.33.0-cp312-cp312-win32.whl", hash = "sha256:918f2013d7eadea1d88d1a35fd4a1e16aaf90343eb446f91cb091ce7f9b431a2", size = 1908353 }, + { url = "https://files.pythonhosted.org/packages/be/3a/be78f28732f93128bd0e3944bdd4b3970b389a1fbd44907c97291c8dcdec/pydantic_core-2.33.0-cp312-cp312-win_amd64.whl", hash = "sha256:aec79acc183865bad120b0190afac467c20b15289050648b876b07777e67ea48", size = 1955956 }, + { url = "https://files.pythonhosted.org/packages/21/26/b8911ac74faa994694b76ee6a22875cc7a4abea3c381fdba4edc6c6bef84/pydantic_core-2.33.0-cp312-cp312-win_arm64.whl", hash = "sha256:5461934e895968655225dfa8b3be79e7e927e95d4bd6c2d40edd2fa7052e71b6", size = 1903259 }, + { url = "https://files.pythonhosted.org/packages/79/20/de2ad03ce8f5b3accf2196ea9b44f31b0cd16ac6e8cfc6b21976ed45ec35/pydantic_core-2.33.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f00e8b59e1fc8f09d05594aa7d2b726f1b277ca6155fc84c0396db1b373c4555", size = 2032214 }, + { url = "https://files.pythonhosted.org/packages/f9/af/6817dfda9aac4958d8b516cbb94af507eb171c997ea66453d4d162ae8948/pydantic_core-2.33.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1a73be93ecef45786d7d95b0c5e9b294faf35629d03d5b145b09b81258c7cd6d", size = 1852338 }, + { url = "https://files.pythonhosted.org/packages/44/f3/49193a312d9c49314f2b953fb55740b7c530710977cabe7183b8ef111b7f/pydantic_core-2.33.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff48a55be9da6930254565ff5238d71d5e9cd8c5487a191cb85df3bdb8c77365", size = 1896913 }, + { url = "https://files.pythonhosted.org/packages/06/e0/c746677825b2e29a2fa02122a8991c83cdd5b4c5f638f0664d4e35edd4b2/pydantic_core-2.33.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26a4ea04195638dcd8c53dadb545d70badba51735b1594810e9768c2c0b4a5da", size = 1986046 }, + { url = "https://files.pythonhosted.org/packages/11/ec/44914e7ff78cef16afb5e5273d480c136725acd73d894affdbe2a1bbaad5/pydantic_core-2.33.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41d698dcbe12b60661f0632b543dbb119e6ba088103b364ff65e951610cb7ce0", size = 2128097 }, + { url = "https://files.pythonhosted.org/packages/fe/f5/c6247d424d01f605ed2e3802f338691cae17137cee6484dce9f1ac0b872b/pydantic_core-2.33.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae62032ef513fe6281ef0009e30838a01057b832dc265da32c10469622613885", size = 2681062 }, + { url = "https://files.pythonhosted.org/packages/f0/85/114a2113b126fdd7cf9a9443b1b1fe1b572e5bd259d50ba9d5d3e1927fa9/pydantic_core-2.33.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f225f3a3995dbbc26affc191d0443c6c4aa71b83358fd4c2b7d63e2f6f0336f9", size = 2007487 }, + { url = "https://files.pythonhosted.org/packages/e6/40/3c05ed28d225c7a9acd2b34c5c8010c279683a870219b97e9f164a5a8af0/pydantic_core-2.33.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5bdd36b362f419c78d09630cbaebc64913f66f62bda6d42d5fbb08da8cc4f181", size = 2121382 }, + { url = "https://files.pythonhosted.org/packages/8a/22/e70c086f41eebd323e6baa92cc906c3f38ddce7486007eb2bdb3b11c8f64/pydantic_core-2.33.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2a0147c0bef783fd9abc9f016d66edb6cac466dc54a17ec5f5ada08ff65caf5d", size = 2072473 }, + { url = "https://files.pythonhosted.org/packages/3e/84/d1614dedd8fe5114f6a0e348bcd1535f97d76c038d6102f271433cd1361d/pydantic_core-2.33.0-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:c860773a0f205926172c6644c394e02c25421dc9a456deff16f64c0e299487d3", size = 2249468 }, + { url = "https://files.pythonhosted.org/packages/b0/c0/787061eef44135e00fddb4b56b387a06c303bfd3884a6df9bea5cb730230/pydantic_core-2.33.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:138d31e3f90087f42aa6286fb640f3c7a8eb7bdae829418265e7e7474bd2574b", size = 2254716 }, + { url = "https://files.pythonhosted.org/packages/ae/e2/27262eb04963201e89f9c280f1e10c493a7a37bc877e023f31aa72d2f911/pydantic_core-2.33.0-cp313-cp313-win32.whl", hash = "sha256:d20cbb9d3e95114325780f3cfe990f3ecae24de7a2d75f978783878cce2ad585", size = 1916450 }, + { url = "https://files.pythonhosted.org/packages/13/8d/25ff96f1e89b19e0b70b3cd607c9ea7ca27e1dcb810a9cd4255ed6abf869/pydantic_core-2.33.0-cp313-cp313-win_amd64.whl", hash = "sha256:ca1103d70306489e3d006b0f79db8ca5dd3c977f6f13b2c59ff745249431a606", size = 1956092 }, + { url = "https://files.pythonhosted.org/packages/1b/64/66a2efeff657b04323ffcd7b898cb0354d36dae3a561049e092134a83e9c/pydantic_core-2.33.0-cp313-cp313-win_arm64.whl", hash = "sha256:6291797cad239285275558e0a27872da735b05c75d5237bbade8736f80e4c225", size = 1908367 }, + { url = "https://files.pythonhosted.org/packages/52/54/295e38769133363d7ec4a5863a4d579f331728c71a6644ff1024ee529315/pydantic_core-2.33.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7b79af799630af263eca9ec87db519426d8c9b3be35016eddad1832bac812d87", size = 1813331 }, + { url = "https://files.pythonhosted.org/packages/4c/9c/0c8ea02db8d682aa1ef48938abae833c1d69bdfa6e5ec13b21734b01ae70/pydantic_core-2.33.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eabf946a4739b5237f4f56d77fa6668263bc466d06a8036c055587c130a46f7b", size = 1986653 }, + { url = "https://files.pythonhosted.org/packages/8e/4f/3fb47d6cbc08c7e00f92300e64ba655428c05c56b8ab6723bd290bae6458/pydantic_core-2.33.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8a1d581e8cdbb857b0e0e81df98603376c1a5c34dc5e54039dcc00f043df81e7", size = 1931234 }, + { url = "https://files.pythonhosted.org/packages/44/77/85e173b715e1a277ce934f28d877d82492df13e564fa68a01c96f36a47ad/pydantic_core-2.33.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e2762c568596332fdab56b07060c8ab8362c56cf2a339ee54e491cd503612c50", size = 2040129 }, + { url = "https://files.pythonhosted.org/packages/33/e7/33da5f8a94bbe2191cfcd15bd6d16ecd113e67da1b8c78d3cc3478112dab/pydantic_core-2.33.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5bf637300ff35d4f59c006fff201c510b2b5e745b07125458a5389af3c0dff8c", size = 1872656 }, + { url = "https://files.pythonhosted.org/packages/b4/7a/9600f222bea840e5b9ba1f17c0acc79b669b24542a78c42c6a10712c0aae/pydantic_core-2.33.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c151ce3d59ed56ebd7ce9ce5986a409a85db697d25fc232f8e81f195aa39a1", size = 1903731 }, + { url = "https://files.pythonhosted.org/packages/81/d2/94c7ca4e24c5dcfb74df92e0836c189e9eb6814cf62d2f26a75ea0a906db/pydantic_core-2.33.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee65f0cc652261744fd07f2c6e6901c914aa6c5ff4dcfaf1136bc394d0dd26b", size = 2083966 }, + { url = "https://files.pythonhosted.org/packages/b8/74/a0259989d220e8865ed6866a6d40539e40fa8f507e587e35d2414cc081f8/pydantic_core-2.33.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:024d136ae44d233e6322027bbf356712b3940bee816e6c948ce4b90f18471b3d", size = 2118951 }, + { url = "https://files.pythonhosted.org/packages/13/4c/87405ed04d6d07597920b657f082a8e8e58bf3034178bb9044b4d57a91e2/pydantic_core-2.33.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e37f10f6d4bc67c58fbd727108ae1d8b92b397355e68519f1e4a7babb1473442", size = 2079632 }, + { url = "https://files.pythonhosted.org/packages/5a/4c/bcb02970ef91d4cd6de7c6893101302637da456bc8b52c18ea0d047b55ce/pydantic_core-2.33.0-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:502ed542e0d958bd12e7c3e9a015bce57deaf50eaa8c2e1c439b512cb9db1e3a", size = 2250541 }, + { url = "https://files.pythonhosted.org/packages/a3/2b/dbe5450c4cd904be5da736dcc7f2357b828199e29e38de19fc81f988b288/pydantic_core-2.33.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:715c62af74c236bf386825c0fdfa08d092ab0f191eb5b4580d11c3189af9d330", size = 2255685 }, + { url = "https://files.pythonhosted.org/packages/ca/a6/ca1d35f695d81f639c5617fc9efb44caad21a9463383fa45364b3044175a/pydantic_core-2.33.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bccc06fa0372151f37f6b69834181aa9eb57cf8665ed36405fb45fbf6cac3bae", size = 2082395 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/553e42762e7b08771fca41c0230c1ac276f9e79e78f57628e1b7d328551d/pydantic_core-2.33.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5d8dc9f63a26f7259b57f46a7aab5af86b2ad6fbe48487500bb1f4b27e051e4c", size = 2041207 }, + { url = "https://files.pythonhosted.org/packages/85/81/a91a57bbf3efe53525ab75f65944b8950e6ef84fe3b9a26c1ec173363263/pydantic_core-2.33.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:30369e54d6d0113d2aa5aee7a90d17f225c13d87902ace8fcd7bbf99b19124db", size = 1873736 }, + { url = "https://files.pythonhosted.org/packages/9c/d2/5ab52e9f551cdcbc1ee99a0b3ef595f56d031f66f88e5ca6726c49f9ce65/pydantic_core-2.33.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3eb479354c62067afa62f53bb387827bee2f75c9c79ef25eef6ab84d4b1ae3b", size = 1903794 }, + { url = "https://files.pythonhosted.org/packages/2f/5f/a81742d3f3821b16f1265f057d6e0b68a3ab13a814fe4bffac536a1f26fd/pydantic_core-2.33.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0310524c833d91403c960b8a3cf9f46c282eadd6afd276c8c5edc617bd705dc9", size = 2083457 }, + { url = "https://files.pythonhosted.org/packages/b5/2f/e872005bc0fc47f9c036b67b12349a8522d32e3bda928e82d676e2a594d1/pydantic_core-2.33.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eddb18a00bbb855325db27b4c2a89a4ba491cd6a0bd6d852b225172a1f54b36c", size = 2119537 }, + { url = "https://files.pythonhosted.org/packages/d3/13/183f13ce647202eaf3dada9e42cdfc59cbb95faedd44d25f22b931115c7f/pydantic_core-2.33.0-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ade5dbcf8d9ef8f4b28e682d0b29f3008df9842bb5ac48ac2c17bc55771cc976", size = 2080069 }, + { url = "https://files.pythonhosted.org/packages/23/8b/b6be91243da44a26558d9c3a9007043b3750334136c6550551e8092d6d96/pydantic_core-2.33.0-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:2c0afd34f928383e3fd25740f2050dbac9d077e7ba5adbaa2227f4d4f3c8da5c", size = 2251618 }, + { url = "https://files.pythonhosted.org/packages/aa/c5/fbcf1977035b834f63eb542e74cd6c807177f383386175b468f0865bcac4/pydantic_core-2.33.0-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7da333f21cd9df51d5731513a6d39319892947604924ddf2e24a4612975fb936", size = 2255374 }, + { url = "https://files.pythonhosted.org/packages/2f/f8/66f328e411f1c9574b13c2c28ab01f308b53688bbbe6ca8fb981e6cabc42/pydantic_core-2.33.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:4b6d77c75a57f041c5ee915ff0b0bb58eabb78728b69ed967bc5b780e8f701b8", size = 2082099 }, +] + +[[package]] +name = "pystapi" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "stapi-pydantic" }, +] + +[package.dev-dependencies] +dev = [ + { name = "mypy" }, + { name = "pytest" }, + { name = "ruff" }, +] + +[package.metadata] +requires-dist = [{ name = "stapi-pydantic", editable = "stapi-pydantic" }] + +[package.metadata.requires-dev] +dev = [ + { name = "mypy", specifier = ">=1.15.0" }, + { name = "pytest", specifier = ">=8.3.5" }, + { name = "ruff", specifier = ">=0.11.2" }, +] + +[[package]] +name = "pytest" +version = "8.3.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/3c/c9d525a414d506893f0cd8a8d0de7706446213181570cdbd766691164e40/pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845", size = 1450891 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size = 343634 }, +] + +[[package]] +name = "ruff" +version = "0.11.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/61/fb87430f040e4e577e784e325351186976516faef17d6fcd921fe28edfd7/ruff-0.11.2.tar.gz", hash = "sha256:ec47591497d5a1050175bdf4e1a4e6272cddff7da88a2ad595e1e326041d8d94", size = 3857511 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/99/102578506f0f5fa29fd7e0df0a273864f79af044757aef73d1cae0afe6ad/ruff-0.11.2-py3-none-linux_armv6l.whl", hash = "sha256:c69e20ea49e973f3afec2c06376eb56045709f0212615c1adb0eda35e8a4e477", size = 10113146 }, + { url = "https://files.pythonhosted.org/packages/74/ad/5cd4ba58ab602a579997a8494b96f10f316e874d7c435bcc1a92e6da1b12/ruff-0.11.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2c5424cc1c4eb1d8ecabe6d4f1b70470b4f24a0c0171356290b1953ad8f0e272", size = 10867092 }, + { url = "https://files.pythonhosted.org/packages/fc/3e/d3f13619e1d152c7b600a38c1a035e833e794c6625c9a6cea6f63dbf3af4/ruff-0.11.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:ecf20854cc73f42171eedb66f006a43d0a21bfb98a2523a809931cda569552d9", size = 10224082 }, + { url = "https://files.pythonhosted.org/packages/90/06/f77b3d790d24a93f38e3806216f263974909888fd1e826717c3ec956bbcd/ruff-0.11.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c543bf65d5d27240321604cee0633a70c6c25c9a2f2492efa9f6d4b8e4199bb", size = 10394818 }, + { url = "https://files.pythonhosted.org/packages/99/7f/78aa431d3ddebfc2418cd95b786642557ba8b3cb578c075239da9ce97ff9/ruff-0.11.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20967168cc21195db5830b9224be0e964cc9c8ecf3b5a9e3ce19876e8d3a96e3", size = 9952251 }, + { url = "https://files.pythonhosted.org/packages/30/3e/f11186d1ddfaca438c3bbff73c6a2fdb5b60e6450cc466129c694b0ab7a2/ruff-0.11.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:955a9ce63483999d9f0b8f0b4a3ad669e53484232853054cc8b9d51ab4c5de74", size = 11563566 }, + { url = "https://files.pythonhosted.org/packages/22/6c/6ca91befbc0a6539ee133d9a9ce60b1a354db12c3c5d11cfdbf77140f851/ruff-0.11.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:86b3a27c38b8fce73bcd262b0de32e9a6801b76d52cdb3ae4c914515f0cef608", size = 12208721 }, + { url = "https://files.pythonhosted.org/packages/19/b0/24516a3b850d55b17c03fc399b681c6a549d06ce665915721dc5d6458a5c/ruff-0.11.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3b66a03b248c9fcd9d64d445bafdf1589326bee6fc5c8e92d7562e58883e30f", size = 11662274 }, + { url = "https://files.pythonhosted.org/packages/d7/65/76be06d28ecb7c6070280cef2bcb20c98fbf99ff60b1c57d2fb9b8771348/ruff-0.11.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0397c2672db015be5aa3d4dac54c69aa012429097ff219392c018e21f5085147", size = 13792284 }, + { url = "https://files.pythonhosted.org/packages/ce/d2/4ceed7147e05852876f3b5f3fdc23f878ce2b7e0b90dd6e698bda3d20787/ruff-0.11.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:869bcf3f9abf6457fbe39b5a37333aa4eecc52a3b99c98827ccc371a8e5b6f1b", size = 11327861 }, + { url = "https://files.pythonhosted.org/packages/c4/78/4935ecba13706fd60ebe0e3dc50371f2bdc3d9bc80e68adc32ff93914534/ruff-0.11.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2a2b50ca35457ba785cd8c93ebbe529467594087b527a08d487cf0ee7b3087e9", size = 10276560 }, + { url = "https://files.pythonhosted.org/packages/81/7f/1b2435c3f5245d410bb5dc80f13ec796454c21fbda12b77d7588d5cf4e29/ruff-0.11.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7c69c74bf53ddcfbc22e6eb2f31211df7f65054bfc1f72288fc71e5f82db3eab", size = 9945091 }, + { url = "https://files.pythonhosted.org/packages/39/c4/692284c07e6bf2b31d82bb8c32f8840f9d0627d92983edaac991a2b66c0a/ruff-0.11.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6e8fb75e14560f7cf53b15bbc55baf5ecbe373dd5f3aab96ff7aa7777edd7630", size = 10977133 }, + { url = "https://files.pythonhosted.org/packages/94/cf/8ab81cb7dd7a3b0a3960c2769825038f3adcd75faf46dd6376086df8b128/ruff-0.11.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:842a472d7b4d6f5924e9297aa38149e5dcb1e628773b70e6387ae2c97a63c58f", size = 11378514 }, + { url = "https://files.pythonhosted.org/packages/d9/3a/a647fa4f316482dacf2fd68e8a386327a33d6eabd8eb2f9a0c3d291ec549/ruff-0.11.2-py3-none-win32.whl", hash = "sha256:aca01ccd0eb5eb7156b324cfaa088586f06a86d9e5314b0eb330cb48415097cc", size = 10319835 }, + { url = "https://files.pythonhosted.org/packages/86/54/3c12d3af58012a5e2cd7ebdbe9983f4834af3f8cbea0e8a8c74fa1e23b2b/ruff-0.11.2-py3-none-win_amd64.whl", hash = "sha256:3170150172a8f994136c0c66f494edf199a0bbea7a409f649e4bc8f4d7084080", size = 11373713 }, + { url = "https://files.pythonhosted.org/packages/d6/d4/dd813703af8a1e2ac33bf3feb27e8a5ad514c9f219df80c64d69807e7f71/ruff-0.11.2-py3-none-win_arm64.whl", hash = "sha256:52933095158ff328f4c77af3d74f0379e34fd52f175144cefc1b192e7ccd32b4", size = 10441990 }, +] + +[[package]] +name = "stapi-pydantic" +version = "0.0.1" +source = { editable = "stapi-pydantic" } +dependencies = [ + { name = "cql2" }, + { name = "geojson-pydantic" }, +] + +[package.metadata] +requires-dist = [ + { name = "cql2", specifier = ">=0.3.6" }, + { name = "geojson-pydantic", specifier = ">=1.2.0" }, +] + +[[package]] +name = "tomli" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708 }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582 }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543 }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691 }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170 }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530 }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666 }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954 }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724 }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383 }, + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, +] + +[[package]] +name = "typing-extensions" +version = "4.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0e/3e/b00a62db91a83fff600de219b6ea9908e6918664899a2d85db222f4fbf19/typing_extensions-4.13.0.tar.gz", hash = "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", size = 106520 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/86/39b65d676ec5732de17b7e3c476e45bb80ec64eb50737a8dce1a4178aba1/typing_extensions-4.13.0-py3-none-any.whl", hash = "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5", size = 45683 }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/5c/e6082df02e215b846b4b8c0b887a64d7d08ffaba30605502639d44c06b82/typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122", size = 76222 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", size = 14125 }, +]