From 00651a323ddc9610eaab428e7c8386df8e24b3b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20K=C3=B6tter?= Date: Mon, 10 Nov 2025 08:18:00 +0100 Subject: [PATCH 1/8] fix - pydantic model_validator("after")/classmethod deprecation pydantic.warnings.PydanticDeprecatedSince212: Using `@model_validator` with mode='after' on a classmethod is deprecated. Instead, use an instance method. See the documentation at https://docs.pydantic.dev/2.12/concepts/validators/#model-after-validator. Deprecated in Pydantic V2.12 to be removed in V3.0. --- src/aiopenapi3/v30/parameter.py | 8 +++++--- src/aiopenapi3/v30/paths.py | 17 ++++++++--------- src/aiopenapi3/v30/schemas.py | 11 +++++------ src/aiopenapi3/v30/servers.py | 8 ++++---- src/aiopenapi3/v31/info.py | 7 +++---- src/aiopenapi3/v31/paths.py | 16 ++++++++-------- src/aiopenapi3/v31/root.py | 7 +++---- src/aiopenapi3/v31/schemas.py | 11 +++++------ src/aiopenapi3/v31/servers.py | 8 ++++---- 9 files changed, 45 insertions(+), 48 deletions(-) diff --git a/src/aiopenapi3/v30/parameter.py b/src/aiopenapi3/v30/parameter.py index 365796c5..8c8cf591 100644 --- a/src/aiopenapi3/v30/parameter.py +++ b/src/aiopenapi3/v30/parameter.py @@ -316,9 +316,11 @@ class Parameter(ParameterBase, _ParameterCodec): in_: _In = Field(alias="in") # TODO must be one of ["query","header","path","cookie"] @model_validator(mode="after") - def validate_Parameter(cls, p: "ParameterBase"): - assert p.in_ != "path" or p.required is True, "Parameter '%s' must be required since it is in the path" % p.name - return p + def validate_Parameter(self): + assert self.in_ != "path" or self.required is True, ( + "Parameter '%s' must be required since it is in the path" % self.name + ) + return self def encode_parameter( diff --git a/src/aiopenapi3/v30/paths.py b/src/aiopenapi3/v30/paths.py index c08e8a66..2542bf93 100644 --- a/src/aiopenapi3/v30/paths.py +++ b/src/aiopenapi3/v30/paths.py @@ -38,15 +38,14 @@ class Link(ObjectExtended): server: Server | None = Field(default=None) @model_validator(mode="after") - @classmethod - def validate_Link_operation(cls, l: '__types["Link"]'): # noqa: F821 - assert not (l.operationId is not None and l.operationRef is not None), ( - "operationId and operationRef are mutually exclusive, only one of them is allowed" - ) - assert not (l.operationId == l.operationRef is None), ( - "operationId and operationRef are mutually exclusive, one of them must be specified" - ) - return l + def validate_Link_operation(self): # type: ignore[name-defined] + assert not ( + self.operationId != None and self.operationRef != None + ), "operationId and operationRef are mutually exclusive, only one of them is allowed" + assert not ( + self.operationId == self.operationRef == None + ), "operationId and operationRef are mutually exclusive, one of them must be specified" + return self class Response(ObjectExtended): diff --git a/src/aiopenapi3/v30/schemas.py b/src/aiopenapi3/v30/schemas.py index f84838af..c901ab76 100644 --- a/src/aiopenapi3/v30/schemas.py +++ b/src/aiopenapi3/v30/schemas.py @@ -74,13 +74,12 @@ def is_boolean_schema(cls, data: Any) -> Any: return {"not": {}} @model_validator(mode="after") - @classmethod - def validate_Schema_number_type(cls, s: "Schema"): - if s.type == "integer": + def validate_Schema_number_type(self): + if self.type == "integer": for i in ["minimum", "maximum"]: - if (v := getattr(s, i, None)) is not None and not isinstance(v, int): - setattr(s, i, int(v)) - return s + if (v := getattr(self, i, None)) is not None and not isinstance(v, int): + setattr(self, i, int(v)) + return self def __getstate__(self): return SchemaBase.__getstate__(self) diff --git a/src/aiopenapi3/v30/servers.py b/src/aiopenapi3/v30/servers.py index 14a5f50c..635e37a0 100644 --- a/src/aiopenapi3/v30/servers.py +++ b/src/aiopenapi3/v30/servers.py @@ -17,11 +17,11 @@ class ServerVariable(ObjectExtended): description: str | None = Field(default=None) @model_validator(mode="after") - def validate_ServerVariable(cls, s: "ServerVariable"): - assert isinstance(s.enum, (list, None.__class__)) + def validate_ServerVariable(self): + assert isinstance(self.enum, (list, None.__class__)) # default value must be in enum - assert s.default is None or s.default in (s.enum or [s.default]) - return s + assert self.default is None or self.default in (self.enum or [self.default]) + return self class Server(ObjectExtended): diff --git a/src/aiopenapi3/v31/info.py b/src/aiopenapi3/v31/info.py index 0f0d2147..ee7c5c17 100644 --- a/src/aiopenapi3/v31/info.py +++ b/src/aiopenapi3/v31/info.py @@ -27,13 +27,12 @@ class License(ObjectExtended): url: str | None = Field(default=None) @model_validator(mode="after") - @classmethod - def validate_License(cls, l: "License"): + def validate_License(self): """ A URL to the license used for the API. This MUST be in the form of a URL. The url field is mutually exclusive of the identifier field. """ - assert not all([getattr(l, i, None) is not None for i in ["identifier", "url"]]) - return l + assert not all([getattr(self, i, None) is not None for i in ["identifier", "url"]]) + return self class Info(ObjectExtended): diff --git a/src/aiopenapi3/v31/paths.py b/src/aiopenapi3/v31/paths.py index 70a3c0c6..1d798a70 100644 --- a/src/aiopenapi3/v31/paths.py +++ b/src/aiopenapi3/v31/paths.py @@ -38,14 +38,14 @@ class Link(ObjectExtended): server: Server | None = Field(default=None) @model_validator(mode="after") - def validate_Link_operation(cls, l: '__types["Link"]'): # noqa: F821 - assert not (l.operationId is not None and l.operationRef is not None), ( - "operationId and operationRef are mutually exclusive, only one of them is allowed" - ) - assert not (l.operationId == l.operationRef is None), ( - "operationId and operationRef are mutually exclusive, one of them must be specified" - ) - return l + def validate_Link_operation(self): # type: ignore[name-defined] + assert not ( + self.operationId != None and self.operationRef != None + ), "operationId and operationRef are mutually exclusive, only one of them is allowed" + assert not ( + self.operationId == self.operationRef == None + ), "operationId and operationRef are mutually exclusive, one of them must be specified" + return self class Response(ObjectExtended): diff --git a/src/aiopenapi3/v31/root.py b/src/aiopenapi3/v31/root.py index ebc502b3..e2f9272b 100644 --- a/src/aiopenapi3/v31/root.py +++ b/src/aiopenapi3/v31/root.py @@ -35,10 +35,9 @@ class Root(ObjectExtended, RootBase): externalDocs: dict[Any, Any] = Field(default_factory=dict) @model_validator(mode="after") - @classmethod - def validate_Root(cls, r: "Root") -> "Self": # noqa: F821 - assert r.paths or r.components or r.webhooks - return r + def validate_Root(self) -> "Self": + assert self.paths or self.components or self.webhooks + return self def _resolve_references(self, api): RootBase.resolve(api, self, self, PathItem, Reference) diff --git a/src/aiopenapi3/v31/schemas.py b/src/aiopenapi3/v31/schemas.py index 71af0cca..91c8ebdb 100644 --- a/src/aiopenapi3/v31/schemas.py +++ b/src/aiopenapi3/v31/schemas.py @@ -172,13 +172,12 @@ def is_boolean_schema(cls, data: Any) -> Any: return {"not": {}} @model_validator(mode="after") - @classmethod - def validate_Schema_number_type(cls, s: "Schema"): - if s.type == "integer": + def validate_Schema_number_type(self): + if self.type == "integer": for i in ["minimum", "maximum"]: - if (v := getattr(s, i, None)) is not None and not isinstance(v, int): - setattr(s, i, int(v)) - return s + if (v := getattr(self, i, None)) is not None and not isinstance(v, int): + setattr(self, i, int(v)) + return self def __getstate__(self): return SchemaBase.__getstate__(self) diff --git a/src/aiopenapi3/v31/servers.py b/src/aiopenapi3/v31/servers.py index 3a32f04b..de74372f 100644 --- a/src/aiopenapi3/v31/servers.py +++ b/src/aiopenapi3/v31/servers.py @@ -17,11 +17,11 @@ class ServerVariable(ObjectExtended): description: str | None = Field(default=None) @model_validator(mode="after") - def validate_ServerVariable(cls, s: "ServerVariable"): - assert isinstance(s.enum, (list, None.__class__)) + def validate_ServerVariable(self): + assert isinstance(self.enum, (list, None.__class__)) # default value must be in enum - assert s.default is None or s.default in (s.enum or [s.default]) - return s + assert self.default is None or self.default in (self.enum or [self.default]) + return self class Server(ObjectExtended): From dd8706fb3ce5efee6574f1ced22e816c8727e6af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20K=C3=B6tter?= Date: Fri, 14 Nov 2025 09:42:25 +0100 Subject: [PATCH 2/8] tests - FastAPI dropping -Input and pydantic 2.13 adjustments --- tests/apiv2_test.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/apiv2_test.py b/tests/apiv2_test.py index 11aa032f..8ab66f24 100644 --- a/tests/apiv2_test.py +++ b/tests/apiv2_test.py @@ -125,9 +125,9 @@ async def test_model(server, client): def randomPet(client, name=None, cat=False): if name: - Pet = client.components.schemas["Pet-Input"].get_type() + Pet = client.components.schemas["Pet"].get_type() if not cat: - Dog = typing.get_args(typing.get_args(Pet.model_fields["root"].annotation)[0])[1] + Dog = typing.get_args(Pet.model_fields["root"].annotation)[1] dog = Dog( name=name, age=datetime.timedelta(seconds=random.randint(1, 2**32)), @@ -135,8 +135,8 @@ def randomPet(client, name=None, cat=False): ) pet = Pet(dog) else: - Cat = typing.get_args(typing.get_args(Pet.model_fields["root"].annotation)[0])[0] - WhiteCat = typing.get_args(typing.get_args(Cat.model_fields["root"].annotation)[0])[1] + Cat = typing.get_args(Pet.model_fields["root"].annotation)[0] + WhiteCat = typing.get_args(Cat.model_fields["root"].annotation)[1] wc = WhiteCat(pet_type="cat", color="white", name="whitey", white_name="white") cat = Cat(wc) pet = Pet(cat) @@ -236,8 +236,8 @@ async def test_deletePet(server, client): @pytest.mark.asyncio(loop_scope="session") async def test_patchPet(server, client): - Pet = client.components.schemas["Pet-Input"].get_type() - Dog = typing.get_args(typing.get_args(Pet.model_fields["root"].annotation)[0])[1] + Pet = client.components.schemas["Pet"].get_type() + Dog = typing.get_args(Pet.model_fields["root"].annotation)[1] pets = [ Pet( Dog.model_construct( From 386c41c77fcf605344d48eccf2e316d7c2336f85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20K=C3=B6tter?= Date: Fri, 14 Nov 2025 09:21:30 +0100 Subject: [PATCH 3/8] pydantic 2.13 - fix UnsupportedFieldAttributeWarning Union[Annotated[str, Field(default=None)], Annotated[int, Field(default=None)],] -> Annotated[Union[str, int], Field(default=None)] c.f. https://github.com/pydantic/pydantic/issues/12530 --- pyproject.toml | 4 +++- src/aiopenapi3/model.py | 35 +++++++++++++++++++++-------------- tests/schema_test.py | 10 ++++------ 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index bebd5312..e44f6224 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,11 +6,12 @@ authors = [ ] dependencies = [ "PyYaml", - "pydantic == 2.11.9", + "pydantic @ git+https://github.com/pydantic/pydantic.git", "email-validator", "yarl", "httpx", "more-itertools", + 'typing_extensions; python_version<"3.10"', "jmespath", ] requires-python = ">=3.10" @@ -102,6 +103,7 @@ filterwarnings = [ "ignore:'flask.Markup' is deprecated and will be removed in Flask 2.4. Import 'markupsafe.Markup' instead.:DeprecationWarning", "ignore:unclosed resource type[BaseModel]: r = [i.model() for i in items] if len(r) > 1: - ru: object = Union[tuple(r)] + # Annotations are collected, last element has all of them + # ru: object = Annotated[Union[tuple(r)], items[-1].anno] + v = list() + for i in range(len(items)): + v.append(Annotated[r[i], items[i].anno]) + ru = Annotated[Union[tuple(v)], Field(default=None)] m: type[RootModel] = create_model(type_name, __base__=(ConfiguredRootModel[ru],), __module__=me.__name__) elif len(r) == 1: m: type[BaseModel] = cast(type[BaseModel], r[0]) + if items[0].anno: + m = Annotated[m, items[0].anno] if not is_basemodel(m): m = create_model(type_name, __base__=(ConfiguredRootModel[m],), __module__=me.__name__) else: # == 0 @@ -298,7 +306,8 @@ def from_schema( r: list[_ClassInfo] = list() for _type in Model.types(schema): - r.append(Model.createClassInfo(schema, _type, schemanames, discriminators, extra)) + args = dict() + r.append(Model.createClassInfo(schema, _type, schemanames, discriminators, extra, args)) m = _ClassInfo.collapse(schema._get_identity("L8"), r) @@ -312,6 +321,7 @@ def createClassInfo( schemanames: list[str], discriminators: list["DiscriminatorType"], extra: list["SchemaType"] | None, + args: dict[str, Any] = None, ) -> _ClassInfo: from . import v20, v30, v31 @@ -325,9 +335,8 @@ def createClassInfo( for primitive types the anyOf/oneOf is taken care of in Model.createAnnotation """ if typing.get_origin(_t := Model.createAnnotation(schema, _type=_type)) != Literal: - classinfo.root = Annotated[_t, Model.createField(schema, _type=_type, args=None)] - else: - classinfo.root = _t + classinfo.anno = Model.createField(schema, _type=_type, args=args) + classinfo.root = _t elif _type == "array": """anyOf/oneOf is taken care in in createAnnotation""" classinfo.root = Model.createAnnotation(schema, _type="array") @@ -354,9 +363,8 @@ def createClassInfo( if _type in Model.types(i) ) if schema.discriminator and schema.discriminator.mapping: - classinfo.root = Annotated[ - Union[t], Field(discriminator=Model.nameof(schema.discriminator.propertyName)) - ] + classinfo.root = Union[t] + classinfo.anno = Field(discriminator=Model.nameof(schema.discriminator.propertyName)) else: if len(t): classinfo.root = Union[t] @@ -372,9 +380,8 @@ def createClassInfo( if _type in Model.types(i) ) if schema.discriminator and schema.discriminator.mapping: - classinfo.root = Annotated[ - Union[t], Field(discriminator=Model.nameof(schema.discriminator.propertyName)) - ] + classinfo.root = Union[t] + classinfo.anno = Field(discriminator=Model.nameof(schema.discriminator.propertyName)) else: if len(t): classinfo.root = Union[t] @@ -450,8 +457,8 @@ def validate_patternProperties(self_): """ assert isinstance(schema, v20.Schema) schema_ = v20.Schema(type="string", format="binary") - _t = Model.createAnnotation(schema_, _type="string") - classinfo.root = Annotated[_t, Model.createField(schema_, _type="string", args=None)] + classinfo.root = Model.createAnnotation(schema_, _type="string") + classinfo.anno = Model.createField(schema_, _type="string", args=None) else: raise ValueError(_type) @@ -713,7 +720,7 @@ def booleanFalse(schema: Optional["SchemaType"]) -> bool: raise ValueError(schema) @staticmethod - def createField(schema: "SchemaType", _type=None, args=None): + def createField(schema: "SchemaType", _type=None, args=None) -> Field: if args is None: args = dict(default=getattr(schema, "default", None)) diff --git a/tests/schema_test.py b/tests/schema_test.py index 5032b734..f15e894c 100644 --- a/tests/schema_test.py +++ b/tests/schema_test.py @@ -121,12 +121,10 @@ def test_schema_regex_engine(with_schema_regex_engine): import pydantic_core._pydantic_core with pytest.raises(pydantic_core._pydantic_core.SchemaError, match="error: unclosed character class$"): - annotations = typing.get_args(Root.model_fields["root"].annotation) - assert len(annotations) == 2 and annotations[0] is str and isinstance(annotations[1], FieldInfo), annotations - metadata = annotations[1].metadata - assert len(metadata) == 1, metadata - pattern = metadata[0].pattern - assert isinstance(pattern, str), pattern + t = Root.model_fields["root"] + assert t.annotation == str + assert isinstance(t.metadata[0].pattern, str) + pattern = t.metadata[0].pattern from typing import Annotated C = Annotated[str, pydantic.Field(pattern=pattern)] From 8367eaa97474ac78688ca7ad83e1b027a7c72c1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20K=C3=B6tter?= Date: Sat, 15 Nov 2025 09:49:42 +0100 Subject: [PATCH 4/8] =?UTF-8?q?remove=20default=20argument=20from=20?= =?UTF-8?q?=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/aiopenapi3/model.py | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/aiopenapi3/model.py b/src/aiopenapi3/model.py index 0c1c54d6..f6b1f001 100644 --- a/src/aiopenapi3/model.py +++ b/src/aiopenapi3/model.py @@ -112,7 +112,6 @@ class _PropertyInfo: type_: str root: Any = None - anno: pydantic.Field = None config: dict[str, Any] = dataclasses.field(default_factory=dict) properties: dict[str, _PropertyInfo] = dataclasses.field( default_factory=lambda: collections.defaultdict(lambda: _ClassInfo._PropertyInfo()) @@ -257,17 +256,10 @@ def collapse(cls, type_name, items: list["_ClassInfo"]) -> type[BaseModel]: r = [i.model() for i in items] if len(r) > 1: - # Annotations are collected, last element has all of them - # ru: object = Annotated[Union[tuple(r)], items[-1].anno] - v = list() - for i in range(len(items)): - v.append(Annotated[r[i], items[i].anno]) - ru = Annotated[Union[tuple(v)], Field(default=None)] + ru = Annotated[Union[tuple(r)], Field(default=None)] m: type[RootModel] = create_model(type_name, __base__=(ConfiguredRootModel[ru],), __module__=me.__name__) elif len(r) == 1: m: type[BaseModel] = cast(type[BaseModel], r[0]) - if items[0].anno: - m = Annotated[m, items[0].anno] if not is_basemodel(m): m = create_model(type_name, __base__=(ConfiguredRootModel[m],), __module__=me.__name__) else: # == 0 @@ -335,8 +327,10 @@ def createClassInfo( for primitive types the anyOf/oneOf is taken care of in Model.createAnnotation """ if typing.get_origin(_t := Model.createAnnotation(schema, _type=_type)) != Literal: - classinfo.anno = Model.createField(schema, _type=_type, args=args) - classinfo.root = _t + classinfo.root = Annotated[_t, Model.createField(schema, _type=_type, args=args)] + else: + classinfo.root = _t + elif _type == "array": """anyOf/oneOf is taken care in in createAnnotation""" classinfo.root = Model.createAnnotation(schema, _type="array") @@ -363,8 +357,10 @@ def createClassInfo( if _type in Model.types(i) ) if schema.discriminator and schema.discriminator.mapping: - classinfo.root = Union[t] - classinfo.anno = Field(discriminator=Model.nameof(schema.discriminator.propertyName)) + classinfo.root = Annotated[ + Union[t], Field(discriminator=Model.nameof(schema.discriminator.propertyName)) + ] + else: if len(t): classinfo.root = Union[t] @@ -380,8 +376,9 @@ def createClassInfo( if _type in Model.types(i) ) if schema.discriminator and schema.discriminator.mapping: - classinfo.root = Union[t] - classinfo.anno = Field(discriminator=Model.nameof(schema.discriminator.propertyName)) + classinfo.root = Annotated[ + Union[t], Field(discriminator=Model.nameof(schema.discriminator.propertyName)) + ] else: if len(t): classinfo.root = Union[t] @@ -457,8 +454,8 @@ def validate_patternProperties(self_): """ assert isinstance(schema, v20.Schema) schema_ = v20.Schema(type="string", format="binary") - classinfo.root = Model.createAnnotation(schema_, _type="string") - classinfo.anno = Model.createField(schema_, _type="string", args=None) + _t = Model.createAnnotation(schema_, _type="string") + classinfo.root = Annotated[_t, Model.createField(schema_, _type="string", args=None)] else: raise ValueError(_type) From 452383ecbd59eb2a605f9d624c0b1bc7abbf1deb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20K=C3=B6tter?= Date: Sat, 15 Nov 2025 10:00:33 +0100 Subject: [PATCH 5/8] using default from schema --- src/aiopenapi3/model.py | 8 ++++---- tests/fixtures/schema-type-validators.yaml | 1 + tests/schema_test.py | 3 +++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/aiopenapi3/model.py b/src/aiopenapi3/model.py index f6b1f001..f6e160b9 100644 --- a/src/aiopenapi3/model.py +++ b/src/aiopenapi3/model.py @@ -250,13 +250,13 @@ def model(self) -> type[BaseModel] | type[None]: return m @classmethod - def collapse(cls, type_name, items: list["_ClassInfo"]) -> type[BaseModel]: + def collapse(cls, schema: "SchemaType", items: list["_ClassInfo"]) -> type[BaseModel]: r: list[type[BaseModel] | type[None]] - r = [i.model() for i in items] + type_name = schema._get_identity("L8") if len(r) > 1: - ru = Annotated[Union[tuple(r)], Field(default=None)] + ru = Annotated[Union[tuple(r)], Field(default=getattr(schema, "default", None))] m: type[RootModel] = create_model(type_name, __base__=(ConfiguredRootModel[ru],), __module__=me.__name__) elif len(r) == 1: m: type[BaseModel] = cast(type[BaseModel], r[0]) @@ -301,7 +301,7 @@ def from_schema( args = dict() r.append(Model.createClassInfo(schema, _type, schemanames, discriminators, extra, args)) - m = _ClassInfo.collapse(schema._get_identity("L8"), r) + m = _ClassInfo.collapse(schema, r) return cast(type[BaseModel], m) diff --git a/tests/fixtures/schema-type-validators.yaml b/tests/fixtures/schema-type-validators.yaml index 375001e3..44661561 100644 --- a/tests/fixtures/schema-type-validators.yaml +++ b/tests/fixtures/schema-type-validators.yaml @@ -22,3 +22,4 @@ components: minLength: 5 maximum: 10 minimum: 10 + default: 10 diff --git a/tests/schema_test.py b/tests/schema_test.py index f15e894c..de031d29 100644 --- a/tests/schema_test.py +++ b/tests/schema_test.py @@ -678,6 +678,9 @@ def test_schema_type_validators(with_schema_type_validators): with pytest.raises(ValidationError): v = t.model_validate("invalid") + v = t() + assert v.root == 10 + def test_schema_allof_string(with_schema_allof_string): api = OpenAPI("/", with_schema_allof_string) From 51ed189dbbb53ce5266d63e355feeebbb6064346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20K=C3=B6tter?= Date: Sat, 15 Nov 2025 10:22:22 +0100 Subject: [PATCH 6/8] default value --- src/aiopenapi3/model.py | 13 +++++++++---- tests/fixtures/schema-type-validators.yaml | 1 + tests/schema_test.py | 2 ++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/aiopenapi3/model.py b/src/aiopenapi3/model.py index f6e160b9..64f682a6 100644 --- a/src/aiopenapi3/model.py +++ b/src/aiopenapi3/model.py @@ -297,8 +297,14 @@ def from_schema( r: list[_ClassInfo] = list() - for _type in Model.types(schema): - args = dict() + types: list[str] = list(Model.types(schema)) + multi: bool = len(types) > 1 + for _type in types: + args = dict() if multi else None + """ + for schema with multiple types, the default value needs to be attached to the RootModel + providing empty args creates a FieldInfo without a default value for the subtypes + """ r.append(Model.createClassInfo(schema, _type, schemanames, discriminators, extra, args)) m = _ClassInfo.collapse(schema, r) @@ -360,7 +366,6 @@ def createClassInfo( classinfo.root = Annotated[ Union[t], Field(discriminator=Model.nameof(schema.discriminator.propertyName)) ] - else: if len(t): classinfo.root = Union[t] @@ -612,7 +617,7 @@ def createAnnotation( return rr @staticmethod - def types(schema: "SchemaType"): + def types(schema: "SchemaType") -> typing.Generator[str, None, None]: if isinstance(schema.type, str): yield schema.type if getattr(schema, "nullable", False): diff --git a/tests/fixtures/schema-type-validators.yaml b/tests/fixtures/schema-type-validators.yaml index 44661561..16a387d6 100644 --- a/tests/fixtures/schema-type-validators.yaml +++ b/tests/fixtures/schema-type-validators.yaml @@ -9,6 +9,7 @@ components: type: integer maximum: 10 minimum: 10 + default: 10 Number: type: number maximum: 10 diff --git a/tests/schema_test.py b/tests/schema_test.py index de031d29..d4e592b6 100644 --- a/tests/schema_test.py +++ b/tests/schema_test.py @@ -653,6 +653,8 @@ def test_schema_type_validators(with_schema_type_validators): v = t.model_validate("10") with pytest.raises(ValidationError): v = t.model_validate("9") + v = t() + assert v.root == 10 t = (m := api.components.schemas["Number"]).get_type() v = t.model_validate("10.") From 408b31d997aee38fdbcd83a33815c0aecf7f15b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20K=C3=B6tter?= Date: Wed, 4 Feb 2026 09:32:23 +0100 Subject: [PATCH 7/8] rebased & ruff`d --- requirements.txt | 4 ++-- src/aiopenapi3/v30/paths.py | 12 ++++++------ src/aiopenapi3/v31/paths.py | 12 ++++++------ src/aiopenapi3/v31/root.py | 2 +- tests/schema_test.py | 3 +-- 5 files changed, 16 insertions(+), 17 deletions(-) diff --git a/requirements.txt b/requirements.txt index 27168787..48c78da0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -35,9 +35,9 @@ multidict==6.7.0 # via yarl propcache==0.4.1 # via yarl -pydantic==2.11.9 +pydantic @ git+https://github.com/pydantic/pydantic.git@c42224acb31dd9f374124a74809332246e595194 # via aiopenapi3 -pydantic-core==2.33.2 +pydantic-core @ git+https://github.com/pydantic/pydantic.git@c42224acb31dd9f374124a74809332246e595194#subdirectory=pydantic-core # via pydantic pyyaml==6.0.3 # via aiopenapi3 diff --git a/src/aiopenapi3/v30/paths.py b/src/aiopenapi3/v30/paths.py index 2542bf93..d2b48008 100644 --- a/src/aiopenapi3/v30/paths.py +++ b/src/aiopenapi3/v30/paths.py @@ -39,12 +39,12 @@ class Link(ObjectExtended): @model_validator(mode="after") def validate_Link_operation(self): # type: ignore[name-defined] - assert not ( - self.operationId != None and self.operationRef != None - ), "operationId and operationRef are mutually exclusive, only one of them is allowed" - assert not ( - self.operationId == self.operationRef == None - ), "operationId and operationRef are mutually exclusive, one of them must be specified" + assert not (self.operationId is not None and self.operationRef is not None), ( + "operationId and operationRef are mutually exclusive, only one of them is allowed" + ) + assert not (self.operationId == self.operationRef is None), ( + "operationId and operationRef are mutually exclusive, one of them must be specified" + ) return self diff --git a/src/aiopenapi3/v31/paths.py b/src/aiopenapi3/v31/paths.py index 1d798a70..c65628aa 100644 --- a/src/aiopenapi3/v31/paths.py +++ b/src/aiopenapi3/v31/paths.py @@ -39,12 +39,12 @@ class Link(ObjectExtended): @model_validator(mode="after") def validate_Link_operation(self): # type: ignore[name-defined] - assert not ( - self.operationId != None and self.operationRef != None - ), "operationId and operationRef are mutually exclusive, only one of them is allowed" - assert not ( - self.operationId == self.operationRef == None - ), "operationId and operationRef are mutually exclusive, one of them must be specified" + assert not (self.operationId is not None and self.operationRef is not None), ( + "operationId and operationRef are mutually exclusive, only one of them is allowed" + ) + assert not (self.operationId == self.operationRef is None), ( + "operationId and operationRef are mutually exclusive, one of them must be specified" + ) return self diff --git a/src/aiopenapi3/v31/root.py b/src/aiopenapi3/v31/root.py index e2f9272b..e596a4a5 100644 --- a/src/aiopenapi3/v31/root.py +++ b/src/aiopenapi3/v31/root.py @@ -35,7 +35,7 @@ class Root(ObjectExtended, RootBase): externalDocs: dict[Any, Any] = Field(default_factory=dict) @model_validator(mode="after") - def validate_Root(self) -> "Self": + def validate_Root(self) -> "Self": # noqa: F821 assert self.paths or self.components or self.webhooks return self diff --git a/tests/schema_test.py b/tests/schema_test.py index d4e592b6..05db6be8 100644 --- a/tests/schema_test.py +++ b/tests/schema_test.py @@ -3,7 +3,6 @@ import uuid from datetime import datetime -from pydantic.fields import FieldInfo from pathlib import Path @@ -122,7 +121,7 @@ def test_schema_regex_engine(with_schema_regex_engine): with pytest.raises(pydantic_core._pydantic_core.SchemaError, match="error: unclosed character class$"): t = Root.model_fields["root"] - assert t.annotation == str + assert t.annotation is str assert isinstance(t.metadata[0].pattern, str) pattern = t.metadata[0].pattern from typing import Annotated From fcf0962a6892747381a2055dfdb4b9cbbe118223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20K=C3=B6tter?= Date: Sat, 7 Mar 2026 08:38:07 +0100 Subject: [PATCH 8/8] pyproject - using pydantic 2.13.0b2 --- pyproject.toml | 2 +- requirements.txt | 4 +- uv.lock | 190 ++++++++++++++++++++++++++--------------------- 3 files changed, 110 insertions(+), 86 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e44f6224..9e62de01 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ authors = [ ] dependencies = [ "PyYaml", - "pydantic @ git+https://github.com/pydantic/pydantic.git", + "pydantic >= 2.13.0b2", "email-validator", "yarl", "httpx", diff --git a/requirements.txt b/requirements.txt index 48c78da0..85ef285b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -35,9 +35,9 @@ multidict==6.7.0 # via yarl propcache==0.4.1 # via yarl -pydantic @ git+https://github.com/pydantic/pydantic.git@c42224acb31dd9f374124a74809332246e595194 +pydantic==2.13.0b2 # via aiopenapi3 -pydantic-core @ git+https://github.com/pydantic/pydantic.git@c42224acb31dd9f374124a74809332246e595194#subdirectory=pydantic-core +pydantic-core==2.42.0 # via pydantic pyyaml==6.0.3 # via aiopenapi3 diff --git a/uv.lock b/uv.lock index 9d72cd97..28196ba3 100644 --- a/uv.lock +++ b/uv.lock @@ -52,9 +52,10 @@ requires-dist = [ { name = "httpx-auth", marker = "extra == 'auth'", specifier = ">=0.21.0" }, { name = "jmespath" }, { name = "more-itertools" }, - { name = "pydantic", specifier = "==2.11.9" }, + { name = "pydantic", specifier = ">=2.13.0b2" }, { name = "pydantic-extra-types", marker = "extra == 'types'", specifier = ">=2.10.1" }, { name = "pyyaml" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, { name = "yarl" }, ] provides-extras = ["auth", "types"] @@ -1152,7 +1153,7 @@ wheels = [ [[package]] name = "pydantic" -version = "2.11.9" +version = "2.13.0b2" source = { registry = "https://pypi.org/simple/" } dependencies = [ { name = "annotated-types" }, @@ -1160,96 +1161,119 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ff/5d/09a551ba512d7ca404d785072700d3f6727a02f6f3c24ecfd081c7cf0aa8/pydantic-2.11.9.tar.gz", hash = "sha256:6b8ffda597a14812a7975c90b82a8a2e777d9257aba3453f973acd3c032a18e2", size = 788495, upload-time = "2025-09-13T11:26:39.325Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/71/0e0cffabd25021b7245b69133b9c10c41b06960e4629739643df96a17174/pydantic-2.13.0b2.tar.gz", hash = "sha256:255b95518090cd7090b605ef975957b07f724778f71dafc850a7442e088e7b99", size = 835671, upload-time = "2026-02-24T17:07:44.343Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl", hash = "sha256:c42dd626f5cfc1c6950ce6205ea58c93efa406da65f479dcb4029d5934857da2", size = 444855, upload-time = "2025-09-13T11:26:36.909Z" }, + { url = "https://files.pythonhosted.org/packages/53/c5/4d39af2fbf81f04a5acf8cdd9add3085129ca35eb8ba21b5b42c96803924/pydantic-2.13.0b2-py3-none-any.whl", hash = "sha256:42a3dee97ad2b50b7489ad4fe8dfec509cb613487da9a3c19d480f0880e223bc", size = 468371, upload-time = "2026-02-24T17:07:42.545Z" }, ] [[package]] name = "pydantic-core" -version = "2.33.2" +version = "2.42.0" source = { registry = "https://pypi.org/simple/" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/92/b31726561b5dae176c2d2c2dc43a9c5bfba5d32f96f8b4c0a600dd492447/pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8", size = 2028817, upload-time = "2025-04-23T18:30:43.919Z" }, - { url = "https://files.pythonhosted.org/packages/a3/44/3f0b95fafdaca04a483c4e685fe437c6891001bf3ce8b2fded82b9ea3aa1/pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d", size = 1861357, upload-time = "2025-04-23T18:30:46.372Z" }, - { url = "https://files.pythonhosted.org/packages/30/97/e8f13b55766234caae05372826e8e4b3b96e7b248be3157f53237682e43c/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d", size = 1898011, upload-time = "2025-04-23T18:30:47.591Z" }, - { url = "https://files.pythonhosted.org/packages/9b/a3/99c48cf7bafc991cc3ee66fd544c0aae8dc907b752f1dad2d79b1b5a471f/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572", size = 1982730, upload-time = "2025-04-23T18:30:49.328Z" }, - { url = "https://files.pythonhosted.org/packages/de/8e/a5b882ec4307010a840fb8b58bd9bf65d1840c92eae7534c7441709bf54b/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02", size = 2136178, upload-time = "2025-04-23T18:30:50.907Z" }, - { url = "https://files.pythonhosted.org/packages/e4/bb/71e35fc3ed05af6834e890edb75968e2802fe98778971ab5cba20a162315/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b", size = 2736462, upload-time = "2025-04-23T18:30:52.083Z" }, - { url = "https://files.pythonhosted.org/packages/31/0d/c8f7593e6bc7066289bbc366f2235701dcbebcd1ff0ef8e64f6f239fb47d/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2", size = 2005652, upload-time = "2025-04-23T18:30:53.389Z" }, - { url = "https://files.pythonhosted.org/packages/d2/7a/996d8bd75f3eda405e3dd219ff5ff0a283cd8e34add39d8ef9157e722867/pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a", size = 2113306, upload-time = "2025-04-23T18:30:54.661Z" }, - { url = "https://files.pythonhosted.org/packages/ff/84/daf2a6fb2db40ffda6578a7e8c5a6e9c8affb251a05c233ae37098118788/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac", size = 2073720, upload-time = "2025-04-23T18:30:56.11Z" }, - { url = "https://files.pythonhosted.org/packages/77/fb/2258da019f4825128445ae79456a5499c032b55849dbd5bed78c95ccf163/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a", size = 2244915, upload-time = "2025-04-23T18:30:57.501Z" }, - { url = "https://files.pythonhosted.org/packages/d8/7a/925ff73756031289468326e355b6fa8316960d0d65f8b5d6b3a3e7866de7/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b", size = 2241884, upload-time = "2025-04-23T18:30:58.867Z" }, - { url = "https://files.pythonhosted.org/packages/0b/b0/249ee6d2646f1cdadcb813805fe76265745c4010cf20a8eba7b0e639d9b2/pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22", size = 1910496, upload-time = "2025-04-23T18:31:00.078Z" }, - { url = "https://files.pythonhosted.org/packages/66/ff/172ba8f12a42d4b552917aa65d1f2328990d3ccfc01d5b7c943ec084299f/pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640", size = 1955019, upload-time = "2025-04-23T18:31:01.335Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" }, - { url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" }, - { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" }, - { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" }, - { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" }, - { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" }, - { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" }, - { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" }, - { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" }, - { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" }, - { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" }, - { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload-time = "2025-04-23T18:31:25.863Z" }, - { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload-time = "2025-04-23T18:31:27.341Z" }, - { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" }, - { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" }, - { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" }, - { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" }, - { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" }, - { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" }, - { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" }, - { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" }, - { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" }, - { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" }, - { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" }, - { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload-time = "2025-04-23T18:31:53.175Z" }, - { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload-time = "2025-04-23T18:31:54.79Z" }, - { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" }, - { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" }, - { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" }, - { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" }, - { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" }, - { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" }, - { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" }, - { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" }, - { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" }, - { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload-time = "2025-04-23T18:32:20.188Z" }, - { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" }, - { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" }, - { url = "https://files.pythonhosted.org/packages/30/68/373d55e58b7e83ce371691f6eaa7175e3a24b956c44628eb25d7da007917/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa", size = 2023982, upload-time = "2025-04-23T18:32:53.14Z" }, - { url = "https://files.pythonhosted.org/packages/a4/16/145f54ac08c96a63d8ed6442f9dec17b2773d19920b627b18d4f10a061ea/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29", size = 1858412, upload-time = "2025-04-23T18:32:55.52Z" }, - { url = "https://files.pythonhosted.org/packages/41/b1/c6dc6c3e2de4516c0bb2c46f6a373b91b5660312342a0cf5826e38ad82fa/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", size = 1892749, upload-time = "2025-04-23T18:32:57.546Z" }, - { url = "https://files.pythonhosted.org/packages/12/73/8cd57e20afba760b21b742106f9dbdfa6697f1570b189c7457a1af4cd8a0/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", size = 2067527, upload-time = "2025-04-23T18:32:59.771Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d5/0bb5d988cc019b3cba4a78f2d4b3854427fc47ee8ec8e9eaabf787da239c/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", size = 2108225, upload-time = "2025-04-23T18:33:04.51Z" }, - { url = "https://files.pythonhosted.org/packages/f1/c5/00c02d1571913d496aabf146106ad8239dc132485ee22efe08085084ff7c/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec", size = 2069490, upload-time = "2025-04-23T18:33:06.391Z" }, - { url = "https://files.pythonhosted.org/packages/22/a8/dccc38768274d3ed3a59b5d06f59ccb845778687652daa71df0cab4040d7/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052", size = 2237525, upload-time = "2025-04-23T18:33:08.44Z" }, - { url = "https://files.pythonhosted.org/packages/d4/e7/4f98c0b125dda7cf7ccd14ba936218397b44f50a56dd8c16a3091df116c3/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c", size = 2238446, upload-time = "2025-04-23T18:33:10.313Z" }, - { url = "https://files.pythonhosted.org/packages/ce/91/2ec36480fdb0b783cd9ef6795753c1dea13882f2e68e73bce76ae8c21e6a/pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808", size = 2066678, upload-time = "2025-04-23T18:33:12.224Z" }, - { url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" }, - { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" }, - { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" }, - { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" }, - { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" }, - { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, - { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/6a/5d/f33a858a3b38ca2ecea6a12d749a8dae1052098cf61f88403a585bd64906/pydantic_core-2.42.0.tar.gz", hash = "sha256:34068adadf673c872f01265fa17ec00073e99d7f53f6d499bdfae652f330b3d2", size = 471009, upload-time = "2026-02-23T17:57:19.71Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/fa/0a34d757daeb36ff19752e226583452956372b61c10199750a761ef3b901/pydantic_core-2.42.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:0ae7d50a47ada2a04f7296be9a7a2bf447118a25855f41fc52c8fc4bfb70c105", size = 2148609, upload-time = "2026-02-23T17:56:55.86Z" }, + { url = "https://files.pythonhosted.org/packages/9f/49/585e092697f47e3891db7a5c9959bedd8bc68fa60d27d66735c5f1a8e212/pydantic_core-2.42.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c9d04d4bd8de1dcd5c8845faf6c11e36cda34c2efffa29d70ad83cc6f6a6c9a8", size = 1959901, upload-time = "2026-02-23T17:55:28.949Z" }, + { url = "https://files.pythonhosted.org/packages/1d/86/801b46b223c580c3d1454dbc5ad124f76aaa1bc97cb3c318d4a237f48c61/pydantic_core-2.42.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e459e89453bb1bc69853272260afb5328ae404f854ddec485f5427fbace8d7e", size = 1988463, upload-time = "2026-02-23T17:56:32.442Z" }, + { url = "https://files.pythonhosted.org/packages/06/5e/26be378164218158542728fa93903690f5394492f3ce2a889e4195c083cd/pydantic_core-2.42.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:def66968fbe20274093fd4fc85d82b2ec42dbe20d9e51d27bbf3b5c7428c7a10", size = 2066783, upload-time = "2026-02-23T17:55:25.592Z" }, + { url = "https://files.pythonhosted.org/packages/14/cd/e9eb86b5525c289b4b44fca20a8a3aad55133ceb00b0530002017dda5ecd/pydantic_core-2.42.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:272fab515dc7da0f456c49747b87b4e8721a33ab352a54760cc8fd1a4fd5348a", size = 2239020, upload-time = "2026-02-23T17:55:24.01Z" }, + { url = "https://files.pythonhosted.org/packages/0e/87/8d542c59ad566ba57465f998dc63d8abbc18c3cfc13050ddfe4f88b0452d/pydantic_core-2.42.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa82dec59f36106738ae981878e0001074e2b3a949f21a5b3bea20485b9c6db4", size = 2302361, upload-time = "2026-02-23T17:56:45.305Z" }, + { url = "https://files.pythonhosted.org/packages/3a/e8/1ae993b7533cc409dba658a885b9c0b84cb612184e256f79bba63c6f4ebe/pydantic_core-2.42.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a70fe4db00ab03a9f976d28471c8e696ebd3b8455ccfa5e36e5d1a2ff301a7", size = 2105427, upload-time = "2026-02-23T17:55:20.855Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2d/dc45f75eb0f210e433c59b4d3c43650788e679ab6276390d7899d84f7103/pydantic_core-2.42.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b4c0f656b4fa218413a485c550ac3e4ddf2f343a9c46b6137394bd77c4128445", size = 2182268, upload-time = "2026-02-23T17:56:07.792Z" }, + { url = "https://files.pythonhosted.org/packages/88/2a/56705e70b4c71fba2a9f03ff95a1e02ef804d0d85a1fd7325961ce733c04/pydantic_core-2.42.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a4396ffc8b42499d14662f958b3f00656b62a67bde7f156580fd618827bebf5a", size = 2194245, upload-time = "2026-02-23T17:57:00.019Z" }, + { url = "https://files.pythonhosted.org/packages/71/5d/b958fc569862ee042bf0858c1b0df9b12cf47c87ad15949e3dcc913e6907/pydantic_core-2.42.0-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:36067825f365a5c3065f17d08421a72b036ff4588c450afe54d5750b80cc220d", size = 2339372, upload-time = "2026-02-23T17:54:51.793Z" }, + { url = "https://files.pythonhosted.org/packages/42/54/977662c385fb634929854cc2ad920c34c9ea371ee5052f27692722724b01/pydantic_core-2.42.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eec64367de940786c0b686d47bd952692018dd7cd895027aa82023186e469b7d", size = 2384489, upload-time = "2026-02-23T17:57:37.082Z" }, + { url = "https://files.pythonhosted.org/packages/27/1d/fbf2b65d3e365f01879f9011c631314f14d73686ebbce34ac1feba921c2b/pydantic_core-2.42.0-cp310-cp310-win32.whl", hash = "sha256:ff9f0737f487277721682d8518434557cfcef141ba55b89381c92700594a8b65", size = 1997807, upload-time = "2026-02-23T17:55:27.238Z" }, + { url = "https://files.pythonhosted.org/packages/81/06/c5a5dccfb6a8be0944bb7ee38fd7f3a520214c4f745f7ad5c0caf90a3e0e/pydantic_core-2.42.0-cp310-cp310-win_amd64.whl", hash = "sha256:77f0a8ab035d3bc319b759d8215f51846e9ea582dacbabb2777e5e3e135a048e", size = 2076856, upload-time = "2026-02-23T17:56:29.605Z" }, + { url = "https://files.pythonhosted.org/packages/c7/9b/6d345e05f7a42264c4400a9e006de4bd34c5ce44e4f7c41f7f0e054a94dc/pydantic_core-2.42.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a1159b9ee73511ae7c5631b108d80373577bc14f22d18d85bb2aa1fa1051dabc", size = 2146505, upload-time = "2026-02-23T17:56:34.687Z" }, + { url = "https://files.pythonhosted.org/packages/be/cd/abe70fbc4fd2d9c0d011e5d34096882d760217f5ac7d8c4c4cea17d4f238/pydantic_core-2.42.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff8e49b22225445d3e078aaa9bead90c37c852aee8f8a169ba15fdaaa13d1ecb", size = 1956627, upload-time = "2026-02-23T17:56:13.237Z" }, + { url = "https://files.pythonhosted.org/packages/5d/47/2da465431ab0f42b41f30b8c74152e9f79b6f589505c01298f3034f81948/pydantic_core-2.42.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe777d9a1a932c6b3ef32b201985324d06d9c74028adef1e1c7ea226fca2ba34", size = 1984934, upload-time = "2026-02-23T17:56:51.66Z" }, + { url = "https://files.pythonhosted.org/packages/15/e6/a15768c4c29b8dd85b0e6bb8398a9304fd7cd6585494e9f8f02e19822741/pydantic_core-2.42.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e92592c1040ed17968d603e05b72acec321662ef9bf88fef443ceae4d1a130c2", size = 2064459, upload-time = "2026-02-23T17:57:11.32Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/5d3be1bd142086d4d906cdbfe1df212592f35ea208075f4922e319e43dd6/pydantic_core-2.42.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:557a6eb6dc4db8a3f071929710feb29c6b5d7559218ab547a4e60577fb404f2f", size = 2237409, upload-time = "2026-02-23T17:56:41.256Z" }, + { url = "https://files.pythonhosted.org/packages/1a/39/485429551f52ece3463d0d6d8012583e46aeeeef9a8c3e3e6ade9afa7114/pydantic_core-2.42.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4035f81e7d1a5e065543061376ca52ccb0accaf970911ba0a9ec9d22062806ca", size = 2300650, upload-time = "2026-02-23T17:54:54.067Z" }, + { url = "https://files.pythonhosted.org/packages/55/bf/fc9972beaec7be268ed2bd8f0b1e531bc817f76dff1eb81e9653a1f1532e/pydantic_core-2.42.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63a4e073f8def1c7fd100a355b3a96e1bbaf0446b6a8530ae58f1afaa0478a46", size = 2102882, upload-time = "2026-02-23T17:57:35.05Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f8/d3eb4e8c8859d5b07c6484295d416f9292e141447d779d71006fc53d8294/pydantic_core-2.42.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dd8469c8d9f6c81befd10c72a0268079e929ba494cd27fa63e868964b0e04fb6", size = 2181693, upload-time = "2026-02-23T17:54:33.073Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e5/1723c8fd61ee91c0beaf3195c765f190efd01a316157cdacaa73678d54ab/pydantic_core-2.42.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bdebfd610a02bdb82f8e36dc7d4683e03e420624a2eda63e1205730970021308", size = 2193057, upload-time = "2026-02-23T17:56:09.49Z" }, + { url = "https://files.pythonhosted.org/packages/04/c9/6d65116244e6ded15ab2c629450daea88b7607bab111a422702a998a06a7/pydantic_core-2.42.0-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:9577eb5221abd4e5adf8a232a65f74c509b82b57b7b96b3667dac22f03ff9e94", size = 2336441, upload-time = "2026-02-23T17:54:29.138Z" }, + { url = "https://files.pythonhosted.org/packages/3e/18/bb06165399caf55d64e831fe1a780c379bee288da86b2e21c7862f8cefda/pydantic_core-2.42.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c6d36841b61100128c2374341a7c2c0ab347ef4b63aa4b6837b4431465d4d4fd", size = 2382577, upload-time = "2026-02-23T17:55:54.638Z" }, + { url = "https://files.pythonhosted.org/packages/e5/9e/8dda01a0a79e8567dcb7f716b96e28d0e4efab6dbdf0ecbf9785ed5fa8f5/pydantic_core-2.42.0-cp311-cp311-win32.whl", hash = "sha256:1d9d45333a28b0b8fb8ecedf67d280dc3318899988093e4d3a81618396270697", size = 1996317, upload-time = "2026-02-23T17:55:18.845Z" }, + { url = "https://files.pythonhosted.org/packages/f2/60/ea9ff9b2ae7dc1c8959a364430761f0cf0a8ec35aa28ab0fe8f09e158720/pydantic_core-2.42.0-cp311-cp311-win_amd64.whl", hash = "sha256:4631b4d1a3fe460aadd3822af032bb6c2e7ad77071fbf71c4e95ef9083c7c1a8", size = 2073945, upload-time = "2026-02-23T17:54:56.274Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3b/1b230be0153f5ad2fbafc47d80ede7b831d1dc811710de3d040f9367a4c9/pydantic_core-2.42.0-cp311-cp311-win_arm64.whl", hash = "sha256:3d46bfc6175a4b4b80b9f98f76133fbf68d5a02d7469b3090ca922d40f23d32d", size = 2056668, upload-time = "2026-02-23T17:55:08.685Z" }, + { url = "https://files.pythonhosted.org/packages/e3/23/d700e38114f82de04b958eb4fd597f60adbd96f528367b70272d2be42e4c/pydantic_core-2.42.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a11b9115364681779bcc39c6b9cdc20d48a9812a4bf3ed986fec4f694ed3a1e7", size = 2142632, upload-time = "2026-02-23T17:54:22.488Z" }, + { url = "https://files.pythonhosted.org/packages/5d/2d/7b7058842d5d9b7008cd1872f8ec38ac46b333170e8262ac28499675e156/pydantic_core-2.42.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c43088e8a44ccb2a2329d83892110587ebe661090b546dd03624a933fc4cfd0d", size = 1960081, upload-time = "2026-02-23T17:56:47.354Z" }, + { url = "https://files.pythonhosted.org/packages/d7/f7/0e834e423af743c2fcab85ffa71c4d2b454dcf619bc48cef245ba10f3761/pydantic_core-2.42.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13a7f9dde97c8400de559b2b2dcd9439f7b2b8951dad9b19711ef8c6e3f68ac0", size = 1990415, upload-time = "2026-02-23T17:55:06.956Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d7/03d2f2e365079efd6030889ca5788e687ce8e0096947bc119d84ab760be4/pydantic_core-2.42.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6380214c627f702993ea6b65b6aa8afc0f1481a179cdd169a2fc80a195e21158", size = 2077606, upload-time = "2026-02-23T17:54:10.877Z" }, + { url = "https://files.pythonhosted.org/packages/29/09/3c03f6f18e0a09d33e014c38004306c330717503b079bba524090e01533d/pydantic_core-2.42.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:606f80d8c61d4680ff82a34e9c49b7ab069b544b93393cc3c5906ac9e8eec7c9", size = 2243215, upload-time = "2026-02-23T17:56:11.499Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c7/7d476348f195e78d99742194c319e09d228317227a0bf74edf6a9e4fc514/pydantic_core-2.42.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ab80ae93cb739de6c9ccc06a12cd731b079e1b25b03e2dcdccbc914389cc7e0", size = 2326042, upload-time = "2026-02-23T17:54:13.903Z" }, + { url = "https://files.pythonhosted.org/packages/72/ef/a7650ca71edc1e483cef086cf43baf0d59230cf230f3e0df8d3c0a9c6a86/pydantic_core-2.42.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:638f04b55bea04ec5bbda57a4743a51051f24b884abcb155b0ed2c3cb59ba448", size = 2109716, upload-time = "2026-02-23T17:56:43.403Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f6/d56857169a5a0a520e0c9b147c37535edab2cdc330243fd4c9af9f450853/pydantic_core-2.42.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec72ba5c7555f69757b64b398509c7079fb22da705a6c67ac613e3f14a05f729", size = 2200101, upload-time = "2026-02-23T17:55:35.381Z" }, + { url = "https://files.pythonhosted.org/packages/a6/45/e188c551879502a13c6f01400907d0cbdb30058442957ee564a6e5d1de80/pydantic_core-2.42.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e0364f6cd61be57bcd629c34788c197db211e91ce1c3009bf4bf97f6bb0eb21f", size = 2199052, upload-time = "2026-02-23T17:55:38.99Z" }, + { url = "https://files.pythonhosted.org/packages/93/6c/9e4411a497094676a7b7a889fc8e307aabed805c8500d136a535ff24ee26/pydantic_core-2.42.0-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:856f0fd81173b308cd6ceb714332cd9ea3c66ce43176c7defaed6b2ed51d745c", size = 2349931, upload-time = "2026-02-23T17:54:59.976Z" }, + { url = "https://files.pythonhosted.org/packages/31/d7/94f30adc3d3a694fb19344a54f86ec06a7bae8d06ec6a86acafaa98ec9b8/pydantic_core-2.42.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1be705396e480ea96fd3cccd7512affda86823b8a2a8c196d9028ec37cb1ca77", size = 2397844, upload-time = "2026-02-23T17:57:02.416Z" }, + { url = "https://files.pythonhosted.org/packages/34/e4/489c41f48fbe6f1816ba3311358c97b86cb3555d4c5acb660fc8fda0077d/pydantic_core-2.42.0-cp312-cp312-win32.whl", hash = "sha256:acacf0795d68e42d01ae8cc77ae19a5b3c80593e0fd60e4e2d336ec13d3de906", size = 1980063, upload-time = "2026-02-23T17:54:34.384Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/16b0fe9138589ba1efbe24269e9f8f9a1b58edf4a88cdc005581abacad34/pydantic_core-2.42.0-cp312-cp312-win_amd64.whl", hash = "sha256:475a1a5ecf3a748a0d066b56138d258018c8145873ee899745c9f0e0af1cc4d4", size = 2076764, upload-time = "2026-02-23T17:57:23.837Z" }, + { url = "https://files.pythonhosted.org/packages/e9/47/727440962563879036c6778bda7c236415a4149e8cf945dd6c45382b0dda/pydantic_core-2.42.0-cp312-cp312-win_arm64.whl", hash = "sha256:e2369cef245dd5aeafe6964cf43d571fb478f317251749c152c0ae564127053a", size = 2038973, upload-time = "2026-02-23T17:55:30.858Z" }, + { url = "https://files.pythonhosted.org/packages/d9/73/f1ca9122a23924bb1b09e15b09e48dcf1ccbef8eb7151ffde8ba7723350e/pydantic_core-2.42.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:02fd2b4a62efa12e004fce2bfd2648cf8c39efc5dfc5ed5f196eb4ccefc7db4e", size = 2141091, upload-time = "2026-02-23T17:56:20.877Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a7/dfba778590b8b7fc2660320d6124b666b902fe7f3bb60f79bfd75f8d6cfb/pydantic_core-2.42.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c042694870c20053b8814a57c416cd2c6273fe462a440460005c791c24c39baf", size = 1960616, upload-time = "2026-02-23T17:55:42.248Z" }, + { url = "https://files.pythonhosted.org/packages/92/8f/83901df720fe8e2ee87bf3d9c4b30b39b7e1d9e7cf280d0a8f4fc3a8b82a/pydantic_core-2.42.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f905f3a082e7498dfaa70c204b236e92d448ba966ad112a96fcaaba2c4984fba", size = 1991369, upload-time = "2026-02-23T17:56:27.176Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f1/40470e480edcc165e445ebc0c42b2358a76ba96b0ab966cab75d75fdafc4/pydantic_core-2.42.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4762081e8acc5458bf907373817cf93c927d451a1b294c1d0535b0570890d939", size = 2076495, upload-time = "2026-02-23T17:54:21.043Z" }, + { url = "https://files.pythonhosted.org/packages/05/05/4074c6f54739ef5cc664ec35d42dcc904dece524e8efe3190c066c4e4da1/pydantic_core-2.42.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4a433bbf6304bd114b96b0ce3ed9add2ee686df448892253bca5f622c030f31", size = 2241726, upload-time = "2026-02-23T17:57:21.823Z" }, + { url = "https://files.pythonhosted.org/packages/2a/0c/e5ba96473bfc63cccfac63a46c79f8cba8c87c75ac89c7f0b5cdb7888a81/pydantic_core-2.42.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd695305724cfce8b19a18e87809c518f56905e5c03a19e3ad061974970f717d", size = 2324251, upload-time = "2026-02-23T17:57:29.915Z" }, + { url = "https://files.pythonhosted.org/packages/bf/25/dd3e68362b4d7983bec8ccd421f06c47360aa65763774426ccf6377c8d4a/pydantic_core-2.42.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5f352ffa0ec2983b849a93714571063bfc57413b5df2f1027d7a04b6e8bdd25", size = 2108163, upload-time = "2026-02-23T17:55:51.149Z" }, + { url = "https://files.pythonhosted.org/packages/27/01/18f7b79b09b442fa5ba119b74e2dbccc2488f1cc37bf24d8a044fadeb546/pydantic_core-2.42.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e61f2a194291338d76307a29e4881a8007542150b750900c1217117fc9bb698e", size = 2198891, upload-time = "2026-02-23T17:57:33.035Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c8/dee17aee2215e2eb63772ae1ea59c256524e518b9cab724ede6c3757d666/pydantic_core-2.42.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:032f990dc1759f11f6b287e5c6eb1b0bcfbc18141779414a77269b420360b3bf", size = 2196629, upload-time = "2026-02-23T17:54:15.347Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a1/7b0a5f9aa56f1c03334d3bbc5add60c9b2de99ff115003670dc629cb9ac3/pydantic_core-2.42.0-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:9c28b42768da6b9238554ae23b39291c3bbe6f53c4810aea6414d83efd59b96a", size = 2349048, upload-time = "2026-02-23T17:56:39.338Z" }, + { url = "https://files.pythonhosted.org/packages/3a/93/e2b79095d8fd26f369263beb47e8cdfe7b23a1264d97e1a7c268625254b7/pydantic_core-2.42.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:b22af1ac75fa873d81a65cce22ada1d840583b73a129b06133097c81f6f9e53b", size = 2395157, upload-time = "2026-02-23T17:56:19.081Z" }, + { url = "https://files.pythonhosted.org/packages/58/f7/68fdf9680d716a24e5b38418a852c204a773b35eb27e74a71322cb2a018e/pydantic_core-2.42.0-cp313-cp313-win32.whl", hash = "sha256:1de0350645c8643003176659ee70b637cd80e8514a063fff36f088fcda2dba06", size = 1978125, upload-time = "2026-02-23T17:54:31.69Z" }, + { url = "https://files.pythonhosted.org/packages/b2/73/7e8f6f696127a2ff684f393b4d8a5ba733ab68b04698eaac8c0da8f3ca18/pydantic_core-2.42.0-cp313-cp313-win_amd64.whl", hash = "sha256:d34b481a8a3eba3678a96e166c6e547c0c8b026844c13d9deb70c9f1fd2b0979", size = 2076984, upload-time = "2026-02-23T17:57:39.57Z" }, + { url = "https://files.pythonhosted.org/packages/ac/d6/7d16374c2f252bb9e416940f40472aa03f64148e2cc5a6f2549448611be9/pydantic_core-2.42.0-cp313-cp313-win_arm64.whl", hash = "sha256:5e0a65358eef041d95eef93fcf8834c2c8b83cc5a92d32f84bb3a7955dfe21c9", size = 2036707, upload-time = "2026-02-23T17:54:41.293Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d4/daf7fa12562a2e78b41886ec56190098b0549e030c9f46ec8bf0423d44da/pydantic_core-2.42.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:de4c9ad4615983b3fb2ee57f5c570cf964bda13353c6c41a54dac394927f0e54", size = 2136364, upload-time = "2026-02-23T17:55:02.759Z" }, + { url = "https://files.pythonhosted.org/packages/e9/95/e9160fc5971bcf214b21ddcf512ef13072bf18be2711f97555cfe8a66621/pydantic_core-2.42.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:129d5e6357814e4567e18b2ded4c210919aafd9ef0887235561f8d853fd34123", size = 1958611, upload-time = "2026-02-23T17:55:22.397Z" }, + { url = "https://files.pythonhosted.org/packages/29/e6/53c06035e689dd318f7e9e19d617ad5bf671ff3781ea13291f1b0f9f2b32/pydantic_core-2.42.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c45582a5dac4649e512840ad212a5c2f9d168622f8db8863e8a29b54a29dfd", size = 1991699, upload-time = "2026-02-23T17:56:15.299Z" }, + { url = "https://files.pythonhosted.org/packages/3b/0b/877d5fda1fae5ece9863564a074f95371d05d20f2f51415b431c7313c499/pydantic_core-2.42.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a97fc19afb730b45de55d2e80093f1a36effc29538dec817204c929add8f2b4a", size = 2072415, upload-time = "2026-02-23T17:55:11.536Z" }, + { url = "https://files.pythonhosted.org/packages/c5/fb/c2d6bab7ba57793c6aa520773a919f03af399d5716c0911f9c2e4abf66a5/pydantic_core-2.42.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e45d83d38d94f22ffe9a0f0393b23e25bfefe4804ae63c8013906b76ab8de8ed", size = 2240036, upload-time = "2026-02-23T17:55:33.832Z" }, + { url = "https://files.pythonhosted.org/packages/91/95/44242f6a0320d0dbc6d9f0e32454af977498986c8265eafc173094098d57/pydantic_core-2.42.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3060192d8b63611a2abb26eccadddff5602a66491b8fafd9ae34fb67302ae84", size = 2320761, upload-time = "2026-02-23T17:57:17.764Z" }, + { url = "https://files.pythonhosted.org/packages/65/0c/7e7f7d2f7873753bb4991b3570129de2362bf9a7327cb351e7eb87b50d72/pydantic_core-2.42.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f17739150af9dc58b5c8fc3c4a1826ff84461f11b9f8ad5618445fcdd1ccec6", size = 2112277, upload-time = "2026-02-23T17:56:49.368Z" }, + { url = "https://files.pythonhosted.org/packages/74/73/f17751005347006a7b16d7264d1d386c3512dc45a4d4eff7369cba1e0082/pydantic_core-2.42.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d14e4c229467a7c27aa7c71e21584b3d77352ccb64e968fdbed4633373f73f7", size = 2197279, upload-time = "2026-02-23T17:57:42.163Z" }, + { url = "https://files.pythonhosted.org/packages/f2/1b/dfdeabfa0d3ce86293c599069ab1ce0b66bc2602cb9f565efff8957320a1/pydantic_core-2.42.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:aaef75e1b54366c7ccfbf4fc949ceaaa0f4c87e106df850354be6c7d45143db0", size = 2192398, upload-time = "2026-02-23T17:54:17.977Z" }, + { url = "https://files.pythonhosted.org/packages/5f/fe/4544b8c3e706e5315e23fee40310338bc4397a85e2a19b2d4892c9d0bbdc/pydantic_core-2.42.0-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:d2e362dceeeb4d56fd63e649c2de3ad4c3aa448b13ab8a9976e23a669f9c1854", size = 2344055, upload-time = "2026-02-23T17:57:13.275Z" }, + { url = "https://files.pythonhosted.org/packages/71/1e/125d956fd72743f7b655ce259aa0de1343d295016fb307b6787c0a797f2c/pydantic_core-2.42.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:a8edee724b527818bf0a6c8e677549794c0d0caffd14492851bd7a4ceab0f258", size = 2391008, upload-time = "2026-02-23T17:56:22.592Z" }, + { url = "https://files.pythonhosted.org/packages/61/b6/cf3b7486982a7fed38ccc283ca0f762023ba48e5f782d49c71b1de6d1885/pydantic_core-2.42.0-cp314-cp314-win32.whl", hash = "sha256:a10c105c221f68221cb81be71f063111172f5ddf8b06f6494560e826c148f872", size = 1973646, upload-time = "2026-02-23T17:55:13.918Z" }, + { url = "https://files.pythonhosted.org/packages/46/f5/b55d87b4239f42c761f27d63cbfbaf32d63f8303898f625cc9a4fc83c950/pydantic_core-2.42.0-cp314-cp314-win_amd64.whl", hash = "sha256:232d86e00870aceee7251aa5f4ab17e3e4864a4656c015f8e03d1223bf8e17ba", size = 2077923, upload-time = "2026-02-23T17:55:43.865Z" }, + { url = "https://files.pythonhosted.org/packages/9f/9d/d09538c48a4765fd25f940eedd7bcdc8f30ef05086db439e406f42adae2c/pydantic_core-2.42.0-cp314-cp314-win_arm64.whl", hash = "sha256:9a6fce4e778c2fe2b3f1df63bfaa522c147668517ba040c49ad7f67a66867cff", size = 2026106, upload-time = "2026-02-23T17:55:53.049Z" }, + { url = "https://files.pythonhosted.org/packages/bd/f3/c6267535c84bdd2dd9e5ecdb0cc893868d49756dbcf457591d86dc0649e9/pydantic_core-2.42.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f4d1670fbc5488cfb18dd9fc71a2c7c8e12caeeb6e5bb641aa351ac5e01963cf", size = 2131834, upload-time = "2026-02-23T17:55:37.078Z" }, + { url = "https://files.pythonhosted.org/packages/d0/6a/fe75d3834568e724124f47773df3602e873e87f34111bb6705e02a95e59f/pydantic_core-2.42.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:baeae16666139d0110f1006a06809228f5293ab84e77f4b9dda2bdee95d6c4e8", size = 1948083, upload-time = "2026-02-23T17:55:05.099Z" }, + { url = "https://files.pythonhosted.org/packages/d0/10/4a86b575eed55ab0db3fd8f0073f101704206db6ad4c9f935fd6182b3a15/pydantic_core-2.42.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a77c7a8cedf5557a4e5547dabf55a8ec99949162bd7925b312f6ec37c24101c", size = 1976006, upload-time = "2026-02-23T17:54:19.126Z" }, + { url = "https://files.pythonhosted.org/packages/76/c6/90dbeda0236f560a45ce905a21851a42129cd7dd867796c037dfed230f34/pydantic_core-2.42.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:133fccf13546ff2a0610cc5b978dd4ee2c7f55a7a86b6b722fd6e857694bacc5", size = 2054110, upload-time = "2026-02-23T17:56:24.469Z" }, + { url = "https://files.pythonhosted.org/packages/03/8d/ba913ee0dfa755cd8a61e0f7e6f94611077ed66fdb7070531a0c43d0b125/pydantic_core-2.42.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad5dbebfbab92cf0f6d0b13d55bf0a239880a1534377edf6387e2e7a4469f131", size = 2249798, upload-time = "2026-02-23T17:54:38.371Z" }, + { url = "https://files.pythonhosted.org/packages/61/a5/8ac5e0e736d928d8569d2c9296ec3a043cbc45ad3d903111659482fe1699/pydantic_core-2.42.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6c0181016cb29ba4824940246606a8e13b1135de8306e00b5bd9d1efbc4cf85", size = 2304101, upload-time = "2026-02-23T17:55:47.358Z" }, + { url = "https://files.pythonhosted.org/packages/78/80/cbacb7009cfb0bfb4099f519d52e8552f0fb9fd9f3981825e187465aa30f/pydantic_core-2.42.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:020cfd7041cb71eac4dc93a29a6d5ec34f10b1fdc37f4f189c25bcc6748a2f97", size = 2112849, upload-time = "2026-02-23T17:55:56.48Z" }, + { url = "https://files.pythonhosted.org/packages/61/a5/6c13c65776837ea0a8fa1bbbce883f808ae946bcf2ba740f4ca3c6dab328/pydantic_core-2.42.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73c6de3ee24f2b614d344491eda5628c4cdf3e7b79c0ac69bb40884ced2d319", size = 2182033, upload-time = "2026-02-23T17:55:49.481Z" }, + { url = "https://files.pythonhosted.org/packages/e1/47/383698ab0f81dba082de56319b978b82ba4581dba1bf38acda9f84c99200/pydantic_core-2.42.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:b2b448da50e1e8d5aac786dcf441afa761d26f1be4532b52cdf50864b47bd784", size = 2183463, upload-time = "2026-02-23T17:56:04.169Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d9/957d75d5c3d8cf00dd12861c6468eeaa7097f532270b495d7ae2533564ea/pydantic_core-2.42.0-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:0df0488b1f548ef874b45bbc60a70631eee0177b79b5527344d7a253e77a5ed2", size = 2323266, upload-time = "2026-02-23T17:54:35.836Z" }, + { url = "https://files.pythonhosted.org/packages/9c/a7/153cd39593d42eb25f9c411a1fe37db2add541eb5d86e68982bfce1951ca/pydantic_core-2.42.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:b8aa32697701dc36c956f4a78172549adbe25eacba952bbfbde786fb66316151", size = 2389367, upload-time = "2026-02-23T17:56:57.726Z" }, + { url = "https://files.pythonhosted.org/packages/a7/31/3cbb0f162f9c70a700537f6a868c6bcf4b00e1fe4392d7df1dcd85a7e89e/pydantic_core-2.42.0-cp314-cp314t-win32.whl", hash = "sha256:173de56229897ff81b650ca9ed6f4c62401c49565234d3e9ae251119f6fd45c6", size = 1970806, upload-time = "2026-02-23T17:57:27.865Z" }, + { url = "https://files.pythonhosted.org/packages/65/58/8bbcd65dc2dd90f71b0e5589ee605333d1d60702885774c044b69b832575/pydantic_core-2.42.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2db227cf6797c286361f8d1e52b513f358a3ff9ebdede335e55a5edf4c59f06b", size = 2054547, upload-time = "2026-02-23T17:56:17.034Z" }, + { url = "https://files.pythonhosted.org/packages/36/c3/20b4089dee9421d0a39ce00c47e88dcfb691c3c34fbdf80abac49c904c0a/pydantic_core-2.42.0-cp314-cp314t-win_arm64.whl", hash = "sha256:a983862733ecaf0b5c7275145f86397bde4ee1ad84cf650e1d7af7febe5f7073", size = 2029969, upload-time = "2026-02-23T17:57:15.544Z" }, + { url = "https://files.pythonhosted.org/packages/82/d9/207a15adc67dfcf8f64f170333b2e01c7b8a0335f56b3a172ec8fdfc9f4e/pydantic_core-2.42.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:53ab90bed3a191750a6726fe2570606a9794608696063823d2deea734c100bf6", size = 2142841, upload-time = "2026-02-23T17:55:45.501Z" }, + { url = "https://files.pythonhosted.org/packages/f1/48/d0ad5ff57321027562cfe09845c2480cda6bcfc5a7a994d8d95af7011b3d/pydantic_core-2.42.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:b8d9911a3cdb8062f4102499b666303c9a976202b420200a26606eafa0bfecf8", size = 1958701, upload-time = "2026-02-23T17:56:02.095Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ce/448a47c89fff51efd1e8a54445951d75ff9dd8a38576c3cffd0fd13785ec/pydantic_core-2.42.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe6b7b22dd1d326a1ab23b9e611a69c41d606cb723839755bb00456ebff3f672", size = 2001801, upload-time = "2026-02-23T17:54:44.656Z" }, + { url = "https://files.pythonhosted.org/packages/8a/92/7200c67303c706438bd64a470359a819e423b6b04a35ea4cbf398583db3f/pydantic_core-2.42.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5e36849ca8e2e39828a70f1a86aa2b86f645a1d710223b6653f2fa8a130b703", size = 2159533, upload-time = "2026-02-23T17:54:16.814Z" }, + { url = "https://files.pythonhosted.org/packages/e3/63/e3ac5d1ee933094de51bcd4c89fc9a825600ea483e3b23cb056080049bc7/pydantic_core-2.42.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:4d7e36c2a1f3c0020742190714388884a11282a0179f3d1c55796ee26b32dba5", size = 2128990, upload-time = "2026-02-23T17:54:27.446Z" }, + { url = "https://files.pythonhosted.org/packages/b1/45/1d45a18a4421793eab4ae702a1430fca352e4e78b4517922f585244356c4/pydantic_core-2.42.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:41a702c2ac3dbbafa7d13bea142b3e04c8676d1fca199bac52b5ee24e6cdb737", size = 1954176, upload-time = "2026-02-23T17:57:25.879Z" }, + { url = "https://files.pythonhosted.org/packages/31/4d/a991ecb2d7fb14c39adfc1f77bc7f08df6826bf9237bef14f5ecb2cf3b0e/pydantic_core-2.42.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad5cb8ed96ffac804a0298f5d03f002769514700d79cbe77b66a27a6e605a65a", size = 2007664, upload-time = "2026-02-23T17:54:24.335Z" }, + { url = "https://files.pythonhosted.org/packages/cf/89/5876cba8bb16a48336dc4ee717f3664ec072ddbcfdeb427b5c6da7715a0c/pydantic_core-2.42.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51e33cf940cddcad333f85e15a25a2a949ac0a7f26fe8f43dc2d6816ce974ec4", size = 2165798, upload-time = "2026-02-23T17:55:17.14Z" }, + { url = "https://files.pythonhosted.org/packages/34/41/497a68994c9e08c17fb684219c8a0e9ccf0709df4b645f14bce0c227fe12/pydantic_core-2.42.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:495e70705f553c3b8f939965fa7cf77825c81417ff3c7ac046be9509b94c292c", size = 2143692, upload-time = "2026-02-23T17:55:40.645Z" }, + { url = "https://files.pythonhosted.org/packages/c7/12/b8805d6eb0c15efd910ea8d07af2f7a4b6c1ef10546685f2c269e61bf5cd/pydantic_core-2.42.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8757702cc696d48f9fdcb65cb835ca18bda5d83169fe6d13efd706e4195aea81", size = 1969752, upload-time = "2026-02-23T17:54:49.866Z" }, + { url = "https://files.pythonhosted.org/packages/14/5e/c94bbeb11b41bf36aa6d91a10a1514eb2c9ac3ad656cf164233c4eccf7ef/pydantic_core-2.42.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32cc3087f38e4a9ee679f6184670a1b6591b8c3840c483f3342e176e215194d1", size = 2155675, upload-time = "2026-02-23T17:54:37.106Z" }, + { url = "https://files.pythonhosted.org/packages/53/a3/ef88273ea7f7f1ba7ec0fca85303d98a31efd4f9f3ead8c20b95fc06ef41/pydantic_core-2.42.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e824d8f372aa717eeb435ee220c8247e514283a4fc0ecdc4ce44c09ee485a5b8", size = 2180115, upload-time = "2026-02-23T17:57:06.594Z" }, + { url = "https://files.pythonhosted.org/packages/74/61/d22801e80495e75795ad6d31988c4d8896056b3003432d90a48afefd4ca7/pydantic_core-2.42.0-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e5900b257abb20371135f28b686d6990202dcdd9b7d8ff2e2290568aa0058280", size = 2190937, upload-time = "2026-02-23T17:55:10.133Z" }, + { url = "https://files.pythonhosted.org/packages/d3/05/032921a9917c771a48339ecfd8205e9d2fdcba2bb0246ac865546c9c6e4b/pydantic_core-2.42.0-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:f6705c73ab2abaebef81cad882a75afd6b8a0550e853768933610dce2945705e", size = 2328747, upload-time = "2026-02-23T17:54:40.015Z" }, + { url = "https://files.pythonhosted.org/packages/f8/6f/4e2a80cd62a9a863ad0ee725c690eab12d8385d5cd78815fbf24d6be54df/pydantic_core-2.42.0-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:5ed95136324ceef6f33bd96ee3a299d36169175401204590037983aeb5bc73de", size = 2380594, upload-time = "2026-02-23T17:54:42.855Z" }, + { url = "https://files.pythonhosted.org/packages/b6/fe/b69a88e1eb26517ef0bca812d2e11376a100f8542093932239900cf57f3b/pydantic_core-2.42.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:9d729a3934e0ef3bc171025f0414d422aa6397d6bbd8176d5402739140e50616", size = 2197629, upload-time = "2026-02-23T17:56:05.861Z" }, ] [[package]]