diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f3e2e418..e32d9e52 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: strategy: fail-fast: true matrix: - python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] pydantic-version: ["1.10", "2.0"] sqla-version: ["1.4", "2"] exclude: diff --git a/.sourcery.yaml b/.sourcery.yaml index 0e7be063..b1382a59 100644 --- a/.sourcery.yaml +++ b/.sourcery.yaml @@ -15,7 +15,7 @@ rule_settings: - refactoring - suggestion - comment - python_version: "3.8" + python_version: "3.10" rules: [] diff --git a/docs/conf.py b/docs/conf.py index 77673889..a44efe9e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -105,8 +105,8 @@ autodoc_member_order = "bysource" autodoc_typehints_format = "short" -auto_pytabs_min_version = (3, 8) -auto_pytabs_max_version = (3, 11) +auto_pytabs_min_version = (3, 10) +auto_pytabs_max_version = (3, 14) auto_pytabs_compat_mode = True autosectionlabel_prefix_document = True diff --git a/docs/examples/configuration/test_example_11.py b/docs/examples/configuration/test_example_11.py index 27d29911..3651ac69 100644 --- a/docs/examples/configuration/test_example_11.py +++ b/docs/examples/configuration/test_example_11.py @@ -1,12 +1,11 @@ from __future__ import annotations from dataclasses import dataclass -from typing import Union from polyfactory.factories import DataclassFactory # Define a recursive type using forward reference -RecursiveType = Union[list["RecursiveType"], int] +RecursiveType = list["RecursiveType"] | int @dataclass diff --git a/docs/examples/configuration/test_example_5.py b/docs/examples/configuration/test_example_5.py index 73c9fe21..6567d1a9 100644 --- a/docs/examples/configuration/test_example_5.py +++ b/docs/examples/configuration/test_example_5.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from datetime import date, datetime from enum import Enum -from typing import Any, Union +from typing import Any from uuid import UUID from polyfactory import Use @@ -25,8 +25,8 @@ class Person: id: UUID name: str hobbies: list[str] - age: Union[float, int] - birthday: Union[datetime, date] + age: float | int + birthday: datetime | date pets: list[Pet] assets: list[dict[str, dict[str, Any]]] diff --git a/docs/examples/configuration/test_example_7.py b/docs/examples/configuration/test_example_7.py index 22a29d9e..f9f137e6 100644 --- a/docs/examples/configuration/test_example_7.py +++ b/docs/examples/configuration/test_example_7.py @@ -1,5 +1,4 @@ from dataclasses import dataclass -from typing import Optional from uuid import UUID from polyfactory.factories.dataclass_factory import DataclassFactory @@ -8,7 +7,7 @@ @dataclass class Person: id: UUID - name: Optional[str] + name: str | None class PersonFactory(DataclassFactory[Person]): diff --git a/docs/examples/declaring_factories/test_example_5.py b/docs/examples/declaring_factories/test_example_5.py index b5935174..046e79c4 100644 --- a/docs/examples/declaring_factories/test_example_5.py +++ b/docs/examples/declaring_factories/test_example_5.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from datetime import date, datetime from enum import Enum -from typing import Any, Union +from typing import Any from uuid import UUID from polyfactory.factories import DataclassFactory @@ -24,8 +24,8 @@ class Person: id: UUID name: str hobbies: list[str] - age: Union[float, int] - birthday: Union[datetime, date] + age: float | int + birthday: datetime | date pets: list[Pet] assets: list[dict[str, dict[str, Any]]] diff --git a/docs/examples/declaring_factories/test_example_7.py b/docs/examples/declaring_factories/test_example_7.py index 43fb99e9..7086a7e4 100644 --- a/docs/examples/declaring_factories/test_example_7.py +++ b/docs/examples/declaring_factories/test_example_7.py @@ -1,5 +1,5 @@ from datetime import date, datetime -from typing import Any, Union +from typing import Any from uuid import UUID import attrs @@ -12,9 +12,9 @@ class Person: id: UUID name: str hobbies: list[str] - age: Union[float, int] + age: float | int # an aliased variable - birthday: Union[datetime, date] = attrs.field(alias="date_of_birth") + birthday: datetime | date = attrs.field(alias="date_of_birth") # a "private" variable _assets: list[dict[str, dict[str, Any]]] diff --git a/docs/examples/fields/test_example_1.py b/docs/examples/fields/test_example_1.py index 31801f71..c5b4f501 100644 --- a/docs/examples/fields/test_example_1.py +++ b/docs/examples/fields/test_example_1.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from datetime import date, datetime from enum import Enum -from typing import Any, Union +from typing import Any from uuid import UUID from polyfactory.factories import DataclassFactory @@ -24,8 +24,8 @@ class Person: id: UUID name: str hobbies: list[str] - age: Union[float, int] - birthday: Union[datetime, date] + age: float | int + birthday: datetime | date pets: list[Pet] assets: list[dict[str, dict[str, Any]]] diff --git a/docs/examples/fields/test_example_2.py b/docs/examples/fields/test_example_2.py index b3174642..5bf401bf 100644 --- a/docs/examples/fields/test_example_2.py +++ b/docs/examples/fields/test_example_2.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from datetime import date, datetime from enum import Enum -from typing import Any, Union +from typing import Any from uuid import UUID from polyfactory import Use @@ -25,8 +25,8 @@ class Person: id: UUID name: str hobbies: list[str] - age: Union[float, int] - birthday: Union[datetime, date] + age: float | int + birthday: datetime | date pets: list[Pet] assets: list[dict[str, dict[str, Any]]] diff --git a/docs/examples/fields/test_example_3.py b/docs/examples/fields/test_example_3.py index 8ce0b4f9..b9be0cdb 100644 --- a/docs/examples/fields/test_example_3.py +++ b/docs/examples/fields/test_example_3.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from datetime import date, datetime from enum import Enum -from typing import Any, Union +from typing import Any from uuid import UUID from polyfactory import Use @@ -25,8 +25,8 @@ class Person: id: UUID name: str hobbies: list[str] - age: Union[float, int] - birthday: Union[datetime, date] + age: float | int + birthday: datetime | date pets: list[Pet] assets: list[dict[str, dict[str, Any]]] diff --git a/docs/examples/fields/test_example_4.py b/docs/examples/fields/test_example_4.py index 9304b347..441873e0 100644 --- a/docs/examples/fields/test_example_4.py +++ b/docs/examples/fields/test_example_4.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from datetime import date, datetime from enum import Enum -from typing import Any, Union +from typing import Any from uuid import UUID from polyfactory import Use @@ -25,8 +25,8 @@ class Person: id: UUID name: str hobbies: list[str] - age: Union[float, int] - birthday: Union[datetime, date] + age: float | int + birthday: datetime | date pets: list[Pet] assets: list[dict[str, dict[str, Any]]] diff --git a/docs/examples/fields/test_example_8.py b/docs/examples/fields/test_example_8.py index 3df420bd..0fd78490 100644 --- a/docs/examples/fields/test_example_8.py +++ b/docs/examples/fields/test_example_8.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from datetime import date, datetime from enum import Enum -from typing import Any, Union +from typing import Any from uuid import UUID from polyfactory.factories import DataclassFactory @@ -24,8 +24,8 @@ class Person: id: UUID name: str hobbies: list[str] - age: Union[float, int] - birthday: Union[datetime, date] + age: float | int + birthday: datetime | date pet: Pet assets: list[dict[str, dict[str, Any]]] diff --git a/docs/examples/fixtures/test_example_1.py b/docs/examples/fixtures/test_example_1.py index 77711e67..08428039 100644 --- a/docs/examples/fixtures/test_example_1.py +++ b/docs/examples/fixtures/test_example_1.py @@ -1,6 +1,5 @@ from dataclasses import dataclass from datetime import date, datetime -from typing import Optional, Union from uuid import UUID from polyfactory.factories import DataclassFactory @@ -11,10 +10,10 @@ class Person: id: UUID name: str - hobbies: Optional[list[str]] + hobbies: list[str] | None nicks: list[str] - age: Union[float, int] - birthday: Union[datetime, date] + age: float | int + birthday: datetime | date @register_fixture diff --git a/docs/examples/fixtures/test_example_2.py b/docs/examples/fixtures/test_example_2.py index 62460cf2..8f78e584 100644 --- a/docs/examples/fixtures/test_example_2.py +++ b/docs/examples/fixtures/test_example_2.py @@ -1,6 +1,5 @@ from dataclasses import dataclass from datetime import date, datetime -from typing import Optional, Union from uuid import UUID from polyfactory.factories import DataclassFactory @@ -11,10 +10,10 @@ class Person: id: UUID name: str - hobbies: Optional[list[str]] + hobbies: list[str] | None nicks: list[str] - age: Union[float, int] - birthday: Union[datetime, date] + age: float | int + birthday: datetime | date class PersonFactory(DataclassFactory[Person]): ... diff --git a/docs/examples/fixtures/test_example_3.py b/docs/examples/fixtures/test_example_3.py index c4b9e895..466eb4fe 100644 --- a/docs/examples/fixtures/test_example_3.py +++ b/docs/examples/fixtures/test_example_3.py @@ -1,6 +1,5 @@ from dataclasses import dataclass from datetime import date, datetime -from typing import Optional, Union from uuid import UUID from polyfactory.factories import DataclassFactory @@ -11,10 +10,10 @@ class Person: id: UUID name: str - hobbies: Optional[list[str]] + hobbies: list[str] | None nicks: list[str] - age: Union[float, int] - birthday: Union[datetime, date] + age: float | int + birthday: datetime | date @register_fixture(name="aliased_person_factory") diff --git a/docs/examples/library_factories/sqlalchemy_factory/test_example_association_proxy.py b/docs/examples/library_factories/sqlalchemy_factory/test_example_association_proxy.py index f6d3f83e..124610eb 100644 --- a/docs/examples/library_factories/sqlalchemy_factory/test_example_association_proxy.py +++ b/docs/examples/library_factories/sqlalchemy_factory/test_example_association_proxy.py @@ -16,10 +16,10 @@ class User(Base): id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] - user_keyword_associations: Mapped[list["UserKeywordAssociation"]] = relationship( + user_keyword_associations: Mapped[list[UserKeywordAssociation]] = relationship( back_populates="user", ) - keywords: AssociationProxy[list["Keyword"]] = association_proxy( + keywords: AssociationProxy[list[Keyword]] = association_proxy( "user_keyword_associations", "keyword", creator=lambda keyword_obj: UserKeywordAssociation(keyword=keyword_obj), @@ -32,7 +32,7 @@ class UserKeywordAssociation(Base): keyword_id: Mapped[int] = mapped_column(ForeignKey("keywords.id"), primary_key=True) user: Mapped[User] = relationship(back_populates="user_keyword_associations") - keyword: Mapped["Keyword"] = relationship() + keyword: Mapped[Keyword] = relationship() class Keyword(Base): diff --git a/docs/reference/constants.rst b/docs/reference/constants.rst deleted file mode 100644 index c2972132..00000000 --- a/docs/reference/constants.rst +++ /dev/null @@ -1,9 +0,0 @@ -constants -========= - - -.. note:: Mapping of type annotations into concrete types. - This is used to normalize Python <= 3.9 annotations. - -.. automodule:: polyfactory.constants - :members: diff --git a/polyfactory/constants.py b/polyfactory/constants.py index 48a89bc2..199761ca 100644 --- a/polyfactory/constants.py +++ b/polyfactory/constants.py @@ -3,15 +3,6 @@ from collections import abc, defaultdict, deque from collections.abc import Iterable, Mapping, Sequence from random import Random -from typing import ( - Union, -) - -try: - from types import UnionType -except ImportError: - UnionType = Union # type: ignore[misc,assignment] - # Mapping of type annotations into concrete types. TYPE_MAPPING = { @@ -29,7 +20,6 @@ abc.Mapping: dict, abc.Sequence: list, abc.Set: set, - UnionType: Union, } diff --git a/polyfactory/decorators.py b/polyfactory/decorators.py index 669b1b39..2a14198f 100644 --- a/polyfactory/decorators.py +++ b/polyfactory/decorators.py @@ -2,10 +2,13 @@ import contextlib import inspect -from typing import Any, Callable +from typing import TYPE_CHECKING, Any from polyfactory import PostGenerated +if TYPE_CHECKING: + from collections.abc import Callable + class post_generated: # noqa: N801 """Descriptor class for wrapping a classmethod into a ``PostGenerated`` field.""" diff --git a/polyfactory/factories/base.py b/polyfactory/factories/base.py index 0c7e354a..a8a1e548 100644 --- a/polyfactory/factories/base.py +++ b/polyfactory/factories/base.py @@ -4,7 +4,7 @@ import inspect from abc import ABC, abstractmethod from collections import Counter, abc, deque -from collections.abc import Collection, Hashable, Iterable, Mapping, Sequence +from collections.abc import Callable, Collection, Hashable, Iterable, Mapping, Sequence from contextlib import suppress from datetime import date, datetime, time, timedelta from decimal import Decimal @@ -28,19 +28,20 @@ from typing import ( TYPE_CHECKING, Any, - Callable, ClassVar, Generic, TypedDict, TypeVar, cast, + get_args, + get_origin, overload, ) from uuid import UUID from zoneinfo import ZoneInfo from faker import Faker -from typing_extensions import Self, get_args, get_origin, get_original_bases +from typing_extensions import Self, get_original_bases from polyfactory.constants import ( DEFAULT_RANDOM, @@ -87,7 +88,7 @@ from polyfactory.value_generators.primitives import create_random_boolean, create_random_bytes, create_random_string if TYPE_CHECKING: - from typing_extensions import TypeGuard + from typing import TypeGuard from polyfactory.field_meta import Constraints, FieldMeta from polyfactory.persistence import AsyncPersistenceProtocol, SyncPersistenceProtocol @@ -141,11 +142,11 @@ class BaseFactory(ABC, Generic[T]): Note: this value can only be set when '__is_base_factory__' is 'True'. """ - __faker__: ClassVar["Faker"] = Faker() + __faker__: ClassVar[Faker] = Faker() """ A faker instance to use. Can be a user provided value. """ - __random__: ClassVar["Random"] = DEFAULT_RANDOM + __random__: ClassVar[Random] = DEFAULT_RANDOM """ An instance of 'random.Random' to use. """ @@ -483,7 +484,7 @@ def extract_field_build_parameters(cls, field_meta: FieldMeta, build_args: dict[ @classmethod @abstractmethod - def is_supported_type(cls, value: Any) -> "TypeGuard[type[T]]": # pragma: no cover + def is_supported_type(cls, value: Any) -> TypeGuard[type[T]]: # pragma: no cover """Determine whether the given value is supported by the factory. :param value: An arbitrary value. diff --git a/polyfactory/factories/beanie_odm_factory.py b/polyfactory/factories/beanie_odm_factory.py index b6bc9a4e..6000db87 100644 --- a/polyfactory/factories/beanie_odm_factory.py +++ b/polyfactory/factories/beanie_odm_factory.py @@ -1,8 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Generic, TypeVar - -from typing_extensions import get_args +from typing import TYPE_CHECKING, Any, Generic, TypeVar, get_args from polyfactory.exceptions import MissingDependencyException from polyfactory.factories.pydantic_factory import ModelFactory @@ -10,7 +8,7 @@ from polyfactory.utils.predicates import is_safe_subclass if TYPE_CHECKING: - from typing_extensions import TypeGuard + from typing import TypeGuard from polyfactory.factories.base import BuildContext from polyfactory.field_meta import FieldMeta @@ -47,7 +45,7 @@ class BeanieDocumentFactory(Generic[T], ModelFactory[T]): __is_base_factory__ = True @classmethod - def is_supported_type(cls, value: Any) -> "TypeGuard[type[T]]": + def is_supported_type(cls, value: Any) -> TypeGuard[type[T]]: """Determine whether the given value is supported by the factory. :param value: An arbitrary value. @@ -58,7 +56,7 @@ def is_supported_type(cls, value: Any) -> "TypeGuard[type[T]]": @classmethod def get_field_value( cls, - field_meta: "FieldMeta", + field_meta: FieldMeta, field_build_parameters: Any | None = None, build_context: BuildContext | None = None, ) -> Any: diff --git a/polyfactory/factories/dataclass_factory.py b/polyfactory/factories/dataclass_factory.py index fd7e7f08..eed986cd 100644 --- a/polyfactory/factories/dataclass_factory.py +++ b/polyfactory/factories/dataclass_factory.py @@ -1,9 +1,7 @@ from __future__ import annotations from dataclasses import MISSING, fields, is_dataclass -from typing import Any, Generic, get_type_hints - -from typing_extensions import TypeGuard +from typing import Any, Generic, TypeGuard, get_type_hints from polyfactory.factories.base import BaseFactory, T from polyfactory.field_meta import FieldMeta, Null @@ -24,14 +22,14 @@ def is_supported_type(cls, value: Any) -> TypeGuard[type[T]]: return bool(is_dataclass(value)) @classmethod - def get_model_fields(cls) -> list["FieldMeta"]: + def get_model_fields(cls) -> list[FieldMeta]: """Retrieve a list of fields from the factory's model. :returns: A list of field MetaData instances. """ - fields_meta: list["FieldMeta"] = [] + fields_meta: list[FieldMeta] = [] model_type_hints = get_type_hints(cls.__model__, include_extras=True) diff --git a/polyfactory/factories/msgspec_factory.py b/polyfactory/factories/msgspec_factory.py index fbbee45b..bba7fcf2 100644 --- a/polyfactory/factories/msgspec_factory.py +++ b/polyfactory/factories/msgspec_factory.py @@ -1,7 +1,7 @@ from __future__ import annotations from inspect import isclass -from typing import TYPE_CHECKING, Any, Callable, Generic, TypeVar, get_type_hints +from typing import TYPE_CHECKING, Any, Generic, TypeVar, get_type_hints from polyfactory.exceptions import MissingDependencyException from polyfactory.factories.base import BaseFactory @@ -10,7 +10,8 @@ from polyfactory.value_generators.primitives import create_random_bytes if TYPE_CHECKING: - from typing_extensions import TypeGuard + from collections.abc import Callable + from typing import TypeGuard try: import msgspec diff --git a/polyfactory/factories/odmantic_odm_factory.py b/polyfactory/factories/odmantic_odm_factory.py index 1b3367ab..bc7031ca 100644 --- a/polyfactory/factories/odmantic_odm_factory.py +++ b/polyfactory/factories/odmantic_odm_factory.py @@ -1,7 +1,7 @@ from __future__ import annotations import decimal -from typing import TYPE_CHECKING, Any, Callable, Generic, TypeVar, Union +from typing import TYPE_CHECKING, Any, Generic, TypeVar from polyfactory.exceptions import MissingDependencyException from polyfactory.factories.pydantic_factory import ModelFactory @@ -17,10 +17,11 @@ msg = "odmantic is not installed" raise MissingDependencyException(msg) from e -T = TypeVar("T", bound=Union[Model, EmbeddedModel]) +T = TypeVar("T", bound=Model | EmbeddedModel) if TYPE_CHECKING: - from typing_extensions import TypeGuard + from collections.abc import Callable + from typing import TypeGuard class OdmanticModelFactory(Generic[T], ModelFactory[T]): @@ -29,7 +30,7 @@ class OdmanticModelFactory(Generic[T], ModelFactory[T]): __is_base_factory__ = True @classmethod - def is_supported_type(cls, value: Any) -> "TypeGuard[type[T]]": + def is_supported_type(cls, value: Any) -> TypeGuard[type[T]]: """Determine whether the given value is supported by the factory. :param value: An arbitrary value. diff --git a/polyfactory/factories/pydantic_factory.py b/polyfactory/factories/pydantic_factory.py index 0a85cf27..6a5038ed 100644 --- a/polyfactory/factories/pydantic_factory.py +++ b/polyfactory/factories/pydantic_factory.py @@ -7,11 +7,9 @@ from functools import partial from os.path import realpath from pathlib import Path -from typing import TYPE_CHECKING, Any, ClassVar, ForwardRef, Generic, TypeVar, cast +from typing import TYPE_CHECKING, Any, ClassVar, ForwardRef, Generic, Literal, TypeVar, cast, get_args from uuid import NAMESPACE_DNS, uuid1, uuid3, uuid5 -from typing_extensions import Literal, get_args - from polyfactory.exceptions import MissingDependencyException from polyfactory.factories.base import BaseFactory, BuildContext from polyfactory.factories.base import BuildContext as BaseBuildContext @@ -94,10 +92,10 @@ if TYPE_CHECKING: from collections import abc - from collections.abc import Iterable, Mapping, Sequence - from typing import Callable + from collections.abc import Callable, Iterable, Mapping, Sequence + from typing import TypeGuard - from typing_extensions import NotRequired, TypeGuard + from typing_extensions import NotRequired from pydantic import BaseModel @@ -433,7 +431,7 @@ def is_supported_type(cls, value: Any) -> TypeGuard[type[T]]: return _is_pydantic_v1_model(value) or _is_pydantic_v2_model(value) @classmethod - def get_model_fields(cls) -> list["FieldMeta"]: + def get_model_fields(cls) -> list[FieldMeta]: """Retrieve a list of fields from the factory's model. diff --git a/polyfactory/factories/sqlalchemy_factory.py b/polyfactory/factories/sqlalchemy_factory.py index 1d154ce9..078e2623 100644 --- a/polyfactory/factories/sqlalchemy_factory.py +++ b/polyfactory/factories/sqlalchemy_factory.py @@ -1,18 +1,16 @@ from __future__ import annotations -from collections.abc import Collection, Mapping +from collections.abc import Callable, Collection, Mapping from dataclasses import is_dataclass from datetime import date, datetime from typing import ( TYPE_CHECKING, Annotated, Any, - Callable, ClassVar, Generic, Protocol, TypeVar, - Union, ) from sqlalchemy.util.langhelpers import duck_type_collection @@ -34,10 +32,11 @@ raise MissingDependencyException(msg) from e if TYPE_CHECKING: + from typing import TypeGuard + from sqlalchemy.ext.asyncio import AsyncSession, async_scoped_session from sqlalchemy.orm import Session, scoped_session from sqlalchemy.sql.type_api import TypeEngine - from typing_extensions import TypeGuard T = TypeVar("T") @@ -229,7 +228,7 @@ def get_type_from_column(cls, column: Column) -> type: annotation = cls._get_type_from_type_engine(column.type) if column.nullable: - annotation = Union[annotation, None] # type: ignore[assignment] + annotation = annotation | None # type: ignore[assignment] return annotation diff --git a/polyfactory/factories/typed_dict_factory.py b/polyfactory/factories/typed_dict_factory.py index cecf47c8..506e3e52 100644 --- a/polyfactory/factories/typed_dict_factory.py +++ b/polyfactory/factories/typed_dict_factory.py @@ -1,20 +1,17 @@ from __future__ import annotations -from typing import Any, Generic, TypeVar, get_args, get_type_hints +from typing import Any, Generic, TypeGuard, TypeVar, get_args, get_origin, get_type_hints -from typing_extensions import ( # type: ignore[attr-defined] +from typing_extensions import ( NotRequired, Required, - TypeGuard, - _TypedDictMeta, # pyright: ignore[reportAttributeAccessIssue] - get_origin, is_typeddict, ) from polyfactory.factories.base import BaseFactory from polyfactory.field_meta import FieldMeta, Null -TypedDictT = TypeVar("TypedDictT", bound=_TypedDictMeta) +TypedDictT = TypeVar("TypedDictT") class TypedDictFactory(Generic[TypedDictT], BaseFactory[TypedDictT]): @@ -32,7 +29,7 @@ def is_supported_type(cls, value: Any) -> TypeGuard[type[TypedDictT]]: return is_typeddict(value) @classmethod - def get_model_fields(cls) -> list["FieldMeta"]: + def get_model_fields(cls) -> list[FieldMeta]: """Retrieve a list of fields from the factory's model. @@ -42,6 +39,7 @@ def get_model_fields(cls) -> list["FieldMeta"]: model_type_hints = get_type_hints(cls.__model__, include_extras=True) field_metas: list[FieldMeta] = [] + required_keys: set = getattr(cls.__model__, "__required_keys__", set()) for field_name, annotation in model_type_hints.items(): origin = get_origin(annotation) if origin in (Required, NotRequired): @@ -52,7 +50,7 @@ def get_model_fields(cls) -> list["FieldMeta"]: annotation=annotation, name=field_name, default=getattr(cls.__model__, field_name, Null), - required=field_name in cls.__model__.__required_keys__, + required=field_name in required_keys, ), ) diff --git a/polyfactory/field_meta.py b/polyfactory/field_meta.py index 74081c22..e7a666f6 100644 --- a/polyfactory/field_meta.py +++ b/polyfactory/field_meta.py @@ -3,9 +3,7 @@ import functools from collections.abc import Hashable, Mapping from dataclasses import asdict -from typing import TYPE_CHECKING, Any, Literal, TypedDict, cast - -from typing_extensions import get_args, get_origin +from typing import TYPE_CHECKING, Any, Literal, TypedDict, cast, get_args, get_origin from polyfactory.constants import TYPE_MAPPING from polyfactory.utils.helpers import ( @@ -160,7 +158,7 @@ def from_type( return field @classmethod - def parse_constraints(cls, metadata: Sequence[Any]) -> "Constraints": + def parse_constraints(cls, metadata: Sequence[Any]) -> Constraints: constraints = {} for value in metadata: diff --git a/polyfactory/fields.py b/polyfactory/fields.py index 99e1692e..317f3204 100644 --- a/polyfactory/fields.py +++ b/polyfactory/fields.py @@ -1,9 +1,12 @@ from __future__ import annotations -from typing import Any, Callable, Generic, TypedDict, TypeVar, cast +from typing import TYPE_CHECKING, Any, Generic, TypedDict, TypeVar, cast from typing_extensions import ParamSpec +if TYPE_CHECKING: + from collections.abc import Callable + T = TypeVar("T") P = ParamSpec("P") diff --git a/polyfactory/pytest_plugin.py b/polyfactory/pytest_plugin.py index 60b33fb4..4bff09c8 100644 --- a/polyfactory/pytest_plugin.py +++ b/polyfactory/pytest_plugin.py @@ -2,12 +2,12 @@ import inspect import re +from collections.abc import Callable from typing import ( Any, - Callable, Literal, + TypeAlias, TypeVar, - Union, overload, ) @@ -17,10 +17,11 @@ from polyfactory.factories.base import BaseFactory from polyfactory.utils.predicates import is_safe_subclass -Scope = Union[ - Literal["session", "package", "module", "class", "function"], - Callable[[str, pytest.Config], Literal["session", "package", "module", "class", "function"]], -] +Scope: TypeAlias = ( + Literal["session", "package", "module", "class", "function"] + | Callable[[str, pytest.Config], Literal["session", "package", "module", "class", "function"]] +) + T = TypeVar("T", bound=BaseFactory[Any]) split_pattern_1 = re.compile(r"([A-Z]+)([A-Z][a-z])") diff --git a/polyfactory/utils/deprecation.py b/polyfactory/utils/deprecation.py index 3bbac95e..82adda74 100644 --- a/polyfactory/utils/deprecation.py +++ b/polyfactory/utils/deprecation.py @@ -2,11 +2,14 @@ import inspect from functools import wraps -from typing import Any, Callable, Literal, TypeVar +from typing import TYPE_CHECKING, Any, Literal, TypeVar from warnings import warn from typing_extensions import ParamSpec +if TYPE_CHECKING: + from collections.abc import Callable + __all__ = ("check_for_deprecated_parameters", "deprecated", "warn_deprecation") diff --git a/polyfactory/utils/helpers.py b/polyfactory/utils/helpers.py index 0287c427..7dcec90f 100644 --- a/polyfactory/utils/helpers.py +++ b/polyfactory/utils/helpers.py @@ -3,9 +3,7 @@ from collections import deque from collections.abc import Mapping, Sequence from dataclasses import is_dataclass -from typing import Any - -from typing_extensions import get_args, get_origin +from typing import Any, get_args, get_origin from polyfactory.constants import TYPE_MAPPING from polyfactory.utils.predicates import ( diff --git a/polyfactory/utils/normalize_type.py b/polyfactory/utils/normalize_type.py index 781b9b60..0b4a7edf 100644 --- a/polyfactory/utils/normalize_type.py +++ b/polyfactory/utils/normalize_type.py @@ -1,8 +1,8 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Annotated, Any, Union - -from typing_extensions import get_args, get_origin +from functools import reduce +from operator import or_ +from typing import TYPE_CHECKING, Annotated, Any, get_args, get_origin from polyfactory.utils.predicates import ( is_generic_alias, @@ -42,7 +42,7 @@ def normalize_type(type_annotation: Any) -> Any: """ if is_type_alias(type_annotation): - return type_annotation.__value__ + return normalize_type(type_annotation.__value__) if not is_generic_alias(type_annotation): return type_annotation @@ -70,7 +70,7 @@ def __handle_generic_type_alias(origin: Any, args: tuple) -> Any: return template normalized_args = tuple(normalize_type(arg) for arg in args) - substitutions = dict(zip(type_params, normalized_args)) + substitutions = dict(zip(type_params, normalized_args, strict=False)) if get_origin(template) is Annotated: base_type, *metadata = get_args(template) @@ -87,7 +87,7 @@ def __apply_substitutions(target: Any, subs: Mapping[Any, Any]) -> Any: if is_union(target): args = tuple(__apply_substitutions(arg, subs) for arg in get_args(target)) - return Union[args] + return reduce(or_, args) origin = get_origin(target) args = get_args(target) diff --git a/polyfactory/utils/predicates.py b/polyfactory/utils/predicates.py index afa43617..98b55d5e 100644 --- a/polyfactory/utils/predicates.py +++ b/polyfactory/utils/predicates.py @@ -1,22 +1,22 @@ from __future__ import annotations +import sys from inspect import isclass -from typing import Annotated, Any, ForwardRef, Literal, NewType, Optional, TypeVar, get_args +from typing import Annotated, Any, ForwardRef, Literal, NewType, Optional, TypeGuard, TypeVar, get_args, get_origin from typing_extensions import ( NotRequired, ParamSpec, Required, TypeAliasType, - TypeGuard, - get_origin, ) -try: +# Python 3.12+ has TypeAliasType in typing module, and it's different from typing_extensions version +if sys.version_info >= (3, 12): from typing import TypeAliasType as typing_TypeAliasType AllTypeAliasTypes: tuple[type, ...] = (TypeAliasType, typing_TypeAliasType) -except ImportError: +else: AllTypeAliasTypes = (TypeAliasType,) @@ -27,7 +27,7 @@ T = TypeVar("T") -def is_safe_subclass(annotation: Any, class_or_tuple: type[T] | tuple[type[T], ...]) -> "TypeGuard[type[T]]": +def is_safe_subclass(annotation: Any, class_or_tuple: type[T] | tuple[type[T], ...]) -> TypeGuard[type[T]]: """Determine whether a given annotation is a subclass of a give type :param annotation: A type annotation. @@ -44,7 +44,7 @@ def is_safe_subclass(annotation: Any, class_or_tuple: type[T] | tuple[type[T], . return False -def is_any(annotation: Any) -> "TypeGuard[Any]": +def is_any(annotation: Any) -> TypeGuard[Any]: """Determine whether a given annotation is 'typing.Any'. :param annotation: A type annotation. @@ -58,7 +58,7 @@ def is_any(annotation: Any) -> "TypeGuard[Any]": ) -def is_dict_key_or_value_type(annotation: Any) -> "TypeGuard[Any]": +def is_dict_key_or_value_type(annotation: Any) -> TypeGuard[Any]: """Determine whether a given annotation is a valid dict key or value type: ``typing.KT`` or ``typing.VT``. @@ -67,7 +67,7 @@ def is_dict_key_or_value_type(annotation: Any) -> "TypeGuard[Any]": return str(annotation) in {"~KT", "~VT"} -def is_union(annotation: Any) -> "TypeGuard[Any]": +def is_union(annotation: Any) -> TypeGuard[Any]: """Determine whether a given annotation is 'typing.Union'. :param annotation: A type annotation. @@ -77,7 +77,7 @@ def is_union(annotation: Any) -> "TypeGuard[Any]": return get_type_origin(annotation) in UNION_TYPES -def is_optional(annotation: Any) -> "TypeGuard[Any | None]": +def is_optional(annotation: Any) -> TypeGuard[Any | None]: """Determine whether a given annotation is 'typing.Optional'. :param annotation: A type annotation. @@ -103,7 +103,7 @@ def is_literal(annotation: Any) -> bool: return repr(annotation).startswith("typing.Literal") or repr(annotation).startswith("typing_extensions.Literal") -def is_new_type(annotation: Any) -> "TypeGuard[type[NewType]]": +def is_new_type(annotation: Any) -> TypeGuard[type[NewType]]: """Determine whether a given annotation is 'typing.NewType'. :param annotation: A type annotation. diff --git a/polyfactory/value_generators/complex_types.py b/polyfactory/value_generators/complex_types.py index ae7bc690..83bd78b3 100644 --- a/polyfactory/value_generators/complex_types.py +++ b/polyfactory/value_generators/complex_types.py @@ -2,9 +2,7 @@ from collections.abc import Iterable, MutableMapping, MutableSequence from collections.abc import Set as AbstractSet -from typing import TYPE_CHECKING, Any, cast - -from typing_extensions import is_typeddict +from typing import TYPE_CHECKING, Any, cast, is_typeddict from polyfactory.utils.model_coverage import CoverageContainer @@ -40,7 +38,7 @@ def handle_collection_type( if issubclass(container_type, MutableMapping) or is_typeddict(container_type): for key_field_meta, value_field_meta in cast( "Iterable[tuple[FieldMeta, FieldMeta]]", - zip(field_meta.children[::2], field_meta.children[1::2]), + zip(field_meta.children[::2], field_meta.children[1::2], strict=False), ): key = factory.get_field_value( key_field_meta, field_build_parameters=field_build_parameters, build_context=build_context @@ -110,7 +108,7 @@ def handle_collection_type_coverage( # noqa: C901, PLR0911 if issubclass(container_type, MutableMapping) or is_typeddict(container_type): for key_field_meta, value_field_meta in cast( "Iterable[tuple[FieldMeta, FieldMeta]]", - zip(field_meta.children[::2], field_meta.children[1::2]), + zip(field_meta.children[::2], field_meta.children[1::2], strict=False), ): key = CoverageContainer(factory.get_field_value_coverage(key_field_meta, build_context=build_context)) value = CoverageContainer(factory.get_field_value_coverage(value_field_meta, build_context=build_context)) diff --git a/polyfactory/value_generators/constrained_collections.py b/polyfactory/value_generators/constrained_collections.py index 5aab182c..e1e0b7cb 100644 --- a/polyfactory/value_generators/constrained_collections.py +++ b/polyfactory/value_generators/constrained_collections.py @@ -1,12 +1,12 @@ from __future__ import annotations from enum import EnumMeta -from typing import TYPE_CHECKING, Any, Callable, Literal, TypeVar +from typing import TYPE_CHECKING, Any, Literal, TypeVar from polyfactory.exceptions import ParameterException if TYPE_CHECKING: - from collections.abc import Mapping + from collections.abc import Callable, Mapping from polyfactory.factories.base import BaseFactory, BuildContext from polyfactory.field_meta import FieldMeta diff --git a/polyfactory/value_generators/constrained_numbers.py b/polyfactory/value_generators/constrained_numbers.py index 0cd629a3..b28cf624 100644 --- a/polyfactory/value_generators/constrained_numbers.py +++ b/polyfactory/value_generators/constrained_numbers.py @@ -16,7 +16,7 @@ class NumberGeneratorProtocol(Protocol[T]): """Protocol for custom callables used to generate numerical values""" - def __call__(self, random: "Random", minimum: T | None = None, maximum: T | None = None) -> T: + def __call__(self, random: Random, minimum: T | None = None, maximum: T | None = None) -> T: """Signature of the callable. :param random: An instance of random. @@ -241,7 +241,7 @@ def generate_constrained_number( minimum: T | None, maximum: T | None, multiple_of: T | None, - method: "NumberGeneratorProtocol[T]", + method: NumberGeneratorProtocol[T], ) -> T: """Generate a constrained number, output depends on the passed in callbacks. diff --git a/polyfactory/value_generators/constrained_strings.py b/polyfactory/value_generators/constrained_strings.py index 797c7783..e522b24d 100644 --- a/polyfactory/value_generators/constrained_strings.py +++ b/polyfactory/value_generators/constrained_strings.py @@ -1,14 +1,15 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Callable, TypeVar, Union, cast +from typing import TYPE_CHECKING, TypeVar, cast from polyfactory.exceptions import ParameterException from polyfactory.value_generators.primitives import create_random_bytes, create_random_string from polyfactory.value_generators.regex import RegexFactory -T = TypeVar("T", bound=Union[bytes, str]) +T = TypeVar("T", bound=bytes | str) if TYPE_CHECKING: + from collections.abc import Callable from random import Random from re import Pattern diff --git a/pyproject.toml b/pyproject.toml index 91559fa9..8f8f294d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,6 @@ classifiers = [ "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", @@ -36,7 +35,7 @@ version = "3.2.0" description = "Mock data generation factories" readme = "docs/PYPI_README.md" license = { text = "MIT" } -requires-python = ">=3.9,<4.0" +requires-python = ">=3.10,<4.0" dependencies = ["faker>=5.0.0", "typing-extensions>=4.6.0"] [project.optional-dependencies] @@ -184,7 +183,7 @@ exclude_lines = [ [tool.ruff] line-length = 120 src = ["polyfactory", "tests", "docs/examples"] -target-version = "py39" +target-version = "py310" [tool.ruff.format] docstring-code-format = true diff --git a/tests/conftest.py b/tests/conftest.py index 4204ed37..4bd678ac 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,9 +9,9 @@ import pytest if TYPE_CHECKING: + from collections.abc import Callable from pathlib import Path from types import ModuleType - from typing import Callable from pytest import MonkeyPatch diff --git a/tests/constraints/test_date_constraints.py b/tests/constraints/test_date_constraints.py index 2bc7a51e..fa9891a9 100644 --- a/tests/constraints/test_date_constraints.py +++ b/tests/constraints/test_date_constraints.py @@ -1,5 +1,4 @@ from datetime import date, timedelta -from typing import Optional import pytest from hypothesis import given @@ -16,8 +15,8 @@ ) @pytest.mark.parametrize(("start", "end"), (("ge", "le"), ("gt", "lt"), ("ge", "lt"), ("gt", "le"))) def test_handle_constrained_date( - start: Optional[str], - end: Optional[str], + start: str | None, + end: str | None, start_date: date, end_date: date, ) -> None: diff --git a/tests/constraints/test_get_field_value_constraints.py b/tests/constraints/test_get_field_value_constraints.py index 23063130..b98dfb4f 100644 --- a/tests/constraints/test_get_field_value_constraints.py +++ b/tests/constraints/test_get_field_value_constraints.py @@ -1,6 +1,6 @@ from datetime import date, datetime, timedelta from decimal import Decimal -from typing import Annotated, Union, cast +from typing import Annotated, cast import pytest @@ -9,7 +9,7 @@ @pytest.mark.parametrize("t", (int, float, Decimal)) -def test_numbers(t: type[Union[int, float, Decimal]]) -> None: +def test_numbers(t: type[int | float | Decimal]) -> None: constraints: Constraints = {"ge": 1, "le": 20} field_meta = FieldMeta.from_type(annotation=t, name="foo", constraints=constraints) value = BaseFactory.get_field_value(field_meta) @@ -19,7 +19,7 @@ def test_numbers(t: type[Union[int, float, Decimal]]) -> None: @pytest.mark.parametrize("t", (str, bytes)) -def test_str_and_bytes(t: type[Union[str, bytes]]) -> None: +def test_str_and_bytes(t: type[str | bytes]) -> None: constraints: Constraints = {"min_length": 20, "max_length": 45} field_meta = FieldMeta.from_type(annotation=t, name="foo", constraints=constraints) value = BaseFactory.get_field_value(field_meta) @@ -29,7 +29,7 @@ def test_str_and_bytes(t: type[Union[str, bytes]]) -> None: @pytest.mark.parametrize("t", (list[int], set[int], tuple[int], frozenset[int])) -def test_collections(t: type[Union[tuple, list, set, frozenset]]) -> None: +def test_collections(t: type[tuple | list | set | frozenset]) -> None: constraints: Constraints = { "min_length": 2, "max_length": 10, diff --git a/tests/constraints/test_list_constraints.py b/tests/constraints/test_list_constraints.py index 03994c0a..a84ac75d 100644 --- a/tests/constraints/test_list_constraints.py +++ b/tests/constraints/test_list_constraints.py @@ -1,12 +1,9 @@ -import sys from typing import Any import pytest from hypothesis import given from hypothesis.strategies import integers -from pydantic import VERSION - from polyfactory.exceptions import ParameterException from polyfactory.factories.pydantic_factory import ModelFactory, PydanticFieldMeta from polyfactory.value_generators.constrained_collections import ( @@ -74,10 +71,6 @@ def test_handle_constrained_list_with_min_items( assert len(result) >= min_items -@pytest.mark.skipif( - sys.version_info < (3, 9) and VERSION.startswith("2"), - reason="fails on python 3.8 with pydantic v2", -) @pytest.mark.parametrize("t_type", tuple(ModelFactory.get_provider_map())) def test_handle_constrained_list_with_different_types(t_type: Any) -> None: field_meta = PydanticFieldMeta.from_type(list[t_type], name="test") diff --git a/tests/models.py b/tests/models.py index f5178cf6..01f02e0a 100644 --- a/tests/models.py +++ b/tests/models.py @@ -1,5 +1,4 @@ from datetime import date, datetime -from typing import Optional, Union from uuid import uuid4 from pydantic import UUID4, BaseModel @@ -18,11 +17,11 @@ class Pet(BaseModel): class Person(BaseModel): id: UUID4 name: str - hobbies: Optional[list[str]] + hobbies: list[str] | None nicks: list[str] - age: Union[float, int] + age: float | int pets: list[Pet] - birthday: Union[datetime, date] + birthday: datetime | date class PersonFactoryWithoutDefaults(ModelFactory[Person]): diff --git a/tests/sqlalchemy_factory/test_sqlalchemy_factory_common.py b/tests/sqlalchemy_factory/test_sqlalchemy_factory_common.py index 274c9c9e..af924e1a 100644 --- a/tests/sqlalchemy_factory/test_sqlalchemy_factory_common.py +++ b/tests/sqlalchemy_factory/test_sqlalchemy_factory_common.py @@ -1,9 +1,9 @@ import warnings -from collections.abc import Collection +from collections.abc import Callable, Collection from datetime import datetime from decimal import Decimal from enum import Enum -from typing import Any, Callable, get_args +from typing import Any, get_args from uuid import UUID, uuid4 import pytest diff --git a/tests/test_attrs_factory.py b/tests/test_attrs_factory.py index c566ddae..3449e52f 100644 --- a/tests/test_attrs_factory.py +++ b/tests/test_attrs_factory.py @@ -1,7 +1,7 @@ import datetime as dt from decimal import Decimal from enum import Enum -from typing import Any, Generic, Optional, TypeVar, Union +from typing import Any, Generic, TypeVar from uuid import UUID import attrs @@ -222,9 +222,9 @@ class FooFactory(AttrsFactory[Foo]): def test_union_types() -> None: @define class A: - a: Union[list[str], list[int]] - b: Union[str, list[int]] - c: list[Union[tuple[int, int], tuple[str, int]]] + a: list[str] | list[int] + b: str | list[int] + c: list[tuple[int, int] | tuple[str, int]] AFactory = AttrsFactory.create_factory(A) @@ -242,8 +242,8 @@ class B: @define class C: - a: Union[list[A], list[B]] - b: list[Union[A, B]] + a: list[A] | list[B] + b: list[A | B] CFactory = AttrsFactory.create_factory(C) @@ -254,9 +254,9 @@ class C: def test_optional_type(allow_none: bool) -> None: @define class A: - a: Union[str, None] - b: Optional[str] - c: Optional[Union[str, int, list[int]]] + a: str | None + b: str | None + c: str | int | list[int] | None class AFactory(AttrsFactory[A]): __model__ = A diff --git a/tests/test_base_factories.py b/tests/test_base_factories.py index e71f6186..6bbc2a95 100644 --- a/tests/test_base_factories.py +++ b/tests/test_base_factories.py @@ -1,6 +1,7 @@ from abc import ABC, abstractmethod +from collections.abc import Callable from dataclasses import dataclass -from typing import Annotated, Any, Callable, NewType +from typing import Annotated, Any, NewType import pytest diff --git a/tests/test_collection_length.py b/tests/test_collection_length.py index 45232fba..a21f40e2 100644 --- a/tests/test_collection_length.py +++ b/tests/test_collection_length.py @@ -1,5 +1,5 @@ from enum import Enum -from typing import Annotated, Any, Literal, Optional, get_args +from typing import Annotated, Any, Literal, get_args import pytest from annotated_types import Len @@ -112,7 +112,7 @@ class FooFactory(DataclassFactory[Foo]): def test_collection_length_with_optional_not_allowed(min_val: int, max_val: int) -> None: @dataclass class Foo: - foo: Optional[list[int]] + foo: list[int] | None class FooFactory(DataclassFactory[Foo]): __model__ = Foo @@ -133,7 +133,7 @@ class FooFactory(DataclassFactory[Foo]): def test_collection_length_with_optional_allowed(min_val: int, max_val: int) -> None: @dataclass class Foo: - foo: Optional[list[int]] + foo: list[int] | None class FooFactory(DataclassFactory[Foo]): __model__ = Foo diff --git a/tests/test_complex_types.py b/tests/test_complex_types.py index cd30bccf..21e81539 100644 --- a/tests/test_complex_types.py +++ b/tests/test_complex_types.py @@ -1,15 +1,12 @@ from collections import defaultdict, deque -from collections.abc import Iterable, Sequence +from collections.abc import Callable, Iterable, Sequence from dataclasses import dataclass from enum import Enum from typing import ( Any, - Callable, Generic, Literal, - Optional, TypeVar, - Union, ) import pytest @@ -24,7 +21,7 @@ def test_handles_complex_typing() -> None: class MyModel(BaseModel): - nested_dict: dict[str, dict[Union[int, str], dict[Any, list[dict[str, str]]]]] + nested_dict: dict[str, dict[int | str, dict[Any, list[dict[str, str]]]]] dict_str_any: dict[str, Any] nested_list: list[list[list[dict[str, list[Any]]]]] sequence_literal: Sequence[Literal[1, 2, 3]] @@ -34,7 +31,7 @@ class MyModel(BaseModel): tuple_str_str: tuple[str, str] default_dict: defaultdict[str, list[dict[str, int]]] deque: deque[list[dict[str, int]]] - set_union: set[Union[str, int]] + set_union: set[str | int] frozen_set: frozenset[str] plain_list: list[Any] plain_set: set[Any] @@ -96,10 +93,10 @@ def test_randomizes_optional_returns() -> None: """this is a flaky test - because it depends on randomness, hence it's been re-ran multiple times.""" class MyModel(BaseModel): - optional_1: Optional[list[str]] - optional_2: Optional[dict[str, str]] - optional_3: Optional[set[str]] - optional_4: Optional[dict[int, str]] + optional_1: list[str] | None + optional_2: dict[str, str] | None + optional_3: set[str] | None + optional_4: dict[int, str] | None class MyFactory(ModelFactory): __model__ = MyModel @@ -150,7 +147,7 @@ class MyFactory(ModelFactory): def test_union_literal() -> None: class MyModel(BaseModel): - x: Union[int, Literal["a", "b", "c"]] + x: int | Literal["a", "b", "c"] class MyFactory(ModelFactory): __model__ = MyModel diff --git a/tests/test_data_parsing.py b/tests/test_data_parsing.py index 465874d9..5e3db6e5 100644 --- a/tests/test_data_parsing.py +++ b/tests/test_data_parsing.py @@ -1,6 +1,7 @@ +from collections.abc import Callable from datetime import date from enum import Enum -from typing import Callable, Literal, Optional +from typing import Literal import pytest @@ -142,7 +143,7 @@ class MySecondFactory(ModelFactory): ) def test_optional_url_field_parsed_correctly(type_: type) -> None: class MyModel(BaseModel): - url: Optional[type_] # type: ignore + url: type_ | None # type: ignore class MyFactory(ModelFactory[MyModel]): __model__ = MyModel diff --git a/tests/test_dataclass_factory.py b/tests/test_dataclass_factory.py index 96899bd7..2027cab0 100644 --- a/tests/test_dataclass_factory.py +++ b/tests/test_dataclass_factory.py @@ -1,11 +1,11 @@ import dataclasses import sys import textwrap -from collections.abc import Iterable +from collections.abc import Callable, Iterable from dataclasses import dataclass as vanilla_dataclass from dataclasses import field from types import ModuleType -from typing import Any, Callable, Optional, TypeVar, Union +from typing import Any, TypeVar from unittest.mock import ANY import pytest @@ -22,7 +22,7 @@ class VanillaDC: id: int name: str list_field: list[dict[str, int]] - field_of_some_value: Optional[int] = field(default_factory=lambda: 0) + field_of_some_value: int | None = field(default_factory=lambda: 0) class MyFactory(DataclassFactory[VanillaDC]): __model__ = VanillaDC @@ -43,7 +43,7 @@ class PydanticDC: id: int name: str list_field: list[dict[str, int]] - field_of_some_value: Optional[int] = field(default_factory=lambda: 0) + field_of_some_value: int | None = field(default_factory=lambda: 0) class MyFactory(DataclassFactory[PydanticDC]): __model__ = PydanticDC @@ -270,10 +270,10 @@ class FooFactory(DataclassFactory[Foo]): def test_union_types() -> None: @vanilla_dataclass class A: - a: Union[list[str], list[int]] - b: Union[str, list[int]] - c: list[Union[tuple[int, int], tuple[str, int]]] - d: Union[str, int] + a: list[str] | list[int] + b: str | list[int] + c: list[tuple[int, int] | tuple[str, int]] + d: str | int AFactory = DataclassFactory.create_factory(A) @@ -306,8 +306,8 @@ class B: @vanilla_dataclass class C: - a: Union[list[A], list[B]] - b: list[Union[A, B]] + a: list[A] | list[B] + b: list[A | B] CFactory = DataclassFactory.create_factory( C, @@ -336,9 +336,9 @@ def _get_types(items: Iterable[_T]) -> set[type[_T]]: def test_optional_type(allow_none: bool) -> None: @vanilla_dataclass class A: - a: Union[str, None] - b: Optional[str] - c: Optional[Union[str, int, list[int]]] + a: str | None + b: str | None + c: str | int | list[int] | None class AFactory(DataclassFactory[A]): __model__ = A diff --git a/tests/test_dicts.py b/tests/test_dicts.py index 2f2a65b0..7e51e8a1 100644 --- a/tests/test_dicts.py +++ b/tests/test_dicts.py @@ -1,5 +1,3 @@ -from typing import Union - import pytest from pydantic import VERSION, BaseModel @@ -32,7 +30,7 @@ class MyClassFactory(ModelFactory[MyClass]): ) def test_dict_with_union_random_types() -> None: class MyClass(BaseModel): - val: dict[str, Union[int, str]] + val: dict[str, int | str] class MyClassFactory(ModelFactory[MyClass]): __model__ = MyClass diff --git a/tests/test_factory_configuration.py b/tests/test_factory_configuration.py index 1e9c00c3..965cbd51 100644 --- a/tests/test_factory_configuration.py +++ b/tests/test_factory_configuration.py @@ -1,7 +1,6 @@ +from collections.abc import Callable from dataclasses import dataclass -from typing import Any, Callable - -from typing_extensions import TypeGuard +from typing import Any, TypeGuard from polyfactory.factories.base import BaseFactory, T from polyfactory.factories.dataclass_factory import DataclassFactory diff --git a/tests/test_factory_fields.py b/tests/test_factory_fields.py index bfb5af2c..ecfef0fc 100644 --- a/tests/test_factory_fields.py +++ b/tests/test_factory_fields.py @@ -2,7 +2,7 @@ import warnings from dataclasses import dataclass from datetime import datetime, timedelta -from typing import Any, ClassVar, Optional, Union +from typing import Any, ClassVar import pytest @@ -74,7 +74,7 @@ class MyFactory(ModelFactory): def test_ignored() -> None: class MyModel(BaseModel): - name: Optional[str] = None + name: str | None = None class MyFactory(ModelFactory): __model__ = MyModel @@ -177,7 +177,7 @@ def caption(cls, is_long: bool) -> str: ], ) def test_non_existing_model_fields_do_raise_on_check_model_false( - factory_field: Union[Use, PostGenerated, Require, Ignore], + factory_field: Use | PostGenerated | Require | Ignore, ) -> None: class NoFieldModel(BaseModel): pass @@ -195,7 +195,7 @@ class NoFieldModel(BaseModel): ], ) def test_non_existent_fields_raise( - factory_field: Union[Use, PostGenerated, Require, Ignore], + factory_field: Use | PostGenerated | Require | Ignore, ) -> None: class NoFieldModel(BaseModel): pass diff --git a/tests/test_generics.py b/tests/test_generics.py index 5cf55478..e1f34019 100644 --- a/tests/test_generics.py +++ b/tests/test_generics.py @@ -1,4 +1,4 @@ -from typing import Generic, Optional, TypeVar, Union +from typing import Generic, TypeVar from pydantic import BaseModel @@ -20,8 +20,8 @@ class Attributes(GenericModel, Generic[Inner]): # type: ignore class OneInner(BaseModel): one: str - id: Optional[int] - description: Optional[str] + id: int | None + description: str | None class OneResponse(BaseModel): @@ -30,8 +30,8 @@ class OneResponse(BaseModel): class TwoInner(BaseModel): two: str - id: Optional[int] - description: Optional[str] + id: int | None + description: str | None class TwoResponse(BaseModel): @@ -83,7 +83,7 @@ class APIResponseFactory(ModelFactory): def test_generic_factory_union_response() -> None: class APIResponseFactory(ModelFactory): - __model__ = APIResponse[Union[OneResponse, TwoResponse, ThreeResponse]] + __model__ = APIResponse[OneResponse | TwoResponse | ThreeResponse] result = APIResponseFactory.build() diff --git a/tests/test_msgspec_factory.py b/tests/test_msgspec_factory.py index 4f16eb65..005a3f7e 100644 --- a/tests/test_msgspec_factory.py +++ b/tests/test_msgspec_factory.py @@ -1,8 +1,7 @@ import datetime as dt -import sys from decimal import Decimal from enum import Enum -from typing import Annotated, Any, Generic, NewType, Optional, TypeVar, Union +from typing import Annotated, Any, Generic, NewType, TypeVar from uuid import UUID import msgspec @@ -130,7 +129,6 @@ class FooFactory(MsgspecFactory[Foo]): assert isinstance(foo.ext, msgspec.msgpack.Ext) -@pytest.mark.skipif(sys.version_info < (3, 9), reason="flaky in 3.8") def test_with_constraints() -> None: class Foo(Struct): int_field: Annotated[int, msgspec.Meta(ge=10, le=500, multiple_of=2)] @@ -150,7 +148,6 @@ class FooFactory(MsgspecFactory[Foo]): assert foo == validated_foo -@pytest.mark.skipif(sys.version_info < (3, 9), reason="flaky in 3.8") def test_dict_constraints() -> None: class Foo(Struct): dict_field: Annotated[dict[str, int], msgspec.Meta(min_length=1)] @@ -165,9 +162,8 @@ class FooFactory(MsgspecFactory[Foo]): assert foo == validated_foo -@pytest.mark.skipif(sys.version_info < (3, 9), reason="flaky in 3.8") @pytest.mark.parametrize("t", (dt.datetime, dt.time)) -def test_datetime_constraints(t: Union[type[dt.datetime], type[dt.time]]) -> None: +def test_datetime_constraints(t: type[dt.datetime] | type[dt.time]) -> None: class Foo(Struct): date_field: Annotated[t, msgspec.Meta(tz=True)] # type: ignore[valid-type] @@ -277,9 +273,9 @@ class FooFactory(MsgspecFactory[Foo]): def test_union_types() -> None: class A(Struct): - a: Union[list[str], int] - b: Union[str, list[int]] - c: list[Union[tuple[int, int], float]] + a: list[str] | int + b: str | list[int] + c: list[tuple[int, int] | float] AFactory = MsgspecFactory.create_factory(A) @@ -295,8 +291,8 @@ class B(Struct): a: str class C(Struct): - a: Union[list[A], str] - b: list[Union[A, int]] + a: list[A] | str + b: list[A | int] CFactory = MsgspecFactory.create_factory(C) @@ -306,12 +302,12 @@ class C(Struct): def test_constrained_union_types() -> None: class A(Struct): - a: Union[Annotated[list[str], Meta(min_length=10)], Annotated[int, Meta(ge=1000)]] - b: Union[list[Annotated[str, Meta(min_length=20)]], int] - c: Optional[Annotated[int, Meta(ge=1000)]] - d: Union[Annotated[list[int], Meta(min_length=100)], Annotated[str, Meta(min_length=100)]] - e: Optional[Union[Annotated[list[int], Meta(min_length=100)], Annotated[str, Meta(min_length=100)]]] - f: Optional[Union[Annotated[list[int], Meta(min_length=100)], str]] + a: Annotated[list[str], Meta(min_length=10)] | Annotated[int, Meta(ge=1000)] + b: list[Annotated[str, Meta(min_length=20)]] | int + c: Annotated[int, Meta(ge=1000)] | None + d: Annotated[list[int], Meta(min_length=100)] | Annotated[str, Meta(min_length=100)] + e: Annotated[list[int], Meta(min_length=100)] | Annotated[str, Meta(min_length=100)] | None + f: Annotated[list[int], Meta(min_length=100)] | str | None AFactory = MsgspecFactory.create_factory(A, __allow_none_optionals__=False) @@ -322,9 +318,9 @@ class A(Struct): @pytest.mark.parametrize("allow_none", (True, False)) def test_optional_type(allow_none: bool) -> None: class A(Struct): - a: Union[str, None] - b: Optional[str] - c: Optional[Union[str, int, list[int]]] + a: str | None + b: str | None + c: str | int | list[int] | None class AFactory(MsgspecFactory[A]): __model__ = A diff --git a/tests/test_new_types.py b/tests/test_new_types.py index 10ed748a..dc6d8826 100644 --- a/tests/test_new_types.py +++ b/tests/test_new_types.py @@ -1,8 +1,9 @@ import sys +from collections.abc import Callable from datetime import date from decimal import Decimal from types import ModuleType -from typing import Any, Callable, NewType, Optional, Union +from typing import Any, NewType import pytest @@ -52,11 +53,11 @@ class NestedModel(BaseModel): class MyModel(BaseModel): list_int_field: list[MyInt] - union_field: Union[MyInt, MyStr] - optional_str_field: Optional[MyStr] + union_field: MyInt | MyStr + optional_str_field: MyStr | None tuple_str_str: tuple[MyStr, MyStr] dict_field: dict[MyStr, Any] - complex_dict_field: dict[MyStr, dict[Union[MyInt, MyStr], MyInt]] + complex_dict_field: dict[MyStr, dict[MyInt | MyStr, MyInt]] nested_model_field: MyNestedModel class MyModelFactory(ModelFactory): diff --git a/tests/test_passing_build_args_to_child_factories.py b/tests/test_passing_build_args_to_child_factories.py index a4657b32..d874c750 100644 --- a/tests/test_passing_build_args_to_child_factories.py +++ b/tests/test_passing_build_args_to_child_factories.py @@ -1,5 +1,4 @@ from collections.abc import Mapping -from typing import Optional from pydantic import BaseModel @@ -101,7 +100,7 @@ def test_factory_child_none() -> None: class PersonOptional(BaseModel): name: str - address: Optional[Address] + address: Address | None class PersonOptionalFactory(ModelFactory): __model__ = PersonOptional @@ -185,7 +184,7 @@ class MyChildModel(BaseModel): name: str class MyParentModel(BaseModel): - child: Optional[MyChildModel] + child: MyChildModel | None class MyParentModelFactory(ModelFactory): __model__ = MyParentModel diff --git a/tests/test_provider_map.py b/tests/test_provider_map.py index 31e257dd..e88dc19b 100644 --- a/tests/test_provider_map.py +++ b/tests/test_provider_map.py @@ -1,5 +1,6 @@ +from collections.abc import Callable from dataclasses import dataclass -from typing import Any, Callable, Generic, TypeVar +from typing import Any, Generic, TypeVar import pytest diff --git a/tests/test_pydantic_factory.py b/tests/test_pydantic_factory.py index 32985d85..6e5bbef0 100644 --- a/tests/test_pydantic_factory.py +++ b/tests/test_pydantic_factory.py @@ -2,19 +2,18 @@ import sys import textwrap from collections import Counter, deque -from collections.abc import Sequence +from collections.abc import Callable, Sequence from dataclasses import dataclass from datetime import date, datetime, time, timedelta from decimal import Decimal from ipaddress import IPv4Address, IPv4Interface, IPv4Network, IPv6Address, IPv6Interface, IPv6Network from pathlib import Path from types import ModuleType -from typing import Annotated, Any, Callable, Literal, Optional, Union +from typing import Annotated, Any, Literal, TypeAlias from uuid import UUID import pytest from annotated_types import Ge, Gt, Le, LowerCase, Lt, MaxLen, MinLen, UpperCase -from typing_extensions import TypeAlias import pydantic from pydantic import ( @@ -93,7 +92,7 @@ class AFactory(ModelFactory[A]): def test_optional_with_constraints() -> None: class A(BaseModel): - a: Optional[float] = Field(None, ge=0, le=1) + a: float | None = Field(None, ge=0, le=1) class AFactory(ModelFactory[A]): __model__ = A @@ -106,7 +105,6 @@ class AFactory(ModelFactory[A]): assert isinstance(AFactory.build().a, float) -@pytest.mark.skipif(sys.version_info < (3, 10), reason="requires python3.9 or higher") def test_list_unions() -> None: # issue: https://github.com/litestar-org/polyfactory/issues/300, no error reproduced class A(BaseModel): @@ -296,7 +294,7 @@ def test_factory_use_examples_coverage() -> None: class Foo(BaseModel): name: str = Field(examples=example_strings) - number: Optional[Union[int, float]] = Field(examples=example_numbers) + number: int | float | None = Field(examples=example_numbers) class FooFactory(ModelFactory[Foo]): __use_examples__ = True @@ -363,7 +361,7 @@ class ParentFactory(ModelFactory[Parent]): @pytest.mark.parametrize("set_type", (frozenset, set)) -def test_factory_use_construct_nested_set(set_type: Union[type[frozenset], type[set]]) -> None: +def test_factory_use_construct_nested_set(set_type: type[frozenset] | type[set]) -> None: class Child(BaseModel): invalid: int = Field() @@ -695,7 +693,7 @@ class MyFactory(ModelFactory): ) def test_optional_url_field_parsed_correctly(type_: TypeAlias) -> None: class MyModel(BaseModel): - url: Optional[type_] + url: type_ | None class MyFactory(ModelFactory[MyModel]): __model__ = MyModel @@ -722,16 +720,15 @@ class MyFactory(ModelFactory[MyModel]): def test_union_types() -> None: class A(BaseModel): - a: Union[list[str], list[int]] - b: Union[str, list[int]] - c: list[Union[tuple[int, int], tuple[str, int]]] + a: list[str] | list[int] + b: str | list[int] + c: list[tuple[int, int] | tuple[str, int]] AFactory = ModelFactory.create_factory(A) assert AFactory.build() -@pytest.mark.skipif(sys.version_info < (3, 10), reason="requires modern union types") @pytest.mark.skipif(IS_PYDANTIC_V1, reason="pydantic 2 only test") def test_optional_custom_type() -> None: from pydantic_core import core_schema @@ -745,7 +742,7 @@ def __get_pydantic_core_schema__(self, _: Any) -> core_schema.StringSchema: return core_schema.str_schema() class OptionalFormOne(BaseModel): - optional_custom_type: Optional[CustomType] + optional_custom_type: CustomType | None @classmethod def should_set_none_value(cls, field_meta: FieldMeta) -> bool: @@ -782,8 +779,8 @@ class B(BaseModel): a: str class C(BaseModel): - a: Union[list[A], list[B]] - b: list[Union[A, B]] + a: list[A] | list[B] + b: list[A | B] CFactory = ModelFactory.create_factory(C) @@ -793,18 +790,17 @@ class C(BaseModel): @pytest.mark.skipif(IS_PYDANTIC_V2, reason="pydantic 1 only test") def test_constrained_union_types_pydantic_v1() -> None: class A(BaseModel): - a: Union[Annotated[list[str], MinLen(100)], Annotated[int, Ge(1000)]] - b: Union[list[Annotated[str, MinLen(100)]], int] - c: Union[Annotated[list[int], MinLen(100)], None] - d: Union[Annotated[list[int], MinLen(100)], Annotated[list[str], MaxLen(99)]] - e: Optional[Union[Annotated[list[int], MinLen(10)], Annotated[list[str], MaxLen(9)]]] - f: Optional[Union[Annotated[list[int], MinLen(10)], list[str]]] - g: Optional[ - Union[ - Annotated[list[int], MinLen(10)], - Union[Annotated[list[str], MaxLen(9)], Annotated[Decimal, Field(max_digits=4, decimal_places=2)]], - ] - ] + a: Annotated[list[str], MinLen(100)] | Annotated[int, Ge(1000)] + b: list[Annotated[str, MinLen(100)]] | int + c: Annotated[list[int], MinLen(100)] | None + d: Annotated[list[int], MinLen(100)] | Annotated[list[str], MaxLen(99)] + e: Annotated[list[int], MinLen(10)] | Annotated[list[str], MaxLen(9)] | None + f: Annotated[list[int], MinLen(10)] | list[str] | None + g: None | ( + Annotated[list[int], MinLen(10)] + | Annotated[list[str], MaxLen(9)] + | Annotated[Decimal, Field(max_digits=4, decimal_places=2)] + ) AFactory = ModelFactory.create_factory(A, __allow_none_optionals__=False) @@ -814,23 +810,20 @@ class A(BaseModel): @pytest.mark.skipif(IS_PYDANTIC_V1, reason="pydantic 2 only test") def test_constrained_union_types_pydantic_v2() -> None: class A(BaseModel): - a: Union[Annotated[list[str], MinLen(100)], Annotated[int, Ge(1000)]] - b: Union[list[Annotated[str, MinLen(100)]], int] - c: Union[Annotated[list[int], MinLen(100)], None] - d: Union[Annotated[list[int], MinLen(100)], Annotated[list[str], MaxLen(99)]] - e: Optional[ - Union[Annotated[list[Annotated[int, Gt(100), Lt(105)]], MinLen(10)], Annotated[list[str], MaxLen(9)]] - ] - f: Optional[Union[Annotated[list[int], MinLen(10)], list[str]]] - g: Optional[ - Union[ - Annotated[list[int], MinLen(10)], - Union[Annotated[list[str], MaxLen(9)], Annotated[Decimal, Field(max_digits=4, decimal_places=2)]], - ] - ] + a: Annotated[list[str], MinLen(100)] | Annotated[int, Ge(1000)] + b: list[Annotated[str, MinLen(100)]] | int + c: Annotated[list[int], MinLen(100)] | None + d: Annotated[list[int], MinLen(100)] | Annotated[list[str], MaxLen(99)] + e: None | (Annotated[list[Annotated[int, Gt(100), Lt(105)]], MinLen(10)] | Annotated[list[str], MaxLen(9)]) + f: Annotated[list[int], MinLen(10)] | list[str] | None + g: None | ( + Annotated[list[int], MinLen(10)] + | Annotated[list[str], MaxLen(9)] + | Annotated[Decimal, Field(max_digits=4, decimal_places=2)] + ) # This annotation is not allowed in pydantic 1 - h: Annotated[Union[list[int], list[str]], MinLen(10)] - i: Annotated[Union[int, float], Field(gt=5, lt=7)] + h: Annotated[list[int] | list[str], MinLen(10)] + i: Annotated[int | float, Field(gt=5, lt=7)] AFactory = ModelFactory.create_factory(A, __allow_none_optionals__=False) @@ -841,9 +834,9 @@ class A(BaseModel): @pytest.mark.parametrize("allow_none", (True, False)) def test_optional_type(allow_none: bool) -> None: class A(BaseModel): - a: Union[str, None] - b: Optional[str] - c: Optional[Union[str, int, list[int]]] + a: str | None + b: str | None + c: str | int | list[int] | None class AFactory(ModelFactory[A]): __model__ = A @@ -870,7 +863,7 @@ class Dog(BasePet): class Owner(BaseModel): pet: Annotated[ - Union[Annotated[Union[BlackCat, WhiteCat], Field(discriminator="color")], Dog], + Annotated[BlackCat | WhiteCat, Field(discriminator="color")] | Dog, Field(discriminator="pet_type"), ] name: str @@ -905,7 +898,7 @@ class LocationFactory(ModelFactory[Location]): def test_optional_tuple_with_annotated_constraints() -> None: class Location(BaseModel): - long_lat: Union[tuple[Annotated[float, Ge(-180), Le(180)], Annotated[float, Ge(-90), Le(90)]], None] + long_lat: tuple[Annotated[float, Ge(-180), Le(180)], Annotated[float, Ge(-90), Le(90)]] | None class LocationFactory(ModelFactory[Location]): __model__ = Location @@ -925,7 +918,7 @@ class LocationFactory(ModelFactory[Location]): def test_legacy_optional_tuple_with_annotated_constraints() -> None: class Location(BaseModel): - long_lat: Union[tuple[Annotated[float, Ge(-180), Le(180)], Annotated[float, Ge(-90), Le(90)]], None] + long_lat: tuple[Annotated[float, Ge(-180), Le(180)], Annotated[float, Ge(-90), Le(90)]] | None class LocationFactory(ModelFactory[Location]): __model__ = Location @@ -952,7 +945,7 @@ class ConstrainedModel(BaseModel): decimal_field: Decimal = Field(ge=100, le=1000) list_field: list[str] = Field(min_items=1, max_items=10) # type: ignore[call-overload] constant_field: int = Field(const=True, default=100) # type: ignore[call-overload] - optional_field: Optional[constr(min_length=1)] # type: ignore[valid-type] + optional_field: constr(min_length=1) | None # type: ignore[valid-type] class MyFactory(ModelFactory): __model__ = ConstrainedModel @@ -1085,10 +1078,6 @@ class MyFactory(ModelFactory): assert result.my_str_dict_field -@pytest.mark.skipif( - IS_PYDANTIC_V1 or sys.version_info < (3, 9), - reason="pydantic 2 only test, does not work correctly in py 3.8", -) def test_nested_constrained_attribute_handling_pydantic_2() -> None: # subclassing the constrained fields is not documented by pydantic, # but is supported apparently @@ -1137,7 +1126,7 @@ class ConstrainedModel(BaseModel): float_field: float = Field(gt=100, lt=1000) decimal_field: Decimal = Field(ge=100, le=1000) list_field: list[str] = Field(min_length=1, max_length=10) - optional_field: Optional[constr(min_length=1)] # type: ignore[valid-type] + optional_field: constr(min_length=1) | None # type: ignore[valid-type] class MyFactory(ModelFactory): __model__ = ConstrainedModel diff --git a/tests/test_pydantic_v1_v2.py b/tests/test_pydantic_v1_v2.py index 05fcd813..3b51bf20 100644 --- a/tests/test_pydantic_v1_v2.py +++ b/tests/test_pydantic_v1_v2.py @@ -1,7 +1,7 @@ """Tests to check that usage of pydantic v1 and v2 at the same time works.""" import sys -from typing import Annotated, Optional, Union +from typing import Annotated import pytest @@ -32,7 +32,7 @@ BaseModelV2, ], ) -def test_is_supported_type(base_model: type[Union[BaseModelV1, BaseModelV2]]) -> None: +def test_is_supported_type(base_model: type[BaseModelV1 | BaseModelV2]) -> None: class Foo(base_model): # type: ignore[valid-type, misc] ... @@ -46,7 +46,7 @@ class Foo(base_model): # type: ignore[valid-type, misc] BaseModelV2, ], ) -def test_build(base_model: type[Union[BaseModelV1, BaseModelV2]]) -> None: +def test_build(base_model: type[BaseModelV1 | BaseModelV2]) -> None: class Foo(base_model): # type: ignore[valid-type, misc] a: int b: str @@ -70,9 +70,9 @@ def test_build_v1_with_constrained_fields() -> None: class Foo(BaseModelV1): a: ConstrainedInt b: ConstrainedStr - c: Union[ConstrainedInt, ConstrainedStr] - d: Optional[ConstrainedInt] - e: Optional[Union[ConstrainedInt, ConstrainedStr]] + c: ConstrainedInt | ConstrainedStr + d: ConstrainedInt | None + e: ConstrainedInt | ConstrainedStr | None f: list[ConstrainedInt] g: dict[ConstrainedInt, ConstrainedStr] @@ -88,9 +88,9 @@ def test_build_v2_with_constrained_fields() -> None: class Foo(pydantic.BaseModel): # pyright: ignore[reportGeneralTypeIssues] a: ConstrainedInt b: ConstrainedStr - c: Union[ConstrainedInt, ConstrainedStr] - d: Optional[ConstrainedInt] - e: Optional[Union[ConstrainedInt, ConstrainedStr]] + c: ConstrainedInt | ConstrainedStr + d: ConstrainedInt | None + e: ConstrainedInt | ConstrainedStr | None f: list[ConstrainedInt] g: dict[ConstrainedInt, ConstrainedStr] diff --git a/tests/test_random_configuration.py b/tests/test_random_configuration.py index ec06b3be..08c0f2b5 100644 --- a/tests/test_random_configuration.py +++ b/tests/test_random_configuration.py @@ -1,6 +1,5 @@ from dataclasses import dataclass from random import Random -from typing import Union import pytest from faker import Faker @@ -8,7 +7,7 @@ from polyfactory.factories.dataclass_factory import DataclassFactory -FakerLocaleType = Union[str, list[str]] +FakerLocaleType = str | list[str] RANDINT_MAP = {i: Random(i).randint(0, 10) for i in range(3)} FAKER_LOCALES: list[FakerLocaleType] = [ diff --git a/tests/test_random_seed.py b/tests/test_random_seed.py index f8996d4c..cbc2f403 100644 --- a/tests/test_random_seed.py +++ b/tests/test_random_seed.py @@ -1,5 +1,4 @@ from random import randint -from typing import Optional from pydantic import VERSION, BaseModel, Field @@ -28,7 +27,7 @@ class MyModelFactory(ModelFactory): def test_deterministic_optionals_seeding() -> None: class ModelWithOptionalValues(BaseModel): - name: Optional[str] + name: str | None class FactoryWithNoneOptionals(ModelFactory): __model__ = ModelWithOptionalValues diff --git a/tests/test_recursive_models.py b/tests/test_recursive_models.py index 2e17c8cb..ef81d73a 100644 --- a/tests/test_recursive_models.py +++ b/tests/test_recursive_models.py @@ -2,7 +2,7 @@ from collections.abc import Iterable from dataclasses import dataclass, field -from typing import Any, TypeVar, Union +from typing import Any, TypeVar import pytest @@ -19,9 +19,9 @@ class _Sentinel: ... @dataclass class Node: value: int - union_child: Union[Node, int] # noqa: UP007 + union_child: Node | int list_child: list[Node] - optional_child: Union[Node, None] # noqa: UP007 + optional_child: Node | None child: Node = field(default=_Sentinel) # type: ignore[assignment] def __post_init__(self) -> None: @@ -44,10 +44,10 @@ def test_recursive_model() -> None: class PydanticNode(BaseModel): value: int - union_child: Union[PydanticNode, int] # noqa: UP007 + union_child: PydanticNode | int list_child: list[PydanticNode] - optional_union_child: Union[PydanticNode, None] # noqa: UP007 - optional_child: Union[PydanticNode, None] # noqa: UP007 + optional_union_child: PydanticNode | None + optional_child: PydanticNode | None child: PydanticNode = Field(default=_Sentinel) # type: ignore[assignment] recursive_key: dict[PydanticNode, Any] recursive_value: dict[str, PydanticNode] @@ -108,7 +108,7 @@ class RecursiveTypeModel(BaseModel): assert _get_types(result.json_value for result in factory.coverage()) == valid_types -RecursiveType = Union[list["RecursiveType"], int] +RecursiveType = list["RecursiveType"] | int def test_recursive_model_with_forward_ref() -> None: diff --git a/tests/test_type_coverage_generation.py b/tests/test_type_coverage_generation.py index 73f28c56..b1c3e5e7 100644 --- a/tests/test_type_coverage_generation.py +++ b/tests/test_type_coverage_generation.py @@ -4,7 +4,7 @@ from collections.abc import Iterable from dataclasses import dataclass, make_dataclass from datetime import date -from typing import Any, Literal, Optional, Union +from typing import Any, Literal, Union from uuid import UUID import pytest @@ -25,9 +25,9 @@ def test_coverage_count() -> None: @dataclass class Profile: name: str - high_score: Union[int, float] + high_score: int | float dob: date - data: Union[str, date, int, float] + data: str | date | int | float class ProfileFactory(DataclassFactory[Profile]): __model__ = Profile @@ -43,7 +43,7 @@ class ProfileFactory(DataclassFactory[Profile]): def test_coverage_tuple() -> None: @dataclass class Pair: - tuple_: tuple[Union[int, str], tuple[Union[int, float], int]] + tuple_: tuple[int | str, tuple[int | float, int]] class TupleFactory(DataclassFactory[Pair]): __model__ = Pair @@ -105,8 +105,8 @@ def test_coverage_dict() -> None: @dataclass class Thesaurus: dict_simple: dict[str, int] - dict_more_key_types: dict[Union[str, int, float], Union[int, str]] - dict_more_value_types: dict[str, Union[int, str]] + dict_more_key_types: dict[str | int | float, int | str] + dict_more_value_types: dict[str, int | str] class ThesaurusFactory(DataclassFactory[Thesaurus]): __model__ = Thesaurus @@ -120,7 +120,7 @@ class ThesaurusFactory(DataclassFactory[Thesaurus]): def test_coverage_recursive() -> None: @dataclass class Recursive: - r: Union[Recursive, None] + r: Recursive | None class RecursiveFactory(DataclassFactory[Recursive]): __model__ = Recursive @@ -133,8 +133,8 @@ def test_coverage_typed_dict() -> None: class TypedThesaurus(TypedDict): number: int string: str - union: Union[int, str] - collection: list[Union[int, str]] + union: int | str + collection: list[int | str] class TypedThesaurusFactory(TypedDictFactory[TypedThesaurus]): __model__ = TypedThesaurus @@ -152,8 +152,8 @@ def test_coverage_typed_dict_field() -> None: class TypedThesaurus(TypedDict): number: int string: str - union: Union[int, str] - collection: list[Union[int, str]] + union: int | str + collection: list[int | str] class TypedThesaurusFactory(TypedDictFactory[TypedThesaurus]): __model__ = TypedThesaurus @@ -172,7 +172,7 @@ def test_coverage_values_unique() -> None: @dataclass class Unique: uuid: UUID - data: Union[int, str] + data: int | str class UniqueFactory(DataclassFactory[Unique]): __model__ = Unique @@ -223,7 +223,7 @@ class Factory(DataclassFactory[Model]): def test_coverage_optional_field() -> None: @dataclass class OptionalInt: - i: Union[int, None] + i: int | None class OptionalIntFactory(DataclassFactory[OptionalInt]): __model__ = OptionalInt @@ -235,11 +235,11 @@ class OptionalIntFactory(DataclassFactory[OptionalInt]): assert results[1].i is None -def type_exists_at_path_any(objs: Iterable, path: list[Union[int, str]], target_type: type) -> bool: +def type_exists_at_path_any(objs: Iterable, path: list[int | str], target_type: type) -> bool: return any(type_exists_at_path(obj, path, target_type) for obj in objs) -def type_exists_at_path(obj: Any, path: list[Union[int, str]], target_type: type) -> bool: +def type_exists_at_path(obj: Any, path: list[int | str], target_type: type) -> bool: """Determine if a type exists at a path through a given object type_exists_at_path(obj, ["i", "*"], int) @@ -275,7 +275,7 @@ def type_exists_at_path(obj: Any, path: list[Union[int, str]], target_type: type return type_exists_at_path(item, path[1:], target_type) -def get_or_index(obj: Any, idx: Union[int, str]) -> tuple[Any, bool]: +def get_or_index(obj: Any, idx: int | str) -> tuple[Any, bool]: if isinstance(idx, str): if idx not in dir(obj): return None, False @@ -290,7 +290,7 @@ def get_or_index(obj: Any, idx: Union[int, str]) -> tuple[Any, bool]: def test_coverage_optional_list() -> None: @dataclass class OptionalIntList: - i: Union[list[int], None] + i: list[int] | None class OptionalIntFactory(DataclassFactory[OptionalIntList]): __model__ = OptionalIntList @@ -305,8 +305,8 @@ class OptionalIntFactory(DataclassFactory[OptionalIntList]): def test_optional_lists() -> None: class Model(BaseModel): just_a_list: list[int] - optional_list: Optional[list[int]] - optional_nested_list: Optional[list[list[list[int]]]] + optional_list: list[int] | None + optional_nested_list: list[list[list[int]]] | None results = list(ModelFactory.create_factory(Model).coverage()) assert type_exists_at_path_any(results, ["just_a_list"], list) @@ -340,7 +340,7 @@ class Model(BaseModel): def test_optional_list_uuid() -> None: class Model(BaseModel): - maybe_uuids: Optional[list[UUID]] + maybe_uuids: list[UUID] | None results = list(ModelFactory.create_factory(Model).coverage()) assert type_exists_at_path_any(results, ["maybe_uuids"], list) @@ -350,7 +350,7 @@ class Model(BaseModel): def test_optional_set_uuid() -> None: class Model(BaseModel): - maybe_uuids: Optional[set[UUID]] + maybe_uuids: set[UUID] | None results = list(ModelFactory.create_factory(Model).coverage()) assert type_exists_at_path_any(results, ["maybe_uuids"], set) @@ -364,7 +364,7 @@ class Model(BaseModel): ) def test_optional_mixed_collections() -> None: class Model(BaseModel): - maybe_uuids: Union[set[UUID], list[UUID]] | None + maybe_uuids: set[UUID] | list[UUID] | None results = list(ModelFactory.create_factory(Model).coverage()) assert type_exists_at_path_any(results, ["maybe_uuids"], set) diff --git a/tests/test_typeddict_factory.py b/tests/test_typeddict_factory.py index 572a4e12..ee3e0b83 100644 --- a/tests/test_typeddict_factory.py +++ b/tests/test_typeddict_factory.py @@ -1,4 +1,4 @@ -from typing import Annotated, Optional +from typing import Annotated from annotated_types import Ge from typing_extensions import NotRequired, Required, TypedDict @@ -13,7 +13,7 @@ class TypedDictModel(TypedDict): id: int name: str list_field: list[dict[str, int]] - int_field: Optional[int] + int_field: int | None def test_factory_with_typeddict() -> None: @@ -34,7 +34,7 @@ class MyModel(BaseModel): td: TypedDictModel name: str list_field: list[dict[str, int]] - int_field: Optional[int] + int_field: int | None class MyFactory(ModelFactory[MyModel]): __model__ = MyModel @@ -54,7 +54,7 @@ class TypedDictModel(TypedDict): name: NotRequired[str] annotated: Required[Annotated[int, Ge(100)]] list_field: list[dict[str, int]] - optional_int: Required[Optional[int]] + optional_int: Required[int | None] class TypedDictModelFactory(TypedDictFactory[TypedDictModel]): __model__ = TypedDictModel @@ -74,7 +74,7 @@ class TypedDictModel(TypedDict, total=False): id: Required[int] name: str list_field: list[dict[str, int]] - optional_int: Optional[int] + optional_int: int | None class TypedDictModelFactory(TypedDictFactory[TypedDictModel]): __model__ = TypedDictModel diff --git a/tests/test_utils.py b/tests/test_utils.py index 6df7bd77..cdd24337 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,9 +1,10 @@ import random import sys import textwrap +from collections.abc import Callable from decimal import Decimal from types import ModuleType -from typing import Any, Callable, NewType, Union +from typing import Any, NewType import pytest from hypothesis import given @@ -21,7 +22,7 @@ def test_is_union() -> None: class UnionTest(BaseModel): - union: Union[int, str] + union: int | str no_union: Any class UnionTestFactory(ModelFactory): @@ -34,21 +35,20 @@ class UnionTestFactory(ModelFactory): assert not is_union(field_meta.annotation) # for python 3.10 we need to run the test as well with the union_pipe operator - if sys.version_info >= (3, 10): - class UnionTestWithPipe(BaseModel): - union_pipe: int | str | None # Pipe syntax supported from Python 3.10 onwards - union_normal: Union[int, str] - no_union: Any + class UnionTestWithPipe(BaseModel): + union_pipe: int | str | None # Pipe syntax supported from Python 3.10 onwards + union_normal: int | str + no_union: Any - class UnionTestWithPipeFactory(ModelFactory): - __model__ = UnionTestWithPipe + class UnionTestWithPipeFactory(ModelFactory): + __model__ = UnionTestWithPipe - for field_meta in UnionTestWithPipeFactory.get_model_fields(): - if field_meta.name in ("union_pipe", "union_normal"): - assert is_union(field_meta.annotation) - else: - assert not is_union(field_meta.annotation) + for field_meta in UnionTestWithPipeFactory.get_model_fields(): + if field_meta.name in ("union_pipe", "union_normal"): + assert is_union(field_meta.annotation) + else: + assert not is_union(field_meta.annotation) def test_is_new_type() -> None: diff --git a/tests/utils/test_normalize_type.py b/tests/utils/test_normalize_type.py index f1b652c9..61f39dd1 100644 --- a/tests/utils/test_normalize_type.py +++ b/tests/utils/test_normalize_type.py @@ -1,7 +1,8 @@ import sys import textwrap +from collections.abc import Callable from types import ModuleType -from typing import Annotated, Any, Callable, get_args, get_origin +from typing import Annotated, Any, get_args, get_origin import annotated_types as at import pytest diff --git a/tests/utils/test_predicates.py b/tests/utils/test_predicates.py index 71844126..331dbda1 100644 --- a/tests/utils/test_predicates.py +++ b/tests/utils/test_predicates.py @@ -1,4 +1,4 @@ -from typing import Literal, Union +from typing import Literal import pytest @@ -9,8 +9,8 @@ "annotation,expected", [ (Literal[1, 2, 3], True), - (Union[int, str], False), - (Union[Literal[1], Literal[2]], False), # noqa: PYI030 + (int | str, False), + (Literal[1] | Literal[2], False), # noqa: PYI030 (int, False), ], ) diff --git a/tools/build_docs.py b/tools/build_docs.py index 608fbb78..edee3342 100644 --- a/tools/build_docs.py +++ b/tools/build_docs.py @@ -30,14 +30,14 @@ @contextmanager -def checkout(branch: str) -> Generator[None, None, None]: - subprocess.run(["git", "checkout", branch], check=True) # noqa: S603 S607 +def checkout(branch: str) -> Generator[None]: + subprocess.run(["git", "checkout", branch], check=True) # noqa: S603, S607 yield - subprocess.run(["git", "checkout", "-"], check=True) # noqa: S603 S607 + subprocess.run(["git", "checkout", "-"], check=True) # noqa: S603, S607 def build(output: str) -> None: - subprocess.run(["make", "docs"], check=True) # noqa: S603 S607 + subprocess.run(["make", "docs"], check=True) # noqa: S603, S607 output_dir = Path(output) output_dir.mkdir() diff --git a/uv.lock b/uv.lock index 6d821824..5f180eb4 100644 --- a/uv.lock +++ b/uv.lock @@ -1,12 +1,11 @@ version = 1 -revision = 3 -requires-python = ">=3.9, <4.0" +revision = 2 +requires-python = ">=3.10, <4.0" resolution-markers = [ "python_full_version >= '3.13'", "python_full_version >= '3.11' and python_full_version < '3.13'", "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", - "python_full_version < '3.10'", + "python_full_version < '3.10.2'", ] [[package]] @@ -21,28 +20,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl", hash = "sha256:2549cf4057f95f53dcba16f2b64e8e2791d7e1adedb13197dd8ed77bb226d7d0", size = 15792, upload-time = "2025-02-03T07:30:13.6Z" }, ] -[[package]] -name = "alabaster" -version = "0.7.16" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/c9/3e/13dd8e5ed9094e734ac430b5d0eb4f2bb001708a8b7856cbf8e084e001ba/alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65", size = 23776, upload-time = "2024-01-10T00:56:10.189Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92", size = 13511, upload-time = "2024-01-10T00:56:08.388Z" }, -] - [[package]] name = "alabaster" version = "1.0.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210, upload-time = "2024-07-26T18:15:03.762Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929, upload-time = "2024-07-26T18:15:02.05Z" }, @@ -79,8 +60,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "apeye-core" }, { name = "domdf-python-tools" }, - { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "platformdirs", version = "4.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "platformdirs" }, { name = "requests" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4f/6b/cc65e31843d7bfda8313a9dc0c77a21e8580b782adca53c7cb3e511fe023/apeye-1.4.1.tar.gz", hash = "sha256:14ea542fad689e3bfdbda2189a354a4908e90aee4bf84c15ab75d68453d76a36", size = 99219, upload-time = "2023-08-14T15:32:41.381Z" } @@ -127,8 +107,7 @@ name = "autodocsumm" version = "0.2.14" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/03/96/92afe8a7912b327c01f0a8b6408c9556ee13b1aba5b98d587ac7327ff32d/autodocsumm-0.2.14.tar.gz", hash = "sha256:2839a9d4facc3c4eccd306c08695540911042b46eeafcdc3203e6d0bab40bc77", size = 46357, upload-time = "2024-10-23T18:51:47.369Z" } @@ -159,8 +138,7 @@ name = "beanie" version = "1.30.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "click", version = "8.3.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "click" }, { name = "lazy-model" }, { name = "motor" }, { name = "pydantic" }, @@ -185,40 +163,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/94/fe/3aed5d0be4d404d12d36ab97e2f1791424d9ca39c2f754a6285d59a3b01d/beautifulsoup4-4.14.2-py3-none-any.whl", hash = "sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515", size = 106392, upload-time = "2025-09-29T10:05:43.771Z" }, ] -[[package]] -name = "cachecontrol" -version = "0.14.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "msgpack", marker = "python_full_version < '3.10'" }, - { name = "requests", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/58/3a/0cbeb04ea57d2493f3ec5a069a117ab467f85e4a10017c6d854ddcbff104/cachecontrol-0.14.3.tar.gz", hash = "sha256:73e7efec4b06b20d9267b441c1f733664f989fb8688391b670ca812d70795d11", size = 28985, upload-time = "2025-04-30T16:45:06.135Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/4c/800b0607b00b3fd20f1087f80ab53d6b4d005515b0f773e4831e37cfa83f/cachecontrol-0.14.3-py3-none-any.whl", hash = "sha256:b35e44a3113f17d2a31c1e6b27b9de6d4405f84ae51baa8c1d3cc5b633010cae", size = 21802, upload-time = "2025-04-30T16:45:03.863Z" }, -] - -[package.optional-dependencies] -filecache = [ - { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, -] - [[package]] name = "cachecontrol" version = "0.14.4" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] dependencies = [ - { name = "msgpack", marker = "python_full_version >= '3.10'" }, - { name = "requests", marker = "python_full_version >= '3.10'" }, + { name = "msgpack" }, + { name = "requests" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2d/f6/c972b32d80760fb79d6b9eeb0b3010a46b89c0b23cf6329417ff7886cd22/cachecontrol-0.14.4.tar.gz", hash = "sha256:e6220afafa4c22a47dd0badb319f84475d79108100d04e26e8542ef7d3ab05a1", size = 16150, upload-time = "2025-11-14T04:32:13.138Z" } wheels = [ @@ -227,7 +178,7 @@ wheels = [ [package.optional-dependencies] filecache = [ - { name = "filelock", version = "3.20.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "filelock" }, ] [[package]] @@ -325,52 +276,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, - { url = "https://files.pythonhosted.org/packages/46/7c/0c4760bccf082737ca7ab84a4c2034fcc06b1f21cf3032ea98bd6feb1725/charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9", size = 209609, upload-time = "2025-10-14T04:42:10.922Z" }, - { url = "https://files.pythonhosted.org/packages/bb/a4/69719daef2f3d7f1819de60c9a6be981b8eeead7542d5ec4440f3c80e111/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d", size = 149029, upload-time = "2025-10-14T04:42:12.38Z" }, - { url = "https://files.pythonhosted.org/packages/e6/21/8d4e1d6c1e6070d3672908b8e4533a71b5b53e71d16828cc24d0efec564c/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608", size = 144580, upload-time = "2025-10-14T04:42:13.549Z" }, - { url = "https://files.pythonhosted.org/packages/a7/0a/a616d001b3f25647a9068e0b9199f697ce507ec898cacb06a0d5a1617c99/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc", size = 162340, upload-time = "2025-10-14T04:42:14.892Z" }, - { url = "https://files.pythonhosted.org/packages/85/93/060b52deb249a5450460e0585c88a904a83aec474ab8e7aba787f45e79f2/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e", size = 159619, upload-time = "2025-10-14T04:42:16.676Z" }, - { url = "https://files.pythonhosted.org/packages/dd/21/0274deb1cc0632cd587a9a0ec6b4674d9108e461cb4cd40d457adaeb0564/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1", size = 153980, upload-time = "2025-10-14T04:42:17.917Z" }, - { url = "https://files.pythonhosted.org/packages/28/2b/e3d7d982858dccc11b31906976323d790dded2017a0572f093ff982d692f/charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3", size = 152174, upload-time = "2025-10-14T04:42:19.018Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ff/4a269f8e35f1e58b2df52c131a1fa019acb7ef3f8697b7d464b07e9b492d/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6", size = 151666, upload-time = "2025-10-14T04:42:20.171Z" }, - { url = "https://files.pythonhosted.org/packages/da/c9/ec39870f0b330d58486001dd8e532c6b9a905f5765f58a6f8204926b4a93/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88", size = 145550, upload-time = "2025-10-14T04:42:21.324Z" }, - { url = "https://files.pythonhosted.org/packages/75/8f/d186ab99e40e0ed9f82f033d6e49001701c81244d01905dd4a6924191a30/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1", size = 163721, upload-time = "2025-10-14T04:42:22.46Z" }, - { url = "https://files.pythonhosted.org/packages/96/b1/6047663b9744df26a7e479ac1e77af7134b1fcf9026243bb48ee2d18810f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf", size = 152127, upload-time = "2025-10-14T04:42:23.712Z" }, - { url = "https://files.pythonhosted.org/packages/59/78/e5a6eac9179f24f704d1be67d08704c3c6ab9f00963963524be27c18ed87/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318", size = 161175, upload-time = "2025-10-14T04:42:24.87Z" }, - { url = "https://files.pythonhosted.org/packages/e5/43/0e626e42d54dd2f8dd6fc5e1c5ff00f05fbca17cb699bedead2cae69c62f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c", size = 155375, upload-time = "2025-10-14T04:42:27.246Z" }, - { url = "https://files.pythonhosted.org/packages/e9/91/d9615bf2e06f35e4997616ff31248c3657ed649c5ab9d35ea12fce54e380/charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505", size = 99692, upload-time = "2025-10-14T04:42:28.425Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a9/6c040053909d9d1ef4fcab45fddec083aedc9052c10078339b47c8573ea8/charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966", size = 107192, upload-time = "2025-10-14T04:42:29.482Z" }, - { url = "https://files.pythonhosted.org/packages/f0/c6/4fa536b2c0cd3edfb7ccf8469fa0f363ea67b7213a842b90909ca33dd851/charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50", size = 100220, upload-time = "2025-10-14T04:42:30.632Z" }, { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, ] -[[package]] -name = "click" -version = "8.1.8" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, -] - [[package]] name = "click" version = "8.3.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065, upload-time = "2025-11-15T20:45:42.706Z" } wheels = [ @@ -395,135 +309,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] -[[package]] -name = "coverage" -version = "7.10.7" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704, upload-time = "2025-09-21T20:03:56.815Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/6c/3a3f7a46888e69d18abe3ccc6fe4cb16cccb1e6a2f99698931dafca489e6/coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a", size = 217987, upload-time = "2025-09-21T20:00:57.218Z" }, - { url = "https://files.pythonhosted.org/packages/03/94/952d30f180b1a916c11a56f5c22d3535e943aa22430e9e3322447e520e1c/coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5", size = 218388, upload-time = "2025-09-21T20:01:00.081Z" }, - { url = "https://files.pythonhosted.org/packages/50/2b/9e0cf8ded1e114bcd8b2fd42792b57f1c4e9e4ea1824cde2af93a67305be/coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17", size = 245148, upload-time = "2025-09-21T20:01:01.768Z" }, - { url = "https://files.pythonhosted.org/packages/19/20/d0384ac06a6f908783d9b6aa6135e41b093971499ec488e47279f5b846e6/coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b", size = 246958, upload-time = "2025-09-21T20:01:03.355Z" }, - { url = "https://files.pythonhosted.org/packages/60/83/5c283cff3d41285f8eab897651585db908a909c572bdc014bcfaf8a8b6ae/coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87", size = 248819, upload-time = "2025-09-21T20:01:04.968Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/02eb98fdc5ff79f423e990d877693e5310ae1eab6cb20ae0b0b9ac45b23b/coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e", size = 245754, upload-time = "2025-09-21T20:01:06.321Z" }, - { url = "https://files.pythonhosted.org/packages/b4/bc/25c83bcf3ad141b32cd7dc45485ef3c01a776ca3aa8ef0a93e77e8b5bc43/coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e", size = 246860, upload-time = "2025-09-21T20:01:07.605Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b7/95574702888b58c0928a6e982038c596f9c34d52c5e5107f1eef729399b5/coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df", size = 244877, upload-time = "2025-09-21T20:01:08.829Z" }, - { url = "https://files.pythonhosted.org/packages/47/b6/40095c185f235e085df0e0b158f6bd68cc6e1d80ba6c7721dc81d97ec318/coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0", size = 245108, upload-time = "2025-09-21T20:01:10.527Z" }, - { url = "https://files.pythonhosted.org/packages/c8/50/4aea0556da7a4b93ec9168420d170b55e2eb50ae21b25062513d020c6861/coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13", size = 245752, upload-time = "2025-09-21T20:01:11.857Z" }, - { url = "https://files.pythonhosted.org/packages/6a/28/ea1a84a60828177ae3b100cb6723838523369a44ec5742313ed7db3da160/coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b", size = 220497, upload-time = "2025-09-21T20:01:13.459Z" }, - { url = "https://files.pythonhosted.org/packages/fc/1a/a81d46bbeb3c3fd97b9602ebaa411e076219a150489bcc2c025f151bd52d/coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807", size = 221392, upload-time = "2025-09-21T20:01:14.722Z" }, - { url = "https://files.pythonhosted.org/packages/d2/5d/c1a17867b0456f2e9ce2d8d4708a4c3a089947d0bec9c66cdf60c9e7739f/coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59", size = 218102, upload-time = "2025-09-21T20:01:16.089Z" }, - { url = "https://files.pythonhosted.org/packages/54/f0/514dcf4b4e3698b9a9077f084429681bf3aad2b4a72578f89d7f643eb506/coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a", size = 218505, upload-time = "2025-09-21T20:01:17.788Z" }, - { url = "https://files.pythonhosted.org/packages/20/f6/9626b81d17e2a4b25c63ac1b425ff307ecdeef03d67c9a147673ae40dc36/coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699", size = 248898, upload-time = "2025-09-21T20:01:19.488Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ef/bd8e719c2f7417ba03239052e099b76ea1130ac0cbb183ee1fcaa58aaff3/coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d", size = 250831, upload-time = "2025-09-21T20:01:20.817Z" }, - { url = "https://files.pythonhosted.org/packages/a5/b6/bf054de41ec948b151ae2b79a55c107f5760979538f5fb80c195f2517718/coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e", size = 252937, upload-time = "2025-09-21T20:01:22.171Z" }, - { url = "https://files.pythonhosted.org/packages/0f/e5/3860756aa6f9318227443c6ce4ed7bf9e70bb7f1447a0353f45ac5c7974b/coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23", size = 249021, upload-time = "2025-09-21T20:01:23.907Z" }, - { url = "https://files.pythonhosted.org/packages/26/0f/bd08bd042854f7fd07b45808927ebcce99a7ed0f2f412d11629883517ac2/coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab", size = 250626, upload-time = "2025-09-21T20:01:25.721Z" }, - { url = "https://files.pythonhosted.org/packages/8e/a7/4777b14de4abcc2e80c6b1d430f5d51eb18ed1d75fca56cbce5f2db9b36e/coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82", size = 248682, upload-time = "2025-09-21T20:01:27.105Z" }, - { url = "https://files.pythonhosted.org/packages/34/72/17d082b00b53cd45679bad682fac058b87f011fd8b9fe31d77f5f8d3a4e4/coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2", size = 248402, upload-time = "2025-09-21T20:01:28.629Z" }, - { url = "https://files.pythonhosted.org/packages/81/7a/92367572eb5bdd6a84bfa278cc7e97db192f9f45b28c94a9ca1a921c3577/coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61", size = 249320, upload-time = "2025-09-21T20:01:30.004Z" }, - { url = "https://files.pythonhosted.org/packages/2f/88/a23cc185f6a805dfc4fdf14a94016835eeb85e22ac3a0e66d5e89acd6462/coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14", size = 220536, upload-time = "2025-09-21T20:01:32.184Z" }, - { url = "https://files.pythonhosted.org/packages/fe/ef/0b510a399dfca17cec7bc2f05ad8bd78cf55f15c8bc9a73ab20c5c913c2e/coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2", size = 221425, upload-time = "2025-09-21T20:01:33.557Z" }, - { url = "https://files.pythonhosted.org/packages/51/7f/023657f301a276e4ba1850f82749bc136f5a7e8768060c2e5d9744a22951/coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a", size = 220103, upload-time = "2025-09-21T20:01:34.929Z" }, - { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290, upload-time = "2025-09-21T20:01:36.455Z" }, - { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515, upload-time = "2025-09-21T20:01:37.982Z" }, - { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020, upload-time = "2025-09-21T20:01:39.617Z" }, - { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769, upload-time = "2025-09-21T20:01:41.341Z" }, - { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901, upload-time = "2025-09-21T20:01:43.042Z" }, - { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413, upload-time = "2025-09-21T20:01:44.469Z" }, - { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820, upload-time = "2025-09-21T20:01:45.915Z" }, - { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941, upload-time = "2025-09-21T20:01:47.296Z" }, - { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519, upload-time = "2025-09-21T20:01:48.73Z" }, - { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375, upload-time = "2025-09-21T20:01:50.529Z" }, - { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699, upload-time = "2025-09-21T20:01:51.941Z" }, - { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512, upload-time = "2025-09-21T20:01:53.481Z" }, - { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147, upload-time = "2025-09-21T20:01:55.2Z" }, - { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320, upload-time = "2025-09-21T20:01:56.629Z" }, - { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575, upload-time = "2025-09-21T20:01:58.203Z" }, - { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568, upload-time = "2025-09-21T20:01:59.748Z" }, - { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174, upload-time = "2025-09-21T20:02:01.192Z" }, - { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447, upload-time = "2025-09-21T20:02:02.701Z" }, - { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779, upload-time = "2025-09-21T20:02:04.185Z" }, - { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604, upload-time = "2025-09-21T20:02:06.034Z" }, - { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497, upload-time = "2025-09-21T20:02:07.619Z" }, - { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350, upload-time = "2025-09-21T20:02:10.34Z" }, - { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111, upload-time = "2025-09-21T20:02:12.122Z" }, - { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746, upload-time = "2025-09-21T20:02:13.919Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541, upload-time = "2025-09-21T20:02:15.57Z" }, - { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170, upload-time = "2025-09-21T20:02:17.395Z" }, - { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029, upload-time = "2025-09-21T20:02:18.936Z" }, - { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259, upload-time = "2025-09-21T20:02:20.44Z" }, - { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592, upload-time = "2025-09-21T20:02:22.313Z" }, - { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768, upload-time = "2025-09-21T20:02:24.287Z" }, - { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995, upload-time = "2025-09-21T20:02:26.133Z" }, - { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546, upload-time = "2025-09-21T20:02:27.716Z" }, - { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544, upload-time = "2025-09-21T20:02:29.216Z" }, - { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308, upload-time = "2025-09-21T20:02:31.226Z" }, - { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920, upload-time = "2025-09-21T20:02:32.823Z" }, - { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434, upload-time = "2025-09-21T20:02:34.86Z" }, - { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403, upload-time = "2025-09-21T20:02:37.034Z" }, - { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469, upload-time = "2025-09-21T20:02:39.011Z" }, - { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731, upload-time = "2025-09-21T20:02:40.939Z" }, - { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302, upload-time = "2025-09-21T20:02:42.527Z" }, - { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578, upload-time = "2025-09-21T20:02:44.468Z" }, - { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629, upload-time = "2025-09-21T20:02:46.503Z" }, - { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162, upload-time = "2025-09-21T20:02:48.689Z" }, - { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517, upload-time = "2025-09-21T20:02:50.31Z" }, - { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632, upload-time = "2025-09-21T20:02:51.971Z" }, - { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520, upload-time = "2025-09-21T20:02:53.858Z" }, - { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455, upload-time = "2025-09-21T20:02:55.807Z" }, - { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287, upload-time = "2025-09-21T20:02:57.784Z" }, - { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946, upload-time = "2025-09-21T20:02:59.431Z" }, - { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009, upload-time = "2025-09-21T20:03:01.324Z" }, - { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804, upload-time = "2025-09-21T20:03:03.4Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384, upload-time = "2025-09-21T20:03:05.111Z" }, - { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047, upload-time = "2025-09-21T20:03:06.795Z" }, - { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266, upload-time = "2025-09-21T20:03:08.495Z" }, - { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767, upload-time = "2025-09-21T20:03:10.172Z" }, - { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931, upload-time = "2025-09-21T20:03:11.861Z" }, - { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186, upload-time = "2025-09-21T20:03:13.539Z" }, - { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470, upload-time = "2025-09-21T20:03:15.584Z" }, - { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626, upload-time = "2025-09-21T20:03:17.673Z" }, - { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386, upload-time = "2025-09-21T20:03:19.36Z" }, - { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852, upload-time = "2025-09-21T20:03:21.007Z" }, - { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534, upload-time = "2025-09-21T20:03:23.12Z" }, - { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784, upload-time = "2025-09-21T20:03:24.769Z" }, - { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905, upload-time = "2025-09-21T20:03:26.93Z" }, - { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922, upload-time = "2025-09-21T20:03:28.672Z" }, - { url = "https://files.pythonhosted.org/packages/a3/ad/d1c25053764b4c42eb294aae92ab617d2e4f803397f9c7c8295caa77a260/coverage-7.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fff7b9c3f19957020cac546c70025331113d2e61537f6e2441bc7657913de7d3", size = 217978, upload-time = "2025-09-21T20:03:30.362Z" }, - { url = "https://files.pythonhosted.org/packages/52/2f/b9f9daa39b80ece0b9548bbb723381e29bc664822d9a12c2135f8922c22b/coverage-7.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc91b314cef27742da486d6839b677b3f2793dfe52b51bbbb7cf736d5c29281c", size = 218370, upload-time = "2025-09-21T20:03:32.147Z" }, - { url = "https://files.pythonhosted.org/packages/dd/6e/30d006c3b469e58449650642383dddf1c8fb63d44fdf92994bfd46570695/coverage-7.10.7-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:567f5c155eda8df1d3d439d40a45a6a5f029b429b06648235f1e7e51b522b396", size = 244802, upload-time = "2025-09-21T20:03:33.919Z" }, - { url = "https://files.pythonhosted.org/packages/b0/49/8a070782ce7e6b94ff6a0b6d7c65ba6bc3091d92a92cef4cd4eb0767965c/coverage-7.10.7-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af88deffcc8a4d5974cf2d502251bc3b2db8461f0b66d80a449c33757aa9f40", size = 246625, upload-time = "2025-09-21T20:03:36.09Z" }, - { url = "https://files.pythonhosted.org/packages/6a/92/1c1c5a9e8677ce56d42b97bdaca337b2d4d9ebe703d8c174ede52dbabd5f/coverage-7.10.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7315339eae3b24c2d2fa1ed7d7a38654cba34a13ef19fbcb9425da46d3dc594", size = 248399, upload-time = "2025-09-21T20:03:38.342Z" }, - { url = "https://files.pythonhosted.org/packages/c0/54/b140edee7257e815de7426d5d9846b58505dffc29795fff2dfb7f8a1c5a0/coverage-7.10.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:912e6ebc7a6e4adfdbb1aec371ad04c68854cd3bf3608b3514e7ff9062931d8a", size = 245142, upload-time = "2025-09-21T20:03:40.591Z" }, - { url = "https://files.pythonhosted.org/packages/e4/9e/6d6b8295940b118e8b7083b29226c71f6154f7ff41e9ca431f03de2eac0d/coverage-7.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f49a05acd3dfe1ce9715b657e28d138578bc40126760efb962322c56e9ca344b", size = 246284, upload-time = "2025-09-21T20:03:42.355Z" }, - { url = "https://files.pythonhosted.org/packages/db/e5/5e957ca747d43dbe4d9714358375c7546cb3cb533007b6813fc20fce37ad/coverage-7.10.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cce2109b6219f22ece99db7644b9622f54a4e915dad65660ec435e89a3ea7cc3", size = 244353, upload-time = "2025-09-21T20:03:44.218Z" }, - { url = "https://files.pythonhosted.org/packages/9a/45/540fc5cc92536a1b783b7ef99450bd55a4b3af234aae35a18a339973ce30/coverage-7.10.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:f3c887f96407cea3916294046fc7dab611c2552beadbed4ea901cbc6a40cc7a0", size = 244430, upload-time = "2025-09-21T20:03:46.065Z" }, - { url = "https://files.pythonhosted.org/packages/75/0b/8287b2e5b38c8fe15d7e3398849bb58d382aedc0864ea0fa1820e8630491/coverage-7.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:635adb9a4507c9fd2ed65f39693fa31c9a3ee3a8e6dc64df033e8fdf52a7003f", size = 245311, upload-time = "2025-09-21T20:03:48.19Z" }, - { url = "https://files.pythonhosted.org/packages/0c/1d/29724999984740f0c86d03e6420b942439bf5bd7f54d4382cae386a9d1e9/coverage-7.10.7-cp39-cp39-win32.whl", hash = "sha256:5a02d5a850e2979b0a014c412573953995174743a3f7fa4ea5a6e9a3c5617431", size = 220500, upload-time = "2025-09-21T20:03:50.024Z" }, - { url = "https://files.pythonhosted.org/packages/43/11/4b1e6b129943f905ca54c339f343877b55b365ae2558806c1be4f7476ed5/coverage-7.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:c134869d5ffe34547d14e174c866fd8fe2254918cc0a95e99052903bc1543e07", size = 221408, upload-time = "2025-09-21T20:03:51.803Z" }, - { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952, upload-time = "2025-09-21T20:03:53.918Z" }, -] - -[package.optional-dependencies] -toml = [ - { name = "tomli", marker = "python_full_version < '3.10'" }, -] - [[package]] name = "coverage" version = "7.12.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] sdist = { url = "https://files.pythonhosted.org/packages/89/26/4a96807b193b011588099c3b5c89fbb05294e5b90e71018e065465f34eb6/coverage-7.12.0.tar.gz", hash = "sha256:fc11e0a4e372cb5f282f16ef90d4a585034050ccda536451901abfb19a57f40c", size = 819341, upload-time = "2025-11-18T13:34:20.766Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/26/4a/0dc3de1c172d35abe512332cfdcc43211b6ebce629e4cc42e6cd25ed8f4d/coverage-7.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:32b75c2ba3f324ee37af3ccee5b30458038c50b349ad9b88cee85096132a575b", size = 217409, upload-time = "2025-11-18T13:31:53.122Z" }, @@ -621,7 +410,7 @@ wheels = [ [package.optional-dependencies] toml = [ - { name = "tomli", marker = "python_full_version >= '3.10' and python_full_version <= '3.11'" }, + { name = "tomli", marker = "python_full_version <= '3.11'" }, ] [[package]] @@ -649,28 +438,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fe/47/290daabcf91628f4fc0e17c75a1690b354ba067066cd14407712600e609f/dict2css-0.3.0.post1-py3-none-any.whl", hash = "sha256:f006a6b774c3e31869015122ae82c491fd25e7de4a75607a62aa3e798f837e0d", size = 25647, upload-time = "2023-11-22T11:09:19.221Z" }, ] -[[package]] -name = "dnspython" -version = "2.7.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197, upload-time = "2024-10-05T20:14:59.362Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632, upload-time = "2024-10-05T20:14:57.687Z" }, -] - [[package]] name = "dnspython" version = "2.8.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, @@ -703,8 +474,7 @@ name = "email-validator" version = "2.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "dnspython", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "dnspython", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "dnspython" }, { name = "idna" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } @@ -733,61 +503,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, ] -[[package]] -name = "faker" -version = "37.12.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "tzdata", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3d/84/e95acaa848b855e15c83331d0401ee5f84b2f60889255c2e055cb4fb6bdf/faker-37.12.0.tar.gz", hash = "sha256:7505e59a7e02fa9010f06c3e1e92f8250d4cfbb30632296140c2d6dbef09b0fa", size = 1935741, upload-time = "2025-10-24T15:19:58.764Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/98/2c050dec90e295a524c9b65c4cb9e7c302386a296b2938710448cbd267d5/faker-37.12.0-py3-none-any.whl", hash = "sha256:afe7ccc038da92f2fbae30d8e16d19d91e92e242f8401ce9caf44de892bab4c4", size = 1975461, upload-time = "2025-10-24T15:19:55.739Z" }, -] - [[package]] name = "faker" version = "38.2.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] dependencies = [ - { name = "tzdata", marker = "python_full_version >= '3.10'" }, + { name = "tzdata" }, ] sdist = { url = "https://files.pythonhosted.org/packages/64/27/022d4dbd4c20567b4c294f79a133cc2f05240ea61e0d515ead18c995c249/faker-38.2.0.tar.gz", hash = "sha256:20672803db9c7cb97f9b56c18c54b915b6f1d8991f63d1d673642dc43f5ce7ab", size = 1941469, upload-time = "2025-11-19T16:37:31.892Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/17/93/00c94d45f55c336434a15f98d906387e87ce28f9918e4444829a8fda432d/faker-38.2.0-py3-none-any.whl", hash = "sha256:35fe4a0a79dee0dc4103a6083ee9224941e7d3594811a50e3969e547b0d2ee65", size = 1980505, upload-time = "2025-11-19T16:37:30.208Z" }, ] -[[package]] -name = "filelock" -version = "3.19.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687, upload-time = "2025-08-14T16:56:03.016Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988, upload-time = "2025-08-14T16:56:01.633Z" }, -] - [[package]] name = "filelock" version = "3.20.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] sdist = { url = "https://files.pythonhosted.org/packages/58/46/0028a82567109b5ef6e4d2a1f04a583fb513e6cf9527fcdd09afd817deeb/filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4", size = 18922, upload-time = "2025-10-08T18:03:50.056Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2", size = 16054, upload-time = "2025-10-08T18:03:48.35Z" }, @@ -869,18 +600,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269", size = 1612508, upload-time = "2025-11-04T12:42:23.427Z" }, { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681", size = 1680760, upload-time = "2025-11-04T12:42:25.341Z" }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", hash = "sha256:e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01", size = 303425, upload-time = "2025-08-07T13:32:27.59Z" }, - { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c", size = 269859, upload-time = "2025-08-07T13:16:16.003Z" }, - { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d", size = 627610, upload-time = "2025-08-07T13:43:01.345Z" }, - { url = "https://files.pythonhosted.org/packages/b2/a7/9476decef51a0844195f99ed5dc611d212e9b3515512ecdf7321543a7225/greenlet-3.2.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:18d9260df2b5fbf41ae5139e1be4e796d99655f023a636cd0e11e6406cca7d58", size = 639417, upload-time = "2025-08-07T13:45:32.094Z" }, - { url = "https://files.pythonhosted.org/packages/bd/e0/849b9159cbb176f8c0af5caaff1faffdece7a8417fcc6fe1869770e33e21/greenlet-3.2.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:671df96c1f23c4a0d4077a325483c1503c96a1b7d9db26592ae770daa41233d4", size = 634751, upload-time = "2025-08-07T13:53:18.848Z" }, - { url = "https://files.pythonhosted.org/packages/5f/d3/844e714a9bbd39034144dca8b658dcd01839b72bb0ec7d8014e33e3705f0/greenlet-3.2.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:16458c245a38991aa19676900d48bd1a6f2ce3e16595051a4db9d012154e8433", size = 634020, upload-time = "2025-08-07T13:18:36.841Z" }, - { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df", size = 582817, upload-time = "2025-08-07T13:18:35.48Z" }, - { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594", size = 1111985, upload-time = "2025-08-07T13:42:42.425Z" }, - { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98", size = 1136137, upload-time = "2025-08-07T13:18:26.168Z" }, - { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10", size = 1542941, upload-time = "2025-11-04T12:42:27.427Z" }, - { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be", size = 1609685, upload-time = "2025-11-04T12:42:29.242Z" }, - { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", hash = "sha256:65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b", size = 281400, upload-time = "2025-08-07T14:02:20.263Z" }, - { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", hash = "sha256:d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb", size = 298533, upload-time = "2025-08-07T13:56:34.168Z" }, ] [[package]] @@ -905,33 +624,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6c/dd/a834df6482147d48e225a49515aabc28974ad5a4ca3215c18a882565b028/html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d", size = 112173, upload-time = "2020-06-22T23:32:36.781Z" }, ] -[[package]] -name = "hypothesis" -version = "6.141.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "attrs", marker = "python_full_version < '3.10'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, - { name = "sortedcontainers", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/85/20/8aa62b3e69fea68bb30d35d50be5395c98979013acd8152d64dc927e4cdb/hypothesis-6.141.1.tar.gz", hash = "sha256:8ef356e1e18fbeaa8015aab3c805303b7fe4b868e5b506e87ad83c0bf951f46f", size = 467389, upload-time = "2025-10-15T19:12:25.262Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/9a/f901858f139694dd669776983781b08a7c1717911025da6720e526bd8ce3/hypothesis-6.141.1-py3-none-any.whl", hash = "sha256:a5b3c39c16d98b7b4c3c5c8d4262e511e3b2255e6814ced8023af49087ad60b3", size = 535000, upload-time = "2025-10-15T19:12:21.659Z" }, -] - [[package]] name = "hypothesis" version = "6.148.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.10' and python_full_version < '3.10.2'", + "python_full_version < '3.10.2'", ] dependencies = [ - { name = "exceptiongroup", marker = "python_full_version >= '3.10' and python_full_version < '3.10.2'" }, - { name = "sortedcontainers", marker = "python_full_version >= '3.10' and python_full_version < '3.10.2'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.10.2'" }, + { name = "sortedcontainers", marker = "python_full_version < '3.10.2'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fd/5f/b08ad8dc0a79c3828dd137b4f55243f5d0342b02e963f5298dcb3bec7021/hypothesis-6.148.1.tar.gz", hash = "sha256:98851429bd89b0c8835e8ebca6705c28dec56517576e5606fc3b841ddb0dc1c7", size = 468664, upload-time = "2025-11-16T07:58:37.959Z" } wheels = [ @@ -974,40 +676,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769, upload-time = "2022-07-01T12:21:02.467Z" }, ] -[[package]] -name = "importlib-metadata" -version = "8.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641, upload-time = "2025-04-27T15:29:01.736Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" }, -] - -[[package]] -name = "iniconfig" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, -] - [[package]] name = "iniconfig" version = "2.3.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, @@ -1042,8 +714,7 @@ name = "litestar-sphinx-theme" version = "0.3.1" source = { git = "https://github.com/litestar-org/litestar-sphinx-theme.git?rev=v3#3a2dd24bdb6484c1c0da1116043586ec22a32962" } dependencies = [ - { name = "shibuya", version = "2025.10.21", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "shibuya", version = "2025.11.10", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "shibuya" }, { name = "sphinx-autobuild", version = "2024.10.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx-autobuild", version = "2025.8.25", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx-copybutton" }, @@ -1135,17 +806,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, - { url = "https://files.pythonhosted.org/packages/56/23/0d8c13a44bde9154821586520840643467aee574d8ce79a17da539ee7fed/markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26", size = 11623, upload-time = "2025-09-27T18:37:29.296Z" }, - { url = "https://files.pythonhosted.org/packages/fd/23/07a2cb9a8045d5f3f0890a8c3bc0859d7a47bfd9a560b563899bec7b72ed/markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc", size = 12049, upload-time = "2025-09-27T18:37:30.234Z" }, - { url = "https://files.pythonhosted.org/packages/bc/e4/6be85eb81503f8e11b61c0b6369b6e077dcf0a74adbd9ebf6b349937b4e9/markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c", size = 21923, upload-time = "2025-09-27T18:37:31.177Z" }, - { url = "https://files.pythonhosted.org/packages/6f/bc/4dc914ead3fe6ddaef035341fee0fc956949bbd27335b611829292b89ee2/markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42", size = 20543, upload-time = "2025-09-27T18:37:32.168Z" }, - { url = "https://files.pythonhosted.org/packages/89/6e/5fe81fbcfba4aef4093d5f856e5c774ec2057946052d18d168219b7bd9f9/markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b", size = 20585, upload-time = "2025-09-27T18:37:33.166Z" }, - { url = "https://files.pythonhosted.org/packages/f6/f6/e0e5a3d3ae9c4020f696cd055f940ef86b64fe88de26f3a0308b9d3d048c/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758", size = 21387, upload-time = "2025-09-27T18:37:34.185Z" }, - { url = "https://files.pythonhosted.org/packages/c8/25/651753ef4dea08ea790f4fbb65146a9a44a014986996ca40102e237aa49a/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2", size = 20133, upload-time = "2025-09-27T18:37:35.138Z" }, - { url = "https://files.pythonhosted.org/packages/dc/0a/c3cf2b4fef5f0426e8a6d7fce3cb966a17817c568ce59d76b92a233fdbec/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d", size = 20588, upload-time = "2025-09-27T18:37:36.096Z" }, - { url = "https://files.pythonhosted.org/packages/cd/1b/a7782984844bd519ad4ffdbebbba2671ec5d0ebbeac34736c15fb86399e8/markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7", size = 14566, upload-time = "2025-09-27T18:37:37.09Z" }, - { url = "https://files.pythonhosted.org/packages/18/1f/8d9c20e1c9440e215a44be5ab64359e207fcb4f675543f1cf9a2a7f648d0/markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e", size = 15053, upload-time = "2025-09-27T18:37:38.054Z" }, - { url = "https://files.pythonhosted.org/packages/4e/d3/fe08482b5cd995033556d45041a4f4e76e7f0521112a9c9991d40d39825f/markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8", size = 13928, upload-time = "2025-09-27T18:37:39.037Z" }, ] [[package]] @@ -1255,14 +915,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f0/03/42106dcded51f0a0b5284d3ce30a671e7bd3f7318d122b2ead66ad289fed/msgpack-1.1.2-cp314-cp314t-win32.whl", hash = "sha256:1d1418482b1ee984625d88aa9585db570180c286d942da463533b238b98b812b", size = 75197, upload-time = "2025-10-08T09:15:42.954Z" }, { url = "https://files.pythonhosted.org/packages/15/86/d0071e94987f8db59d4eeb386ddc64d0bb9b10820a8d82bcd3e53eeb2da6/msgpack-1.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:5a46bf7e831d09470ad92dff02b8b1ac92175ca36b087f904a0519857c6be3ff", size = 85772, upload-time = "2025-10-08T09:15:43.954Z" }, { url = "https://files.pythonhosted.org/packages/81/f2/08ace4142eb281c12701fc3b93a10795e4d4dc7f753911d836675050f886/msgpack-1.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d99ef64f349d5ec3293688e91486c5fdb925ed03807f64d98d205d2713c60b46", size = 70868, upload-time = "2025-10-08T09:15:44.959Z" }, - { url = "https://files.pythonhosted.org/packages/46/73/85469b4aa71d25e5949fee50d3c2cf46f69cea619fe97cfe309058080f75/msgpack-1.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ea5405c46e690122a76531ab97a079e184c0daf491e588592d6a23d3e32af99e", size = 81529, upload-time = "2025-10-08T09:15:46.069Z" }, - { url = "https://files.pythonhosted.org/packages/6c/3a/7d4077e8ae720b29d2b299a9591969f0d105146960681ea6f4121e6d0f8d/msgpack-1.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9fba231af7a933400238cb357ecccf8ab5d51535ea95d94fc35b7806218ff844", size = 84106, upload-time = "2025-10-08T09:15:47.064Z" }, - { url = "https://files.pythonhosted.org/packages/df/c0/da451c74746ed9388dca1b4ec647c82945f4e2f8ce242c25fb7c0e12181f/msgpack-1.1.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a8f6e7d30253714751aa0b0c84ae28948e852ee7fb0524082e6716769124bc23", size = 396656, upload-time = "2025-10-08T09:15:48.118Z" }, - { url = "https://files.pythonhosted.org/packages/e5/a1/20486c29a31ec9f0f88377fdf7eb7a67f30bcb5e0f89b7550f6f16d9373b/msgpack-1.1.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94fd7dc7d8cb0a54432f296f2246bc39474e017204ca6f4ff345941d4ed285a7", size = 404722, upload-time = "2025-10-08T09:15:49.328Z" }, - { url = "https://files.pythonhosted.org/packages/ad/ae/e613b0a526d54ce85447d9665c2ff8c3210a784378d50573321d43d324b8/msgpack-1.1.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:350ad5353a467d9e3b126d8d1b90fe05ad081e2e1cef5753f8c345217c37e7b8", size = 391838, upload-time = "2025-10-08T09:15:50.517Z" }, - { url = "https://files.pythonhosted.org/packages/49/6a/07f3e10ed4503045b882ef7bf8512d01d8a9e25056950a977bd5f50df1c2/msgpack-1.1.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6bde749afe671dc44893f8d08e83bf475a1a14570d67c4bb5cec5573463c8833", size = 397516, upload-time = "2025-10-08T09:15:51.646Z" }, - { url = "https://files.pythonhosted.org/packages/76/9b/a86828e75986c12a3809c1e5062f5eba8e0cae3dfa2bf724ed2b1bb72b4c/msgpack-1.1.2-cp39-cp39-win32.whl", hash = "sha256:ad09b984828d6b7bb52d1d1d0c9be68ad781fa004ca39216c8a1e63c0f34ba3c", size = 64863, upload-time = "2025-10-08T09:15:53.118Z" }, - { url = "https://files.pythonhosted.org/packages/14/a7/b1992b4fb3da3b413f5fb78a63bad42f256c3be2352eb69273c3789c2c96/msgpack-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:67016ae8c8965124fdede9d3769528ad8284f14d635337ffa6a713a580f6c030", size = 71540, upload-time = "2025-10-08T09:15:55.573Z" }, ] [[package]] @@ -1319,14 +971,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/fe/1dfd5f512b26b53043884e4f34710c73e294e7cc54278c3fe28380e42c37/msgspec-0.20.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:565f915d2e540e8a0c93a01ff67f50aebe1f7e22798c6a25873f9fda8d1325f8", size = 231758, upload-time = "2025-11-24T03:56:13.765Z" }, { url = "https://files.pythonhosted.org/packages/97/f6/9ba7121b8e0c4e0beee49575d1dbc804e2e72467692f0428cf39ceba1ea5/msgspec-0.20.0-cp314-cp314t-win_amd64.whl", hash = "sha256:726f3e6c3c323f283f6021ebb6c8ccf58d7cd7baa67b93d73bfbe9a15c34ab8d", size = 206540, upload-time = "2025-11-24T03:56:15.029Z" }, { url = "https://files.pythonhosted.org/packages/c8/3e/c5187de84bb2c2ca334ab163fcacf19a23ebb1d876c837f81a1b324a15bf/msgspec-0.20.0-cp314-cp314t-win_arm64.whl", hash = "sha256:93f23528edc51d9f686808a361728e903d6f2be55c901d6f5c92e44c6d546bfc", size = 183011, upload-time = "2025-11-24T03:56:16.442Z" }, - { url = "https://files.pythonhosted.org/packages/b2/30/55eb8645bf11ea84bc1dafa670d068348b08b84660c4c9240ff05296e707/msgspec-0.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eee56472ced14602245ac47516e179d08c6c892d944228796f239e983de7449c", size = 195293, upload-time = "2025-11-24T03:56:17.763Z" }, - { url = "https://files.pythonhosted.org/packages/b1/c2/78c66d69beb45c311ba6ad0021f31ddfe6f19fe1b46cf295175fbb41430d/msgspec-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:19395e9a08cc5bd0e336909b3e13b4ae5ee5e47b82e98f8b7801d5a13806bb6f", size = 188572, upload-time = "2025-11-24T03:56:19.431Z" }, - { url = "https://files.pythonhosted.org/packages/44/14/9d6f685a277e4d3417f103c4d228cb7ea83fdd776c739570f233917f5fd2/msgspec-0.20.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d5bb7ce84fe32f6ce9f62aa7e7109cb230ad542cc5bc9c46e587f1dac4afc48e", size = 216219, upload-time = "2025-11-24T03:56:20.823Z" }, - { url = "https://files.pythonhosted.org/packages/98/24/e50ea4080656a711bee9fe3d846de3b0e74f03c1dc620284b82e1757fdb0/msgspec-0.20.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8c6da9ae2d76d11181fbb0ea598f6e1d558ef597d07ec46d689d17f68133769f", size = 222573, upload-time = "2025-11-24T03:56:22.17Z" }, - { url = "https://files.pythonhosted.org/packages/d1/4b/2d9415a935ebd6e5f34fd5cad7be6b8525d8353bf5ed6eb77e706863f3b0/msgspec-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:84d88bd27d906c471a5ca232028671db734111996ed1160e37171a8d1f07a599", size = 222097, upload-time = "2025-11-24T03:56:23.553Z" }, - { url = "https://files.pythonhosted.org/packages/b3/56/2cc277def0d43625dd14ab6ee0e3a5198175725198122d707fa139ebbdd1/msgspec-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:03907bf733f94092a6b4c5285b274f79947cad330bd8a9d8b45c0369e1a3c7f0", size = 225419, upload-time = "2025-11-24T03:56:24.953Z" }, - { url = "https://files.pythonhosted.org/packages/42/1d/e9401b352aa399af5efa35f1f130651698e65f919ecb9221b925b2236948/msgspec-0.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:9fbcb660632a2f5c247c0dc820212bf3a423357ac6241ff6dc6cfc6f72584016", size = 188527, upload-time = "2025-11-24T03:56:26.193Z" }, - { url = "https://files.pythonhosted.org/packages/02/59/079f33cd092ee42c9b97a59daa2115e7550a7eba98781ef6657e3d710d56/msgspec-0.20.0-cp39-cp39-win_arm64.whl", hash = "sha256:f7cd0e89b86a16005745cb99bd1858e8050fc17f63de571504492b267bca188a", size = 173927, upload-time = "2025-11-24T03:56:27.52Z" }, ] [[package]] @@ -1371,12 +1015,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5b/11/040983fad5132d85914c874a2836252bbc57832065548885b5bb5b0d4359/mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb", size = 13326683, upload-time = "2025-09-19T00:09:55.572Z" }, { url = "https://files.pythonhosted.org/packages/e9/ba/89b2901dd77414dd7a8c8729985832a5735053be15b744c18e4586e506ef/mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075", size = 13514749, upload-time = "2025-09-19T00:10:44.827Z" }, { url = "https://files.pythonhosted.org/packages/25/bc/cc98767cffd6b2928ba680f3e5bc969c4152bf7c2d83f92f5a504b92b0eb/mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf", size = 9982959, upload-time = "2025-09-19T00:10:37.344Z" }, - { url = "https://files.pythonhosted.org/packages/3f/a6/490ff491d8ecddf8ab91762d4f67635040202f76a44171420bcbe38ceee5/mypy-1.18.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25a9c8fb67b00599f839cf472713f54249a62efd53a54b565eb61956a7e3296b", size = 12807230, upload-time = "2025-09-19T00:09:49.471Z" }, - { url = "https://files.pythonhosted.org/packages/eb/2e/60076fc829645d167ece9e80db9e8375648d210dab44cc98beb5b322a826/mypy-1.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2b9c7e284ee20e7598d6f42e13ca40b4928e6957ed6813d1ab6348aa3f47133", size = 11895666, upload-time = "2025-09-19T00:10:53.678Z" }, - { url = "https://files.pythonhosted.org/packages/97/4a/1e2880a2a5dda4dc8d9ecd1a7e7606bc0b0e14813637eeda40c38624e037/mypy-1.18.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d6985ed057513e344e43a26cc1cd815c7a94602fb6a3130a34798625bc2f07b6", size = 12499608, upload-time = "2025-09-19T00:09:36.204Z" }, - { url = "https://files.pythonhosted.org/packages/00/81/a117f1b73a3015b076b20246b1f341c34a578ebd9662848c6b80ad5c4138/mypy-1.18.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22f27105f1525ec024b5c630c0b9f36d5c1cc4d447d61fe51ff4bd60633f47ac", size = 13244551, upload-time = "2025-09-19T00:10:17.531Z" }, - { url = "https://files.pythonhosted.org/packages/9b/61/b9f48e1714ce87c7bf0358eb93f60663740ebb08f9ea886ffc670cea7933/mypy-1.18.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:030c52d0ea8144e721e49b1f68391e39553d7451f0c3f8a7565b59e19fcb608b", size = 13491552, upload-time = "2025-09-19T00:10:13.753Z" }, - { url = "https://files.pythonhosted.org/packages/c9/66/b2c0af3b684fa80d1b27501a8bdd3d2daa467ea3992a8aa612f5ca17c2db/mypy-1.18.2-cp39-cp39-win_amd64.whl", hash = "sha256:aa5e07ac1a60a253445797e42b8b2963c9675563a94f11291ab40718b016a7a0", size = 9765635, upload-time = "2025-09-19T00:10:30.993Z" }, { url = "https://files.pythonhosted.org/packages/87/e3/be76d87158ebafa0309946c4a73831974d4d6ab4f4ef40c3b53a385a66fd/mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e", size = 2352367, upload-time = "2025-09-19T00:10:15.489Z" }, ] @@ -1440,28 +1078,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, ] -[[package]] -name = "platformdirs" -version = "4.4.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634, upload-time = "2025-08-26T14:32:04.268Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654, upload-time = "2025-08-26T14:32:02.735Z" }, -] - [[package]] name = "platformdirs" version = "4.5.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632, upload-time = "2025-10-08T17:44:48.791Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload-time = "2025-10-08T17:44:47.223Z" }, @@ -1481,8 +1101,7 @@ name = "polyfactory" version = "3.2.0" source = { editable = "." } dependencies = [ - { name = "faker", version = "37.12.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "faker", version = "38.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "faker" }, { name = "typing-extensions" }, ] @@ -1529,8 +1148,7 @@ docs = [ { name = "auto-pytabs" }, { name = "git-cliff" }, { name = "litestar-sphinx-theme" }, - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx-autobuild", version = "2024.10.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx-autobuild", version = "2025.8.25", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, @@ -1554,13 +1172,10 @@ pydantic = [ ] test = [ { name = "annotated-types" }, - { name = "hypothesis", version = "6.141.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "hypothesis", version = "6.148.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' and python_full_version < '3.10.2'" }, + { name = "hypothesis", version = "6.148.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10.2'" }, { name = "hypothesis", version = "6.148.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10.2'" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pytest", version = "9.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "pytest-asyncio", version = "1.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pytest-asyncio", version = "1.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, { name = "pytest-cov" }, ] @@ -1762,19 +1377,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, - { url = "https://files.pythonhosted.org/packages/54/db/160dffb57ed9a3705c4cbcbff0ac03bdae45f1ca7d58ab74645550df3fbd/pydantic_core-2.41.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf", size = 2107999, upload-time = "2025-11-04T13:42:03.885Z" }, - { url = "https://files.pythonhosted.org/packages/a3/7d/88e7de946f60d9263cc84819f32513520b85c0f8322f9b8f6e4afc938383/pydantic_core-2.41.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5", size = 1929745, upload-time = "2025-11-04T13:42:06.075Z" }, - { url = "https://files.pythonhosted.org/packages/d5/c2/aef51e5b283780e85e99ff19db0f05842d2d4a8a8cd15e63b0280029b08f/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d", size = 1920220, upload-time = "2025-11-04T13:42:08.457Z" }, - { url = "https://files.pythonhosted.org/packages/c7/97/492ab10f9ac8695cd76b2fdb24e9e61f394051df71594e9bcc891c9f586e/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60", size = 2067296, upload-time = "2025-11-04T13:42:10.817Z" }, - { url = "https://files.pythonhosted.org/packages/ec/23/984149650e5269c59a2a4c41d234a9570adc68ab29981825cfaf4cfad8f4/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82", size = 2231548, upload-time = "2025-11-04T13:42:13.843Z" }, - { url = "https://files.pythonhosted.org/packages/71/0c/85bcbb885b9732c28bec67a222dbed5ed2d77baee1f8bba2002e8cd00c5c/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5", size = 2362571, upload-time = "2025-11-04T13:42:16.208Z" }, - { url = "https://files.pythonhosted.org/packages/c0/4a/412d2048be12c334003e9b823a3fa3d038e46cc2d64dd8aab50b31b65499/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3", size = 2068175, upload-time = "2025-11-04T13:42:18.911Z" }, - { url = "https://files.pythonhosted.org/packages/73/f4/c58b6a776b502d0a5540ad02e232514285513572060f0d78f7832ca3c98b/pydantic_core-2.41.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425", size = 2177203, upload-time = "2025-11-04T13:42:22.578Z" }, - { url = "https://files.pythonhosted.org/packages/ed/ae/f06ea4c7e7a9eead3d165e7623cd2ea0cb788e277e4f935af63fc98fa4e6/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504", size = 2148191, upload-time = "2025-11-04T13:42:24.89Z" }, - { url = "https://files.pythonhosted.org/packages/c1/57/25a11dcdc656bf5f8b05902c3c2934ac3ea296257cc4a3f79a6319e61856/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5", size = 2343907, upload-time = "2025-11-04T13:42:27.683Z" }, - { url = "https://files.pythonhosted.org/packages/96/82/e33d5f4933d7a03327c0c43c65d575e5919d4974ffc026bc917a5f7b9f61/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3", size = 2322174, upload-time = "2025-11-04T13:42:30.776Z" }, - { url = "https://files.pythonhosted.org/packages/81/45/4091be67ce9f469e81656f880f3506f6a5624121ec5eb3eab37d7581897d/pydantic_core-2.41.5-cp39-cp39-win32.whl", hash = "sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460", size = 1990353, upload-time = "2025-11-04T13:42:33.111Z" }, - { url = "https://files.pythonhosted.org/packages/44/8a/a98aede18db6e9cd5d66bcacd8a409fcf8134204cdede2e7de35c5a2c5ef/pydantic_core-2.41.5-cp39-cp39-win_amd64.whl", hash = "sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b", size = 2015698, upload-time = "2025-11-04T13:42:35.484Z" }, { url = "https://files.pythonhosted.org/packages/11/72/90fda5ee3b97e51c494938a4a44c3a35a9c96c19bba12372fb9c634d6f57/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034", size = 2115441, upload-time = "2025-11-04T13:42:39.557Z" }, { url = "https://files.pythonhosted.org/packages/1f/53/8942f884fa33f50794f119012dc6a1a02ac43a56407adaac20463df8e98f/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c", size = 1930291, upload-time = "2025-11-04T13:42:42.169Z" }, { url = "https://files.pythonhosted.org/packages/79/c8/ecb9ed9cd942bce09fc888ee960b52654fbdbede4ba6c2d6e0d3b1d8b49c/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2", size = 1948632, upload-time = "2025-11-04T13:42:44.564Z" }, @@ -1827,8 +1429,7 @@ name = "pymongo" version = "4.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "dnspython", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "dnspython", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "dnspython" }, ] sdist = { url = "https://files.pythonhosted.org/packages/05/2c/ad0896cb94668c3cad1eb702ab60ae17036b051f54cfe547f11a0322f1d3/pymongo-4.8.0.tar.gz", hash = "sha256:454f2295875744dc70f1881e4b2eb99cdad008a33574bc8aaf120530f66c0cde", size = 1506091, upload-time = "2024-06-26T18:47:33.312Z" } wheels = [ @@ -1859,17 +1460,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b5/80/1f405ce80cb6a3867709147e24a2f69e342ff71fb1b9ba663d0237f0c5ed/pymongo-4.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:236bbd7d0aef62e64caf4b24ca200f8c8670d1a6f5ea828c39eccdae423bc2b2", size = 1601592, upload-time = "2024-06-26T18:46:14.339Z" }, { url = "https://files.pythonhosted.org/packages/30/19/cd66230b6407c6b8cf45c1ae073659a88af5699c792c46fd4eaf317bd11e/pymongo-4.8.0-cp312-cp312-win32.whl", hash = "sha256:47ec8c3f0a7b2212dbc9be08d3bf17bc89abd211901093e3ef3f2adea7de7a69", size = 656042, upload-time = "2024-06-26T18:46:16.892Z" }, { url = "https://files.pythonhosted.org/packages/99/1c/f5108dc39450077556844abfd92b768c57775f85270fc0b1dc834ad18113/pymongo-4.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:e84bc7707492f06fbc37a9f215374d2977d21b72e10a67f1b31893ec5a140ad8", size = 680400, upload-time = "2024-06-26T18:46:19.241Z" }, - { url = "https://files.pythonhosted.org/packages/15/a6/49f4edee29668bbd640f55ab2166dd52d0a55d7cc64bffa18c59a6eaaf3d/pymongo-4.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8400587d594761e5136a3423111f499574be5fd53cf0aefa0d0f05b180710b0", size = 539123, upload-time = "2024-06-26T18:47:03.877Z" }, - { url = "https://files.pythonhosted.org/packages/21/e9/c9033988a5892899a811471df2a6ea3cded9e1611f0580d8a9f36322ca86/pymongo-4.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af3e98dd9702b73e4e6fd780f6925352237f5dce8d99405ff1543f3771201704", size = 539287, upload-time = "2024-06-26T18:47:05.881Z" }, - { url = "https://files.pythonhosted.org/packages/ae/e5/b4fc0bc8aab12b87793da427ffc9c4d94843bfe4396d46af17523dfed61a/pymongo-4.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de3a860f037bb51f968de320baef85090ff0bbb42ec4f28ec6a5ddf88be61871", size = 922431, upload-time = "2024-06-26T18:47:08.037Z" }, - { url = "https://files.pythonhosted.org/packages/e8/67/ccd4692c7c41b2a93d4aa0260e9a7dac18111008db11166a3ab4e202c593/pymongo-4.8.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fc18b3a093f3db008c5fea0e980dbd3b743449eee29b5718bc2dc15ab5088bb", size = 948985, upload-time = "2024-06-26T18:47:14.141Z" }, - { url = "https://files.pythonhosted.org/packages/1f/84/a0033833eb9f7e288f4943af2e758a42156ee1cbdbc47f3e721900381172/pymongo-4.8.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18c9d8f975dd7194c37193583fd7d1eb9aea0c21ee58955ecf35362239ff31ac", size = 935260, upload-time = "2024-06-26T18:47:16.789Z" }, - { url = "https://files.pythonhosted.org/packages/ca/b8/074d76f0ece6736347363c420309a38af572a9a89c1f530331f011d64525/pymongo-4.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:408b2f8fdbeca3c19e4156f28fff1ab11c3efb0407b60687162d49f68075e63c", size = 921504, upload-time = "2024-06-26T18:47:19.164Z" }, - { url = "https://files.pythonhosted.org/packages/c2/75/cb78143e948de41cb2678d12ae6f36f935787c1eff14f01b541b68440d82/pymongo-4.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6564780cafd6abeea49759fe661792bd5a67e4f51bca62b88faab497ab5fe89", size = 901032, upload-time = "2024-06-26T18:47:21.405Z" }, - { url = "https://files.pythonhosted.org/packages/29/c3/1a08c6d6c9ca4b7f9d1df4a00710056ec5e62c1db76da4d18f5d5f21c0af/pymongo-4.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d18d86bc9e103f4d3d4f18b85a0471c0e13ce5b79194e4a0389a224bb70edd53", size = 910560, upload-time = "2024-06-26T18:47:23.777Z" }, - { url = "https://files.pythonhosted.org/packages/87/1c/b722a8ac96bdcffdfe8061aa85eb8720c3c66795b836a6de9da03ce93bf7/pymongo-4.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9097c331577cecf8034422956daaba7ec74c26f7b255d718c584faddd7fa2e3c", size = 924136, upload-time = "2024-06-26T18:47:25.94Z" }, - { url = "https://files.pythonhosted.org/packages/03/f2/20af007b1f5b14498695a3e6ab71b5f319b15ba239575641121c87745463/pymongo-4.8.0-cp39-cp39-win32.whl", hash = "sha256:d5428dbcd43d02f6306e1c3c95f692f68b284e6ee5390292242f509004c9e3a8", size = 523047, upload-time = "2024-06-26T18:47:28.358Z" }, - { url = "https://files.pythonhosted.org/packages/c4/fd/a60000d54e7ca8667f77bab3fe5bb8137119237be30533e5c04e6421a069/pymongo-4.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:ef7225755ed27bfdb18730c68f6cb023d06c28f2b734597480fb4c0e500feb6f", size = 533082, upload-time = "2024-06-26T18:47:30.946Z" }, ] [[package]] @@ -1885,82 +1475,32 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/93/b69052907d032b00c40cb656d21438ec00b3a471733de137a3f65a49a0a0/pyright-1.1.407-py3-none-any.whl", hash = "sha256:6dd419f54fcc13f03b52285796d65e639786373f433e243f8b94cf93a7444d21", size = 5997008, upload-time = "2025-10-24T23:17:13.159Z" }, ] -[[package]] -name = "pytest" -version = "8.4.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, - { name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "pluggy", marker = "python_full_version < '3.10'" }, - { name = "pygments", marker = "python_full_version < '3.10'" }, - { name = "tomli", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, -] - [[package]] name = "pytest" version = "9.0.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, - { name = "iniconfig", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "packaging", marker = "python_full_version >= '3.10'" }, - { name = "pluggy", marker = "python_full_version >= '3.10'" }, - { name = "pygments", marker = "python_full_version >= '3.10'" }, - { name = "tomli", marker = "python_full_version == '3.10.*'" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/07/56/f013048ac4bc4c1d9be45afd4ab209ea62822fb1598f40687e6bf45dcea4/pytest-9.0.1.tar.gz", hash = "sha256:3e9c069ea73583e255c3b21cf46b8d3c56f6e3a1a8f6da94ccb0fcf57b9d73c8", size = 1564125, upload-time = "2025-11-12T13:05:09.333Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/0b/8b/6300fb80f858cda1c51ffa17075df5d846757081d11ab4aa35cef9e6258b/pytest-9.0.1-py3-none-any.whl", hash = "sha256:67be0030d194df2dfa7b556f2e56fb3c3315bd5c8822c6951162b92b32ce7dad", size = 373668, upload-time = "2025-11-12T13:05:07.379Z" }, ] -[[package]] -name = "pytest-asyncio" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "backports-asyncio-runner", marker = "python_full_version < '3.10'" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/86/9e3c5f48f7b7b638b216e4b9e645f54d199d7abbbab7a64a13b4e12ba10f/pytest_asyncio-1.2.0.tar.gz", hash = "sha256:c609a64a2a8768462d0c99811ddb8bd2583c33fd33cf7f21af1c142e824ffb57", size = 50119, upload-time = "2025-09-12T07:33:53.816Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/93/2fa34714b7a4ae72f2f8dad66ba17dd9a2c793220719e736dda28b7aec27/pytest_asyncio-1.2.0-py3-none-any.whl", hash = "sha256:8e17ae5e46d8e7efe51ab6494dd2010f4ca8dae51652aa3c8d55acf50bfb2e99", size = 15095, upload-time = "2025-09-12T07:33:52.639Z" }, -] - [[package]] name = "pytest-asyncio" version = "1.3.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] dependencies = [ - { name = "backports-asyncio-runner", marker = "python_full_version == '3.10.*'" }, - { name = "pytest", version = "9.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, + { name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" }, + { name = "pytest" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/90/2c/8af215c0f776415f3590cac4f9086ccefd6fd463befeae41cd4d3f193e5a/pytest_asyncio-1.3.0.tar.gz", hash = "sha256:d7f52f36d231b80ee124cd216ffb19369aa168fc10095013c6b014a34d3ee9e5", size = 50087, upload-time = "2025-11-10T16:07:47.256Z" } wheels = [ @@ -1972,11 +1512,9 @@ name = "pytest-cov" version = "7.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "coverage", version = "7.10.7", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version < '3.10'" }, - { name = "coverage", version = "7.12.0", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version >= '3.10'" }, + { name = "coverage", extra = ["toml"] }, { name = "pluggy" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pytest", version = "9.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pytest" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328, upload-time = "2025-09-09T10:57:02.113Z" } wheels = [ @@ -2054,15 +1592,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, - { url = "https://files.pythonhosted.org/packages/9f/62/67fc8e68a75f738c9200422bf65693fb79a4cd0dc5b23310e5202e978090/pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da", size = 184450, upload-time = "2025-09-25T21:33:00.618Z" }, - { url = "https://files.pythonhosted.org/packages/ae/92/861f152ce87c452b11b9d0977952259aa7df792d71c1053365cc7b09cc08/pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917", size = 174319, upload-time = "2025-09-25T21:33:02.086Z" }, - { url = "https://files.pythonhosted.org/packages/d0/cd/f0cfc8c74f8a030017a2b9c771b7f47e5dd702c3e28e5b2071374bda2948/pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9", size = 737631, upload-time = "2025-09-25T21:33:03.25Z" }, - { url = "https://files.pythonhosted.org/packages/ef/b2/18f2bd28cd2055a79a46c9b0895c0b3d987ce40ee471cecf58a1a0199805/pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5", size = 836795, upload-time = "2025-09-25T21:33:05.014Z" }, - { url = "https://files.pythonhosted.org/packages/73/b9/793686b2d54b531203c160ef12bec60228a0109c79bae6c1277961026770/pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a", size = 750767, upload-time = "2025-09-25T21:33:06.398Z" }, - { url = "https://files.pythonhosted.org/packages/a9/86/a137b39a611def2ed78b0e66ce2fe13ee701a07c07aebe55c340ed2a050e/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926", size = 727982, upload-time = "2025-09-25T21:33:08.708Z" }, - { url = "https://files.pythonhosted.org/packages/dd/62/71c27c94f457cf4418ef8ccc71735324c549f7e3ea9d34aba50874563561/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7", size = 755677, upload-time = "2025-09-25T21:33:09.876Z" }, - { url = "https://files.pythonhosted.org/packages/29/3d/6f5e0d58bd924fb0d06c3a6bad00effbdae2de5adb5cda5648006ffbd8d3/pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0", size = 142592, upload-time = "2025-09-25T21:33:10.983Z" }, - { url = "https://files.pythonhosted.org/packages/f0/0c/25113e0b5e103d7f1490c0e947e303fe4a696c10b501dea7a9f49d4e876c/pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007", size = 158777, upload-time = "2025-09-25T21:33:15.55Z" }, ] [[package]] @@ -2157,16 +1686,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b9/17/4e01a602693b572149f92c983c1f25bd608df02c3f5cf50fd1f94e124a59/ruamel_yaml_clib-0.2.15-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:542d77b72786a35563f97069b9379ce762944e67055bea293480f7734b2c7e5e", size = 765882, upload-time = "2025-11-16T16:13:49.526Z" }, { url = "https://files.pythonhosted.org/packages/9f/17/7999399081d39ebb79e807314de6b611e1d1374458924eb2a489c01fc5ad/ruamel_yaml_clib-0.2.15-cp314-cp314-win32.whl", hash = "sha256:424ead8cef3939d690c4b5c85ef5b52155a231ff8b252961b6516ed7cf05f6aa", size = 102567, upload-time = "2025-11-16T16:13:50.78Z" }, { url = "https://files.pythonhosted.org/packages/d2/67/be582a7370fdc9e6846c5be4888a530dcadd055eef5b932e0e85c33c7d73/ruamel_yaml_clib-0.2.15-cp314-cp314-win_amd64.whl", hash = "sha256:ac9b8d5fa4bb7fd2917ab5027f60d4234345fd366fe39aa711d5dca090aa1467", size = 122847, upload-time = "2025-11-16T16:13:51.807Z" }, - { url = "https://files.pythonhosted.org/packages/99/85/6eefb87f379dd7de0f84b5b0613fbeb62b77c3b3fea0bcc39d1645af82fb/ruamel_yaml_clib-0.2.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:923816815974425fbb1f1bf57e85eca6e14d8adc313c66db21c094927ad01815", size = 148240, upload-time = "2025-11-16T16:13:53.911Z" }, - { url = "https://files.pythonhosted.org/packages/52/9b/daff728d384563063cfcc08b67178ae0974e4bf8a239a11c826098c325e7/ruamel_yaml_clib-0.2.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dcc7f3162d3711fd5d52e2267e44636e3e566d1e5675a5f0b30e98f2c4af7974", size = 132980, upload-time = "2025-11-16T16:13:55.059Z" }, - { url = "https://files.pythonhosted.org/packages/e7/a5/e9e14332cb5144df205cb8a705edf6af9360a751a3e5801e1fa0bb8fa30d/ruamel_yaml_clib-0.2.15-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5d3c9210219cbc0f22706f19b154c9a798ff65a6beeafbf77fc9c057ec806f7d", size = 695861, upload-time = "2025-11-16T20:22:55.659Z" }, - { url = "https://files.pythonhosted.org/packages/45/a1/ac45c5c0a406edbdfedb4148f06125bf994a378082bf85e13ace9b2f2a0f/ruamel_yaml_clib-0.2.15-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bb7b728fd9f405aa00b4a0b17ba3f3b810d0ccc5f77f7373162e9b5f0ff75d5", size = 703585, upload-time = "2025-11-16T16:13:56.515Z" }, - { url = "https://files.pythonhosted.org/packages/ca/20/3e7b0d26261c2ac0c272f42f21408bf2d01aaa08cddd378a51056b3f5fbc/ruamel_yaml_clib-0.2.15-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3cb75a3c14f1d6c3c2a94631e362802f70e83e20d1f2b2ef3026c05b415c4900", size = 734102, upload-time = "2025-11-16T16:13:57.812Z" }, - { url = "https://files.pythonhosted.org/packages/00/3d/231c8902ef8e35c5dd31bb484d3b807aee952b53ee434c0ebb3609ced170/ruamel_yaml_clib-0.2.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:badd1d7283f3e5894779a6ea8944cc765138b96804496c91812b2829f70e18a7", size = 695072, upload-time = "2025-11-16T16:13:59.295Z" }, - { url = "https://files.pythonhosted.org/packages/dc/fb/f97f98e6d82e07f1b499fb251505d2fda30da318cc7f8708c22397bbb265/ruamel_yaml_clib-0.2.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0ba6604bbc3dfcef844631932d06a1a4dcac3fee904efccf582261948431628a", size = 707541, upload-time = "2025-11-16T20:22:56.84Z" }, - { url = "https://files.pythonhosted.org/packages/99/3e/dcb5158d09dc028ada88555a22eeaace8717f4e7bd077d8bfa22ce07e02b/ruamel_yaml_clib-0.2.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a8220fd4c6f98485e97aea65e1df76d4fed1678ede1fe1d0eed2957230d287c4", size = 726459, upload-time = "2025-11-16T16:14:00.443Z" }, - { url = "https://files.pythonhosted.org/packages/28/e8/4752698aada0a6fef4cef3346d61b5de11304950886cc03354d9af554082/ruamel_yaml_clib-0.2.15-cp39-cp39-win32.whl", hash = "sha256:04d21dc9c57d9608225da28285900762befbb0165ae48482c15d8d4989d4af14", size = 103348, upload-time = "2025-11-16T16:14:01.964Z" }, - { url = "https://files.pythonhosted.org/packages/f8/3b/5db40ece46cff9d9a265fb636722f1f5c1a027c1da09921a6c5693d920be/ruamel_yaml_clib-0.2.15-cp39-cp39-win_amd64.whl", hash = "sha256:27dc656e84396e6d687f97c6e65fb284d100483628f02d95464fd731743a4afe", size = 122500, upload-time = "2025-11-16T16:14:03.018Z" }, ] [[package]] @@ -2225,35 +1744,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/15/5b/bb14c0a7474463b1aa3c09e866cb172dffc66ed2993b7ea8f1db581e86ee/shellcheck_py-0.11.0.1-py2.py3-none-win_amd64.whl", hash = "sha256:784156289ecb17e91c692cd783ab5152333309588cabb10032a047331c63e759", size = 8027541, upload-time = "2025-08-09T17:53:40.889Z" }, ] -[[package]] -name = "shibuya" -version = "2025.10.21" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "pygments-styles", marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/17/e8/462f93f31465220542ee8f1e415819d9e96da78694dc6d04a96dbbf0011f/shibuya-2025.10.21.tar.gz", hash = "sha256:a668f2a33c8b57d33d78bd6edf723eece5734d01f129f973333e7096ad6b3690", size = 82108, upload-time = "2025-10-21T06:03:40.444Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/15/f4/cfad1fb1395e3756ea8eee7db9510c8dbe6796bb6c34eac2eac50650df9c/shibuya-2025.10.21-py3-none-any.whl", hash = "sha256:916e48c97ba5cc4b1949742beac19cf48923e12965a0d1689fda460d363f4d82", size = 98077, upload-time = "2025-10-21T06:03:38.571Z" }, -] - [[package]] name = "shibuya" version = "2025.11.10" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] dependencies = [ - { name = "pygments-styles", marker = "python_full_version >= '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "pygments-styles" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cf/e3/53fe8d84008aa0f0baea769973a3e8baa2fe2895e6994ba94767ba52bb14/shibuya-2025.11.10.tar.gz", hash = "sha256:7a8a2b4ac6c3fb8d2f75a15098458e376f5af33cfff45b21e5816e41dfcc5dd3", size = 82201, upload-time = "2025-11-10T09:13:54.308Z" } @@ -2306,64 +1803,32 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c", size = 36679, upload-time = "2025-08-27T15:39:50.179Z" }, ] -[[package]] -name = "sphinx" -version = "7.4.7" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "alabaster", version = "0.7.16", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "babel", marker = "python_full_version < '3.10'" }, - { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, - { name = "docutils", marker = "python_full_version < '3.10'" }, - { name = "imagesize", marker = "python_full_version < '3.10'" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "jinja2", marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "pygments", marker = "python_full_version < '3.10'" }, - { name = "requests", marker = "python_full_version < '3.10'" }, - { name = "snowballstemmer", marker = "python_full_version < '3.10'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.10'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.10'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.10'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.10'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.10'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.10'" }, - { name = "tomli", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5b/be/50e50cb4f2eff47df05673d361095cafd95521d2a22521b920c67a372dcb/sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe", size = 8067911, upload-time = "2024-07-20T14:46:56.059Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/ef/153f6803c5d5f8917dbb7f7fcf6d34a871ede3296fa89c2c703f5f8a6c8e/sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239", size = 3401624, upload-time = "2024-07-20T14:46:52.142Z" }, -] - [[package]] name = "sphinx" version = "8.1.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] -dependencies = [ - { name = "alabaster", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "babel", marker = "python_full_version == '3.10.*'" }, - { name = "colorama", marker = "python_full_version == '3.10.*' and sys_platform == 'win32'" }, - { name = "docutils", marker = "python_full_version == '3.10.*'" }, - { name = "imagesize", marker = "python_full_version == '3.10.*'" }, - { name = "jinja2", marker = "python_full_version == '3.10.*'" }, - { name = "packaging", marker = "python_full_version == '3.10.*'" }, - { name = "pygments", marker = "python_full_version == '3.10.*'" }, - { name = "requests", marker = "python_full_version == '3.10.*'" }, - { name = "snowballstemmer", marker = "python_full_version == '3.10.*'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version == '3.10.*'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version == '3.10.*'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version == '3.10.*'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version == '3.10.*'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version == '3.10.*'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version == '3.10.*'" }, - { name = "tomli", marker = "python_full_version == '3.10.*'" }, + "python_full_version < '3.10.2'", +] +dependencies = [ + { name = "alabaster", marker = "python_full_version < '3.11'" }, + { name = "babel", marker = "python_full_version < '3.11'" }, + { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, + { name = "docutils", marker = "python_full_version < '3.11'" }, + { name = "imagesize", marker = "python_full_version < '3.11'" }, + { name = "jinja2", marker = "python_full_version < '3.11'" }, + { name = "packaging", marker = "python_full_version < '3.11'" }, + { name = "pygments", marker = "python_full_version < '3.11'" }, + { name = "requests", marker = "python_full_version < '3.11'" }, + { name = "snowballstemmer", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.11'" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } wheels = [ @@ -2379,7 +1844,7 @@ resolution-markers = [ "python_full_version >= '3.11' and python_full_version < '3.13'", ] dependencies = [ - { name = "alabaster", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "alabaster", marker = "python_full_version >= '3.11'" }, { name = "babel", marker = "python_full_version >= '3.11'" }, { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, { name = "docutils", marker = "python_full_version >= '3.11'" }, @@ -2408,15 +1873,12 @@ version = "2024.10.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", - "python_full_version < '3.10'", + "python_full_version < '3.10.2'", ] dependencies = [ { name = "colorama", marker = "python_full_version < '3.11'" }, - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "starlette", version = "0.49.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "starlette", version = "0.50.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "starlette", marker = "python_full_version < '3.11'" }, { name = "uvicorn", marker = "python_full_version < '3.11'" }, { name = "watchfiles", marker = "python_full_version < '3.11'" }, { name = "websockets", marker = "python_full_version < '3.11'" }, @@ -2437,7 +1899,7 @@ resolution-markers = [ dependencies = [ { name = "colorama", marker = "python_full_version >= '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "starlette", version = "0.50.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "starlette", marker = "python_full_version >= '3.11'" }, { name = "uvicorn", marker = "python_full_version >= '3.11'" }, { name = "watchfiles", marker = "python_full_version >= '3.11'" }, { name = "websockets", marker = "python_full_version >= '3.11'" }, @@ -2447,31 +1909,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/20/56411b52f917696995f5ad27d2ea7e9492c84a043c5b49a3a3173573cd93/sphinx_autobuild-2025.8.25-py3-none-any.whl", hash = "sha256:b750ac7d5a18603e4665294323fd20f6dcc0a984117026d1986704fa68f0379a", size = 12535, upload-time = "2025-08-25T18:44:54.164Z" }, ] -[[package]] -name = "sphinx-autodoc-typehints" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/74/cd/03e7b917230dc057922130a79ba0240df1693bfd76727ea33fae84b39138/sphinx_autodoc_typehints-2.3.0.tar.gz", hash = "sha256:535c78ed2d6a1bad393ba9f3dfa2602cf424e2631ee207263e07874c38fde084", size = 40709, upload-time = "2024-08-29T16:25:48.343Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/f3/e0a4ce49da4b6f4e4ce84b3c39a0677831884cb9d8a87ccbf1e9e56e53ac/sphinx_autodoc_typehints-2.3.0-py3-none-any.whl", hash = "sha256:3098e2c6d0ba99eacd013eb06861acc9b51c6e595be86ab05c08ee5506ac0c67", size = 19836, upload-time = "2024-08-29T16:25:46.707Z" }, -] - [[package]] name = "sphinx-autodoc-typehints" version = "3.0.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", + "python_full_version < '3.10.2'", ] dependencies = [ - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/26/f0/43c6a5ff3e7b08a8c3b32f81b859f1b518ccc31e45f22e2b41ced38be7b9/sphinx_autodoc_typehints-3.0.1.tar.gz", hash = "sha256:b9b40dd15dee54f6f810c924f863f9cf1c54f9f3265c495140ea01be7f44fa55", size = 36282, upload-time = "2025-01-16T18:25:30.958Z" } wheels = [ @@ -2499,8 +1946,7 @@ name = "sphinx-copybutton" version = "0.5.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fc/2b/a964715e7f5295f77509e59309959f4125122d648f86b4fe7d70ca1d882c/sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd", size = 23039, upload-time = "2023-04-14T08:10:22.998Z" } @@ -2513,8 +1959,7 @@ name = "sphinx-design" version = "0.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2b/69/b34e0cb5336f09c6866d53b4a19d76c227cdec1bbc7ac4de63ca7d58c9c7/sphinx_design-0.6.1.tar.gz", hash = "sha256:b44eea3719386d04d765c1a8257caca2b3e6f8421d7b3a5e742c0fd45f84e632", size = 2193689, upload-time = "2024-08-02T13:48:44.277Z" } @@ -2542,47 +1987,23 @@ version = "0.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "docutils" }, - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ae/21/62d3a58ff7bd02bbb9245a63d1f0d2e0455522a11a78951d16088569fca8/sphinx-paramlinks-0.6.0.tar.gz", hash = "sha256:746a0816860aa3fff5d8d746efcbec4deead421f152687411db1d613d29f915e", size = 12363, upload-time = "2023-08-11T16:09:28.604Z" } -[[package]] -name = "sphinx-prompt" -version = "1.8.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "docutils", marker = "python_full_version < '3.10'" }, - { name = "pygments", marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e7/fb/7a07b8df1ca2418147a6b13e3f6b445071f2565198b45efa631d0d6ef0cd/sphinx_prompt-1.8.0.tar.gz", hash = "sha256:47482f86fcec29662fdfd23e7c04ef03582714195d01f5d565403320084372ed", size = 5121, upload-time = "2023-09-14T12:46:13.449Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/49/f890a2668b7cbf375f5528b549c8d36dd2e801b0fbb7b2b5ef65663ecb6c/sphinx_prompt-1.8.0-py3-none-any.whl", hash = "sha256:369ecc633f0711886f9b3a078c83264245be1adf46abeeb9b88b5519e4b51007", size = 7298, upload-time = "2023-09-14T12:46:12.373Z" }, -] - [[package]] name = "sphinx-prompt" version = "1.9.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] dependencies = [ - { name = "certifi", marker = "python_full_version >= '3.10'" }, - { name = "docutils", marker = "python_full_version >= '3.10'" }, - { name = "idna", marker = "python_full_version >= '3.10'" }, - { name = "pygments", marker = "python_full_version >= '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "certifi" }, + { name = "docutils" }, + { name = "idna" }, + { name = "pygments" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "urllib3", marker = "python_full_version >= '3.10'" }, + { name = "urllib3" }, ] sdist = { url = "https://files.pythonhosted.org/packages/34/fe/ac4e24f35b5148b31ac717ae7dcc7a2f7ec56eb729e22c7252ed8ad2d9a5/sphinx_prompt-1.9.0.tar.gz", hash = "sha256:471b3c6d466dce780a9b167d9541865fd4e9a80ed46e31b06a52a0529ae995a1", size = 5340, upload-time = "2024-08-07T15:46:51.428Z" } wheels = [ @@ -2596,8 +2017,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "docutils" }, { name = "pygments" }, - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/27/32/ab475e252dc2b704e82a91141fa404cdd8901a5cf34958fd22afacebfccd/sphinx-tabs-3.4.5.tar.gz", hash = "sha256:ba9d0c1e3e37aaadd4b5678449eb08176770e0fc227e769b6ce747df3ceea531", size = 16070, upload-time = "2024-01-21T12:13:39.392Z" } @@ -2612,8 +2032,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "docutils" }, { name = "setuptools" }, - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "wheel" }, ] @@ -2630,24 +2049,19 @@ dependencies = [ { name = "apeye" }, { name = "autodocsumm" }, { name = "beautifulsoup4" }, - { name = "cachecontrol", version = "0.14.3", source = { registry = "https://pypi.org/simple" }, extra = ["filecache"], marker = "python_full_version < '3.10'" }, - { name = "cachecontrol", version = "0.14.4", source = { registry = "https://pypi.org/simple" }, extra = ["filecache"], marker = "python_full_version >= '3.10'" }, + { name = "cachecontrol", extra = ["filecache"] }, { name = "dict2css" }, { name = "docutils" }, { name = "domdf-python-tools" }, - { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "filelock", version = "3.20.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "filelock" }, { name = "html5lib" }, { name = "ruamel-yaml" }, - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "sphinx-autodoc-typehints", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx-autodoc-typehints", version = "3.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx-autodoc-typehints", version = "3.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx-autodoc-typehints", version = "3.5.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx-jinja2-compat" }, - { name = "sphinx-prompt", version = "1.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx-prompt", version = "1.9.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "sphinx-prompt" }, { name = "sphinx-tabs" }, { name = "tabulate" }, { name = "typing-extensions" }, @@ -2699,8 +2113,7 @@ version = "1.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/97/83/11fe1f2968c05fae725e473e8b3be08cbe5f51b83ddaf3309ab4c841082a/sphinxcontrib_mermaid-1.2.2.tar.gz", hash = "sha256:35423c13e565abb839b13f955f9722f0769e77e5d607ca07877ce93e1636c196", size = 18851, upload-time = "2025-11-24T01:05:48.702Z" } @@ -2768,14 +2181,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/88/ee/4afb39a8ee4fc786e2d716c20ab87b5b1fb33d4ac4129a1aaa574ae8a585/sqlalchemy-2.0.44-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1e77faf6ff919aa8cd63f1c4e561cac1d9a454a191bb864d5dd5e545935e5a40", size = 3226248, upload-time = "2025-10-10T15:43:51.862Z" }, { url = "https://files.pythonhosted.org/packages/32/d5/0e66097fc64fa266f29a7963296b40a80d6a997b7ac13806183700676f86/sqlalchemy-2.0.44-cp313-cp313-win32.whl", hash = "sha256:ee51625c2d51f8baadf2829fae817ad0b66b140573939dd69284d2ba3553ae73", size = 2101275, upload-time = "2025-10-10T15:03:26.096Z" }, { url = "https://files.pythonhosted.org/packages/03/51/665617fe4f8c6450f42a6d8d69243f9420f5677395572c2fe9d21b493b7b/sqlalchemy-2.0.44-cp313-cp313-win_amd64.whl", hash = "sha256:c1c80faaee1a6c3428cecf40d16a2365bcf56c424c92c2b6f0f9ad204b899e9e", size = 2127901, upload-time = "2025-10-10T15:03:27.548Z" }, - { url = "https://files.pythonhosted.org/packages/65/1c/819435b7cb66dac6192e6af8b7d0896b9507edf798f3826b9590c7e980db/sqlalchemy-2.0.44-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7027414f2b88992877573ab780c19ecb54d3a536bef3397933573d6b5068be4", size = 2138850, upload-time = "2025-10-10T16:20:45.841Z" }, - { url = "https://files.pythonhosted.org/packages/fd/06/e8637ce5c4fdc027c00a9611052329169ef5a99feb22efd38866e27caf27/sqlalchemy-2.0.44-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fe166c7d00912e8c10d3a9a0ce105569a31a3d0db1a6e82c4e0f4bf16d5eca9", size = 2128842, upload-time = "2025-10-10T16:20:47.209Z" }, - { url = "https://files.pythonhosted.org/packages/c3/5b/86f7cc573254bbfa50b339d8c72c5c026ceaa0adaa114237884886a0e14b/sqlalchemy-2.0.44-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3caef1ff89b1caefc28f0368b3bde21a7e3e630c2eddac16abd9e47bd27cc36a", size = 3216858, upload-time = "2025-10-10T15:38:33.535Z" }, - { url = "https://files.pythonhosted.org/packages/2f/ee/c9e582288edb41a47df7525f9fcae775d9f0b7da8eda8732f9d22f0c383e/sqlalchemy-2.0.44-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc2856d24afa44295735e72f3c75d6ee7fdd4336d8d3a8f3d44de7aa6b766df2", size = 3217019, upload-time = "2025-10-10T15:45:13.678Z" }, - { url = "https://files.pythonhosted.org/packages/71/a1/449f3bea46769b31443eac4152452af684c0ddd64e3c4719b636f85a5604/sqlalchemy-2.0.44-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:11bac86b0deada30b6b5f93382712ff0e911fe8d31cb9bf46e6b149ae175eff0", size = 3155491, upload-time = "2025-10-10T15:38:35.317Z" }, - { url = "https://files.pythonhosted.org/packages/0e/34/f99b584a0bf94ff2e822bcb4951dcc24a7967476b35b9b3c35bc11cbd6bc/sqlalchemy-2.0.44-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d18cd0e9a0f37c9f4088e50e3839fcb69a380a0ec957408e0b57cff08ee0a26", size = 3179978, upload-time = "2025-10-10T15:45:15.262Z" }, - { url = "https://files.pythonhosted.org/packages/ae/43/71a22aa66a1ef974f4e34982ce55d5f38d4770d2f0091eb210374e860b8e/sqlalchemy-2.0.44-cp39-cp39-win32.whl", hash = "sha256:9e9018544ab07614d591a26c1bd4293ddf40752cc435caf69196740516af7100", size = 2106888, upload-time = "2025-10-10T15:45:58.079Z" }, - { url = "https://files.pythonhosted.org/packages/08/fb/cc98eb1ab3c5ad92b51c0db17ee86d1c33379a7490da376567b902222dcf/sqlalchemy-2.0.44-cp39-cp39-win_amd64.whl", hash = "sha256:8e0e4e66fd80f277a8c3de016a81a554e76ccf6b8d881ee0b53200305a8433f6", size = 2130728, upload-time = "2025-10-10T15:45:59.7Z" }, { url = "https://files.pythonhosted.org/packages/9c/5e/6a29fa884d9fb7ddadf6b69490a9d45fded3b38541713010dad16b77d015/sqlalchemy-2.0.44-py3-none-any.whl", hash = "sha256:19de7ca1246fbef9f9d1bff8f1ab25641569df226364a0e40457dc5457c54b05", size = 1928718, upload-time = "2025-10-10T15:29:45.32Z" }, ] @@ -2793,35 +2198,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fb/d0/9852f70eb01f814843530c053542b72d30e9fbf74da7abb0107e71938389/standard_imghdr-3.10.14-py3-none-any.whl", hash = "sha256:cdf6883163349624dee9a81d2853a20260337c4cd41c04e99c082e01833a08e2", size = 5598, upload-time = "2024-04-21T18:54:48.587Z" }, ] -[[package]] -name = "starlette" -version = "0.49.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "anyio", marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/de/1a/608df0b10b53b0beb96a37854ee05864d182ddd4b1156a22f1ad3860425a/starlette-0.49.3.tar.gz", hash = "sha256:1c14546f299b5901a1ea0e34410575bc33bbd741377a10484a54445588d00284", size = 2655031, upload-time = "2025-11-01T15:12:26.13Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/e0/021c772d6a662f43b63044ab481dc6ac7592447605b5b35a957785363122/starlette-0.49.3-py3-none-any.whl", hash = "sha256:b579b99715fdc2980cf88c8ec96d3bf1ce16f5a8051a7c2b84ef9b1cdecaea2f", size = 74340, upload-time = "2025-11-01T15:12:24.387Z" }, -] - [[package]] name = "starlette" version = "0.50.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version >= '3.11' and python_full_version < '3.13'", - "python_full_version >= '3.10.2' and python_full_version < '3.11'", - "python_full_version >= '3.10' and python_full_version < '3.10.2'", -] dependencies = [ - { name = "anyio", marker = "python_full_version >= '3.10'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ba/b8/73a0e6a6e079a9d9cfa64113d771e421640b6f679a52eeb9b32f72d871a1/starlette-0.50.0.tar.gz", hash = "sha256:a2a17b22203254bcbc2e1f926d2d55f3f9497f769416b3190768befe598fa3ca", size = 2646985, upload-time = "2025-11-01T15:25:27.516Z" } wheels = [ @@ -2930,8 +2313,7 @@ name = "uvicorn" version = "0.38.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "click", version = "8.3.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "click" }, { name = "h11" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] @@ -3033,18 +2415,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4f/55/2af26693fd15165c4ff7857e38330e1b61ab8c37d15dc79118cdba115b7a/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c", size = 455072, upload-time = "2025-10-14T15:05:48.928Z" }, { url = "https://files.pythonhosted.org/packages/66/1d/d0d200b10c9311ec25d2273f8aad8c3ef7cc7ea11808022501811208a750/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099", size = 629104, upload-time = "2025-10-14T15:05:49.908Z" }, { url = "https://files.pythonhosted.org/packages/e3/bd/fa9bb053192491b3867ba07d2343d9f2252e00811567d30ae8d0f78136fe/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01", size = 622112, upload-time = "2025-10-14T15:05:50.941Z" }, - { url = "https://files.pythonhosted.org/packages/a4/68/a7303a15cc797ab04d58f1fea7f67c50bd7f80090dfd7e750e7576e07582/watchfiles-1.1.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70", size = 409220, upload-time = "2025-10-14T15:05:51.917Z" }, - { url = "https://files.pythonhosted.org/packages/99/b8/d1857ce9ac76034c053fa7ef0e0ef92d8bd031e842ea6f5171725d31e88f/watchfiles-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e", size = 396712, upload-time = "2025-10-14T15:05:53.437Z" }, - { url = "https://files.pythonhosted.org/packages/41/7a/da7ada566f48beaa6a30b13335b49d1f6febaf3a5ddbd1d92163a1002cf4/watchfiles-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956", size = 451462, upload-time = "2025-10-14T15:05:54.742Z" }, - { url = "https://files.pythonhosted.org/packages/e2/b2/7cb9e0d5445a8d45c4cccd68a590d9e3a453289366b96ff37d1075aaebef/watchfiles-1.1.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c", size = 460811, upload-time = "2025-10-14T15:05:55.743Z" }, - { url = "https://files.pythonhosted.org/packages/04/9d/b07d4491dde6db6ea6c680fdec452f4be363d65c82004faf2d853f59b76f/watchfiles-1.1.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c", size = 490576, upload-time = "2025-10-14T15:05:56.983Z" }, - { url = "https://files.pythonhosted.org/packages/56/03/e64dcab0a1806157db272a61b7891b062f441a30580a581ae72114259472/watchfiles-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3", size = 597726, upload-time = "2025-10-14T15:05:57.986Z" }, - { url = "https://files.pythonhosted.org/packages/5c/8e/a827cf4a8d5f2903a19a934dcf512082eb07675253e154d4cd9367978a58/watchfiles-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2", size = 474900, upload-time = "2025-10-14T15:05:59.378Z" }, - { url = "https://files.pythonhosted.org/packages/dc/a6/94fed0b346b85b22303a12eee5f431006fae6af70d841cac2f4403245533/watchfiles-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02", size = 457521, upload-time = "2025-10-14T15:06:00.419Z" }, - { url = "https://files.pythonhosted.org/packages/c4/64/bc3331150e8f3c778d48a4615d4b72b3d2d87868635e6c54bbd924946189/watchfiles-1.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be", size = 632191, upload-time = "2025-10-14T15:06:01.621Z" }, - { url = "https://files.pythonhosted.org/packages/e4/84/f39e19549c2f3ec97225dcb2ceb9a7bb3c5004ed227aad1f321bf0ff2051/watchfiles-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f", size = 623923, upload-time = "2025-10-14T15:06:02.671Z" }, - { url = "https://files.pythonhosted.org/packages/0e/24/0759ae15d9a0c9c5fe946bd4cf45ab9e7bad7cfede2c06dc10f59171b29f/watchfiles-1.1.1-cp39-cp39-win32.whl", hash = "sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b", size = 274010, upload-time = "2025-10-14T15:06:03.779Z" }, - { url = "https://files.pythonhosted.org/packages/7e/3b/eb26cddd4dfa081e2bf6918be3b2fc05ee3b55c1d21331d5562ee0c6aaad/watchfiles-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957", size = 289090, upload-time = "2025-10-14T15:06:04.821Z" }, { url = "https://files.pythonhosted.org/packages/ba/4c/a888c91e2e326872fa4705095d64acd8aa2fb9c1f7b9bd0588f33850516c/watchfiles-1.1.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3", size = 409611, upload-time = "2025-10-14T15:06:05.809Z" }, { url = "https://files.pythonhosted.org/packages/1e/c7/5420d1943c8e3ce1a21c0a9330bcf7edafb6aa65d26b21dbb3267c9e8112/watchfiles-1.1.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2", size = 396889, upload-time = "2025-10-14T15:06:07.035Z" }, { url = "https://files.pythonhosted.org/packages/0c/e5/0072cef3804ce8d3aaddbfe7788aadff6b3d3f98a286fdbee9fd74ca59a7/watchfiles-1.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d", size = 451616, upload-time = "2025-10-14T15:06:08.072Z" }, @@ -3053,10 +2423,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bd/95/615e72cd27b85b61eec764a5ca51bd94d40b5adea5ff47567d9ebc4d275a/watchfiles-1.1.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336", size = 396117, upload-time = "2025-10-14T15:06:11.28Z" }, { url = "https://files.pythonhosted.org/packages/c9/81/e7fe958ce8a7fb5c73cc9fb07f5aeaf755e6aa72498c57d760af760c91f8/watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24", size = 450493, upload-time = "2025-10-14T15:06:12.321Z" }, { url = "https://files.pythonhosted.org/packages/6e/d4/ed38dd3b1767193de971e694aa544356e63353c33a85d948166b5ff58b9e/watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49", size = 457546, upload-time = "2025-10-14T15:06:13.372Z" }, - { url = "https://files.pythonhosted.org/packages/00/db/38a2c52fdbbfe2fc7ffaaaaaebc927d52b9f4d5139bba3186c19a7463001/watchfiles-1.1.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f", size = 409210, upload-time = "2025-10-14T15:06:14.492Z" }, - { url = "https://files.pythonhosted.org/packages/d1/43/d7e8b71f6c21ff813ee8da1006f89b6c7fff047fb4c8b16ceb5e840599c5/watchfiles-1.1.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34", size = 397286, upload-time = "2025-10-14T15:06:16.177Z" }, - { url = "https://files.pythonhosted.org/packages/1f/5d/884074a5269317e75bd0b915644b702b89de73e61a8a7446e2b225f45b1f/watchfiles-1.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc", size = 451768, upload-time = "2025-10-14T15:06:18.266Z" }, - { url = "https://files.pythonhosted.org/packages/17/71/7ffcaa9b5e8961a25026058058c62ec8f604d2a6e8e1e94bee8a09e1593f/watchfiles-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e", size = 458561, upload-time = "2025-10-14T15:06:19.323Z" }, ] [[package]] @@ -3118,29 +2484,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, - { url = "https://files.pythonhosted.org/packages/36/db/3fff0bcbe339a6fa6a3b9e3fbc2bfb321ec2f4cd233692272c5a8d6cf801/websockets-15.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5", size = 175424, upload-time = "2025-03-05T20:02:56.505Z" }, - { url = "https://files.pythonhosted.org/packages/46/e6/519054c2f477def4165b0ec060ad664ed174e140b0d1cbb9fafa4a54f6db/websockets-15.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a", size = 173077, upload-time = "2025-03-05T20:02:58.37Z" }, - { url = "https://files.pythonhosted.org/packages/1a/21/c0712e382df64c93a0d16449ecbf87b647163485ca1cc3f6cbadb36d2b03/websockets-15.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b", size = 173324, upload-time = "2025-03-05T20:02:59.773Z" }, - { url = "https://files.pythonhosted.org/packages/1c/cb/51ba82e59b3a664df54beed8ad95517c1b4dc1a913730e7a7db778f21291/websockets-15.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770", size = 182094, upload-time = "2025-03-05T20:03:01.827Z" }, - { url = "https://files.pythonhosted.org/packages/fb/0f/bf3788c03fec679bcdaef787518dbe60d12fe5615a544a6d4cf82f045193/websockets-15.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb", size = 181094, upload-time = "2025-03-05T20:03:03.123Z" }, - { url = "https://files.pythonhosted.org/packages/5e/da/9fb8c21edbc719b66763a571afbaf206cb6d3736d28255a46fc2fe20f902/websockets-15.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054", size = 181397, upload-time = "2025-03-05T20:03:04.443Z" }, - { url = "https://files.pythonhosted.org/packages/2e/65/65f379525a2719e91d9d90c38fe8b8bc62bd3c702ac651b7278609b696c4/websockets-15.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee", size = 181794, upload-time = "2025-03-05T20:03:06.708Z" }, - { url = "https://files.pythonhosted.org/packages/d9/26/31ac2d08f8e9304d81a1a7ed2851c0300f636019a57cbaa91342015c72cc/websockets-15.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed", size = 181194, upload-time = "2025-03-05T20:03:08.844Z" }, - { url = "https://files.pythonhosted.org/packages/98/72/1090de20d6c91994cd4b357c3f75a4f25ee231b63e03adea89671cc12a3f/websockets-15.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880", size = 181164, upload-time = "2025-03-05T20:03:10.242Z" }, - { url = "https://files.pythonhosted.org/packages/2d/37/098f2e1c103ae8ed79b0e77f08d83b0ec0b241cf4b7f2f10edd0126472e1/websockets-15.0.1-cp39-cp39-win32.whl", hash = "sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411", size = 176381, upload-time = "2025-03-05T20:03:12.77Z" }, - { url = "https://files.pythonhosted.org/packages/75/8b/a32978a3ab42cebb2ebdd5b05df0696a09f4d436ce69def11893afa301f0/websockets-15.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4", size = 176841, upload-time = "2025-03-05T20:03:14.367Z" }, { url = "https://files.pythonhosted.org/packages/02/9e/d40f779fa16f74d3468357197af8d6ad07e7c5a27ea1ca74ceb38986f77a/websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3", size = 173109, upload-time = "2025-03-05T20:03:17.769Z" }, { url = "https://files.pythonhosted.org/packages/bc/cd/5b887b8585a593073fd92f7c23ecd3985cd2c3175025a91b0d69b0551372/websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1", size = 173343, upload-time = "2025-03-05T20:03:19.094Z" }, { url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599, upload-time = "2025-03-05T20:03:21.1Z" }, { url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207, upload-time = "2025-03-05T20:03:23.221Z" }, { url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155, upload-time = "2025-03-05T20:03:25.321Z" }, { url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884, upload-time = "2025-03-05T20:03:27.934Z" }, - { url = "https://files.pythonhosted.org/packages/b7/48/4b67623bac4d79beb3a6bb27b803ba75c1bdedc06bd827e465803690a4b2/websockets-15.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940", size = 173106, upload-time = "2025-03-05T20:03:29.404Z" }, - { url = "https://files.pythonhosted.org/packages/ed/f0/adb07514a49fe5728192764e04295be78859e4a537ab8fcc518a3dbb3281/websockets-15.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e", size = 173339, upload-time = "2025-03-05T20:03:30.755Z" }, - { url = "https://files.pythonhosted.org/packages/87/28/bd23c6344b18fb43df40d0700f6d3fffcd7cef14a6995b4f976978b52e62/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9", size = 174597, upload-time = "2025-03-05T20:03:32.247Z" }, - { url = "https://files.pythonhosted.org/packages/6d/79/ca288495863d0f23a60f546f0905ae8f3ed467ad87f8b6aceb65f4c013e4/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b", size = 174205, upload-time = "2025-03-05T20:03:33.731Z" }, - { url = "https://files.pythonhosted.org/packages/04/e4/120ff3180b0872b1fe6637f6f995bcb009fb5c87d597c1fc21456f50c848/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f", size = 174150, upload-time = "2025-03-05T20:03:35.757Z" }, - { url = "https://files.pythonhosted.org/packages/cb/c3/30e2f9c539b8da8b1d76f64012f3b19253271a63413b2d3adb94b143407f/websockets-15.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123", size = 176877, upload-time = "2025-03-05T20:03:37.199Z" }, { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, ] @@ -3152,12 +2501,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef wheels = [ { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494, upload-time = "2024-11-23T00:18:21.207Z" }, ] - -[[package]] -name = "zipp" -version = "3.23.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, -]