mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2026-08-26 05:07:35 -05:00
Drop support for Python 3.11 (#14153)
This commit is contained in:
@@ -36,7 +36,6 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
python:
|
||||
- "3.11"
|
||||
- "3.12"
|
||||
- "3.13"
|
||||
- "3.13t"
|
||||
|
||||
+1
-4
@@ -1,4 +1,4 @@
|
||||
target-version = "py311" # Pin Ruff to Python 3.11
|
||||
target-version = "py312" # Pin Ruff to Python 3.12
|
||||
line-length = 88
|
||||
output-format = "full"
|
||||
|
||||
@@ -9,9 +9,6 @@ extend-exclude = [
|
||||
"tests/roots/test-pycode/cp_1251_coded.py", # Not UTF-8
|
||||
]
|
||||
|
||||
[per-file-target-version]
|
||||
"tests/roots/test-ext-autodoc/target/pep695.py" = "py312"
|
||||
|
||||
[format]
|
||||
preview = true
|
||||
quote-style = "single"
|
||||
|
||||
@@ -4,6 +4,8 @@ Release 9.1.0 (in development)
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
* #14153: Drop Python 3.11 support.
|
||||
|
||||
Incompatible changes
|
||||
--------------------
|
||||
|
||||
|
||||
@@ -201,18 +201,18 @@ of targets and allows testing against multiple different Python environments:
|
||||
|
||||
tox -av
|
||||
|
||||
* To run unit tests for a specific Python version, such as Python 3.13:
|
||||
* To run unit tests for a specific Python version, such as Python 3.14:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
tox -e py313
|
||||
tox -e py314
|
||||
|
||||
* Arguments to :program:`pytest` can be passed via :program:`tox`,
|
||||
e.g., in order to run a particular test:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
tox -e py313 tests/test_module.py::test_new_feature
|
||||
tox -e py314 tests/test_module.py::test_new_feature
|
||||
|
||||
You can also test by installing dependencies in your local environment:
|
||||
|
||||
|
||||
@@ -249,7 +249,7 @@ After you have published your sources on GitLab, create a file named
|
||||
|
||||
pages:
|
||||
stage: deploy
|
||||
image: python:3.12-slim
|
||||
image: python:3.14-slim
|
||||
before_script:
|
||||
- apt-get update && apt-get install make --no-install-recommends -y
|
||||
- python -m pip install sphinx furo
|
||||
|
||||
@@ -116,10 +116,10 @@ a comma-separated list of group names.
|
||||
|
||||
Specify the required Python version for the example to be tested. For instance,
|
||||
in the following case the example will be tested only for Python versions greater
|
||||
than 3.12::
|
||||
than 3.14::
|
||||
|
||||
.. doctest::
|
||||
:pyversion: > 3.12
|
||||
:pyversion: > 3.14
|
||||
|
||||
The following operands are supported:
|
||||
|
||||
|
||||
@@ -152,18 +152,18 @@ Install either ``python3x-sphinx`` using :command:`port`:
|
||||
|
||||
::
|
||||
|
||||
$ sudo port install py313-sphinx
|
||||
$ sudo port install py314-sphinx
|
||||
|
||||
To set up the executable paths, use the ``port select`` command:
|
||||
|
||||
::
|
||||
|
||||
$ sudo port select --set python python313
|
||||
$ sudo port select --set sphinx py313-sphinx
|
||||
$ sudo port select --set python python314
|
||||
$ sudo port select --set sphinx py314-sphinx
|
||||
|
||||
For more information, refer to the `package overview`__.
|
||||
|
||||
__ https://www.macports.org/ports.php?by=library&substr=py313-sphinx
|
||||
__ https://www.macports.org/ports.php?by=library&substr=py314-sphinx
|
||||
|
||||
Windows
|
||||
~~~~~~~
|
||||
|
||||
+2
-3
@@ -17,7 +17,7 @@ license = "BSD-2-Clause"
|
||||
license-files = [
|
||||
"LICENSE.rst",
|
||||
]
|
||||
requires-python = ">=3.11"
|
||||
requires-python = ">=3.12"
|
||||
|
||||
# Classifiers list: https://pypi.org/classifiers/
|
||||
classifiers = [
|
||||
@@ -35,7 +35,6 @@ classifiers = [
|
||||
"Programming Language :: Python",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3 :: Only",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
"Programming Language :: Python :: 3.14",
|
||||
@@ -180,7 +179,7 @@ files = [
|
||||
exclude = [
|
||||
"tests/roots",
|
||||
]
|
||||
python_version = "3.11"
|
||||
python_version = "3.12"
|
||||
strict = true
|
||||
show_column_numbers = true
|
||||
show_error_context = true
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ project_includes = [
|
||||
project_excludes = [
|
||||
"**/tests/roots*",
|
||||
]
|
||||
python_version = "3.11"
|
||||
python_version = "3.12"
|
||||
replace_imports_with_any = [
|
||||
"imagesize",
|
||||
"pyximport",
|
||||
|
||||
@@ -36,12 +36,10 @@ from sphinx.locale import __, init_console
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Callable, Iterable, Iterator, Sequence
|
||||
from typing import NoReturn, TypeAlias
|
||||
from typing import NoReturn
|
||||
|
||||
_PARSER_SETUP: TypeAlias = Callable[
|
||||
[argparse.ArgumentParser], argparse.ArgumentParser
|
||||
]
|
||||
_RUNNER: TypeAlias = Callable[[argparse.Namespace], int]
|
||||
type _PARSER_SETUP = Callable[[argparse.ArgumentParser], argparse.ArgumentParser]
|
||||
type _RUNNER = Callable[[argparse.Namespace], int]
|
||||
|
||||
from typing import Protocol
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ from sphinx.writers.html5 import HTML5Translator
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Iterator, Set
|
||||
from typing import Any, TypeAlias
|
||||
from typing import Any
|
||||
|
||||
from docutils.nodes import Node
|
||||
|
||||
@@ -79,7 +79,7 @@ INVENTORY_FILENAME = 'objects.inv'
|
||||
logger = logging.getLogger(__name__)
|
||||
return_codes_re = re.compile('[\r\n]+')
|
||||
|
||||
DOMAIN_INDEX_TYPE: TypeAlias = tuple[
|
||||
type DOMAIN_INDEX_TYPE = tuple[
|
||||
# Index name (e.g. py-modindex)
|
||||
str,
|
||||
# Index class
|
||||
|
||||
@@ -35,7 +35,7 @@ from sphinx.util.nodes import get_node_line
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Callable, Iterator, Sequence
|
||||
from typing import Any, Literal, TypeAlias
|
||||
from typing import Any, Literal
|
||||
|
||||
from requests import Response
|
||||
|
||||
@@ -44,7 +44,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.util._pathlib import _StrPath
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
_URIProperties: TypeAlias = tuple['_Status', str, int]
|
||||
type _URIProperties = tuple[_Status, str, int]
|
||||
|
||||
|
||||
class _Status(StrEnum):
|
||||
|
||||
+2
-3
@@ -17,7 +17,6 @@ from sphinx.util import logging
|
||||
if TYPE_CHECKING:
|
||||
import os
|
||||
from collections.abc import Collection, Iterable, Iterator, Sequence, Set
|
||||
from typing import TypeAlias
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.environment import BuildEnvironment
|
||||
@@ -26,7 +25,7 @@ if TYPE_CHECKING:
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
_ConfigRebuild: TypeAlias = Literal[
|
||||
type _ConfigRebuild = Literal[
|
||||
'',
|
||||
'env',
|
||||
'epub',
|
||||
@@ -92,7 +91,7 @@ class ENUM:
|
||||
return all(item in self._candidates for item in value)
|
||||
|
||||
|
||||
_OptValidTypes: TypeAlias = frozenset[type] | ENUM
|
||||
type _OptValidTypes = frozenset[type] | ENUM
|
||||
|
||||
|
||||
class _Opt:
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from typing import TYPE_CHECKING, Generic, TypeVar, cast
|
||||
from typing import TYPE_CHECKING, cast
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.parsers.rst import directives, roles
|
||||
@@ -41,10 +41,7 @@ def optional_int(argument: str) -> int | None:
|
||||
return value
|
||||
|
||||
|
||||
ObjDescT = TypeVar('ObjDescT')
|
||||
|
||||
|
||||
class ObjectDescription(SphinxDirective, Generic[ObjDescT]):
|
||||
class ObjectDescription[ObjDescT](SphinxDirective):
|
||||
"""Directive to describe a class, function or similar object.
|
||||
|
||||
Not used directly, but subclassed (in domain-specific directives)
|
||||
|
||||
+11
-11
@@ -2,7 +2,7 @@ from __future__ import annotations
|
||||
|
||||
import sys
|
||||
import warnings
|
||||
from typing import TYPE_CHECKING, Union, cast
|
||||
from typing import TYPE_CHECKING, cast
|
||||
|
||||
from docutils import nodes
|
||||
|
||||
@@ -16,7 +16,7 @@ from sphinx.util.cfamily import (
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, TypeAlias
|
||||
from typing import Any
|
||||
|
||||
from docutils.nodes import Element, Node, TextElement
|
||||
|
||||
@@ -27,15 +27,15 @@ if TYPE_CHECKING:
|
||||
StringifyTransform,
|
||||
)
|
||||
|
||||
DeclarationType: TypeAlias = Union[
|
||||
'ASTStruct',
|
||||
'ASTUnion',
|
||||
'ASTEnum',
|
||||
'ASTEnumerator',
|
||||
'ASTType',
|
||||
'ASTTypeWithInit',
|
||||
'ASTMacro',
|
||||
]
|
||||
type DeclarationType = (
|
||||
'ASTStruct'
|
||||
| 'ASTUnion'
|
||||
| 'ASTEnum'
|
||||
| 'ASTEnumerator'
|
||||
| 'ASTType'
|
||||
| 'ASTTypeWithInit'
|
||||
| 'ASTMacro'
|
||||
)
|
||||
|
||||
|
||||
class ASTBase(ASTBaseBase):
|
||||
|
||||
@@ -13,27 +13,27 @@ from sphinx.util import logging
|
||||
from sphinx.util.index_entries import _split_into
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Literal, TypeAlias
|
||||
from typing import Literal
|
||||
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.environment import BuildEnvironment
|
||||
|
||||
_IndexEntryTarget: TypeAlias = tuple[str | None, str | Literal[False]]
|
||||
_IndexEntryTargets: TypeAlias = list[_IndexEntryTarget]
|
||||
_IndexEntryCategoryKey: TypeAlias = str | None
|
||||
_IndexEntrySubItems: TypeAlias = dict[
|
||||
type _IndexEntryTarget = tuple[str | None, str | Literal[False]]
|
||||
type _IndexEntryTargets = list[_IndexEntryTarget]
|
||||
type _IndexEntryCategoryKey = str | None
|
||||
type _IndexEntrySubItems = dict[
|
||||
str,
|
||||
tuple[_IndexEntryTargets, _IndexEntryCategoryKey],
|
||||
]
|
||||
_IndexEntry: TypeAlias = tuple[
|
||||
type _IndexEntry = tuple[
|
||||
_IndexEntryTargets,
|
||||
_IndexEntrySubItems,
|
||||
_IndexEntryCategoryKey,
|
||||
]
|
||||
_IndexEntryMap: TypeAlias = dict[str, _IndexEntry]
|
||||
type _IndexEntryMap = dict[str, _IndexEntry]
|
||||
|
||||
# Used by ``create_index()`` for 'the real index'
|
||||
_RealIndexEntry: TypeAlias = tuple[
|
||||
type _RealIndexEntry = tuple[
|
||||
str,
|
||||
tuple[
|
||||
_IndexEntryTargets,
|
||||
@@ -41,8 +41,8 @@ if TYPE_CHECKING:
|
||||
_IndexEntryCategoryKey,
|
||||
],
|
||||
]
|
||||
_RealIndexEntries: TypeAlias = list[_RealIndexEntry]
|
||||
_Index: TypeAlias = list[tuple[str, _RealIndexEntries]]
|
||||
type _RealIndexEntries = list[_RealIndexEntry]
|
||||
type _Index = list[tuple[str, _RealIndexEntries]]
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import warnings
|
||||
from typing import TYPE_CHECKING, TypeVar
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.nodes import Element
|
||||
@@ -482,12 +482,9 @@ def _toctree_add_classes(node: Element, depth: int, docname: str) -> None:
|
||||
subnode = subnode.parent
|
||||
|
||||
|
||||
_ET = TypeVar('_ET', bound=Element)
|
||||
|
||||
|
||||
def _toctree_copy(
|
||||
node: _ET, depth: int, maxdepth: int, collapse: bool, tags: Tags
|
||||
) -> _ET:
|
||||
def _toctree_copy[ET: Element](
|
||||
node: ET, depth: int, maxdepth: int, collapse: bool, tags: Tags
|
||||
) -> ET:
|
||||
"""Utility: Cut and deep-copy a TOC at a specified depth."""
|
||||
assert not isinstance(node, addnodes.only)
|
||||
depth = max(depth - 1, 1)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, TypeVar, cast
|
||||
from typing import TYPE_CHECKING, cast
|
||||
|
||||
from docutils import nodes
|
||||
|
||||
@@ -23,8 +23,6 @@ if TYPE_CHECKING:
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
N = TypeVar('N')
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
||||
@@ -528,7 +528,7 @@ def _best_object_type_for_member(
|
||||
|
||||
if isinstance(member, type) or (is_attr and isinstance(member, (NewType, TypeVar))):
|
||||
# priority must be higher than 'function', 'class', and 'attribute'
|
||||
# as NewType can be an attribute and is a class after Python 3.10.
|
||||
# as NewType can be an attribute and is a class.
|
||||
filtered.append((15, 'class'))
|
||||
|
||||
if parent_obj_type in {'class', 'exception'}:
|
||||
|
||||
@@ -27,14 +27,14 @@ from sphinx.util.inspect import (
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Callable, Mapping
|
||||
from typing import Any, TypeAlias
|
||||
from typing import Any
|
||||
|
||||
from sphinx.events import EventManager
|
||||
from sphinx.ext.autodoc._directive_options import _AutoDocumenterOptions
|
||||
from sphinx.ext.autodoc._property_types import _ItemProperties
|
||||
from sphinx.ext.autodoc._shared import _AttrGetter, _AutodocConfig
|
||||
|
||||
_FormattedSignature: TypeAlias = tuple[str, str]
|
||||
type _FormattedSignature = tuple[str, str]
|
||||
|
||||
|
||||
def _format_signatures(
|
||||
@@ -531,8 +531,8 @@ def _get_object_for_signature(
|
||||
else:
|
||||
if isinstance(object_sig, Signature):
|
||||
return object_sig, False
|
||||
if sys.version_info[:2] in {(3, 12), (3, 13)} and callable(object_sig):
|
||||
# Support for enum.Enum.__signature__ in Python 3.12
|
||||
if sys.version_info[:2] <= (3, 14) and callable(object_sig):
|
||||
# Support for enum.Enum.__signature__ in Python 3.12 & 3.13
|
||||
if isinstance(object_sig_str := object_sig(), str):
|
||||
return inspect.signature_from_str(object_sig_str), False
|
||||
|
||||
|
||||
@@ -1514,8 +1514,8 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
|
||||
object_sig = self.object.__signature__
|
||||
if isinstance(object_sig, Signature):
|
||||
return None, None, object_sig
|
||||
if sys.version_info[:2] in {(3, 12), (3, 13)} and callable(object_sig):
|
||||
# Support for enum.Enum.__signature__ in Python 3.12
|
||||
if sys.version_info[:2] <= (3, 14) and callable(object_sig):
|
||||
# Support for enum.Enum.__signature__ in Python 3.12 & 3.13
|
||||
if isinstance(object_sig_str := object_sig(), str):
|
||||
return None, None, inspect.signature_from_str(object_sig_str)
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ TYPE_CHECKING = False
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Sequence
|
||||
from pathlib import Path
|
||||
from typing import Any, Literal, TypeAlias
|
||||
from typing import Any, Literal
|
||||
|
||||
from sphinx.ext.autodoc._sentinels import (
|
||||
RUNTIME_INSTANCE_ATTRIBUTE_T,
|
||||
@@ -16,7 +16,7 @@ if TYPE_CHECKING:
|
||||
UNINITIALIZED_ATTR_T,
|
||||
)
|
||||
|
||||
_AutodocObjType: TypeAlias = Literal[
|
||||
type _AutodocObjType = Literal[
|
||||
'module',
|
||||
'class',
|
||||
'exception',
|
||||
@@ -28,7 +28,7 @@ if TYPE_CHECKING:
|
||||
'data',
|
||||
'type',
|
||||
]
|
||||
_AutodocFuncProperty: TypeAlias = Literal[
|
||||
type _AutodocFuncProperty = Literal[
|
||||
'abstractmethod',
|
||||
'async',
|
||||
'classmethod',
|
||||
|
||||
@@ -2,7 +2,7 @@ from __future__ import annotations
|
||||
|
||||
TYPE_CHECKING = False
|
||||
if TYPE_CHECKING:
|
||||
from typing import Final, Literal, NoReturn, Self, TypeAlias, _SpecialForm
|
||||
from typing import Final, Literal, NoReturn, Self, _SpecialForm
|
||||
|
||||
|
||||
class _Sentinel:
|
||||
@@ -65,14 +65,14 @@ if TYPE_CHECKING:
|
||||
|
||||
def __contains__(self, item: object) -> Literal[True]: return True
|
||||
def __add__(self, other: object) -> Self: pass
|
||||
ALL_T: TypeAlias = Literal[_AllTC.ALL]
|
||||
type ALL_T = Literal[_AllTC.ALL]
|
||||
ALL: Final[ALL_T] = _AllTC.ALL
|
||||
|
||||
class _EmptyTC(enum.Enum):
|
||||
EMPTY = enum.auto()
|
||||
|
||||
def __contains__(self, item: object) -> Literal[False]: return False
|
||||
EMPTY_T: TypeAlias = Literal[_EmptyTC.EMPTY]
|
||||
type EMPTY_T = Literal[_EmptyTC.EMPTY]
|
||||
EMPTY: Final[EMPTY_T] = _EmptyTC.EMPTY
|
||||
|
||||
class _SentinelTC(enum.Enum):
|
||||
@@ -81,13 +81,13 @@ if TYPE_CHECKING:
|
||||
SLOTS_ATTR = enum.auto()
|
||||
SUPPRESS = enum.auto()
|
||||
UNINITIALIZED_ATTR = enum.auto()
|
||||
INSTANCE_ATTR_T: TypeAlias = Literal[_SentinelTC.INSTANCE_ATTR]
|
||||
RUNTIME_INSTANCE_ATTRIBUTE_T: TypeAlias = Literal[
|
||||
type INSTANCE_ATTR_T = Literal[_SentinelTC.INSTANCE_ATTR]
|
||||
type RUNTIME_INSTANCE_ATTRIBUTE_T = Literal[
|
||||
_SentinelTC.RUNTIME_INSTANCE_ATTRIBUTE
|
||||
]
|
||||
SLOTS_ATTR_T: TypeAlias = Literal[_SentinelTC.SLOTS_ATTR]
|
||||
SUPPRESS_T: TypeAlias = Literal[_SentinelTC.SUPPRESS]
|
||||
UNINITIALIZED_ATTR_T: TypeAlias = Literal[_SentinelTC.UNINITIALIZED_ATTR]
|
||||
type SLOTS_ATTR_T = Literal[_SentinelTC.SLOTS_ATTR]
|
||||
type SUPPRESS_T = Literal[_SentinelTC.SUPPRESS]
|
||||
type UNINITIALIZED_ATTR_T = Literal[_SentinelTC.UNINITIALIZED_ATTR]
|
||||
INSTANCE_ATTR: Final[INSTANCE_ATTR_T] = _SentinelTC.INSTANCE_ATTR
|
||||
RUNTIME_INSTANCE_ATTRIBUTE: Final[RUNTIME_INSTANCE_ATTRIBUTE_T] = (
|
||||
_SentinelTC.RUNTIME_INSTANCE_ATTRIBUTE
|
||||
|
||||
@@ -8,7 +8,7 @@ from sphinx.util import logging
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Sequence
|
||||
from typing import Any, Final, NoReturn, TypeAlias
|
||||
from typing import Any, Final, NoReturn
|
||||
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import Inventory
|
||||
@@ -30,7 +30,7 @@ if TYPE_CHECKING:
|
||||
InventoryLocation = str | None
|
||||
|
||||
#: Inventory cache entry. The integer field is the cache expiration time.
|
||||
InventoryCacheEntry: TypeAlias = tuple[InventoryName, int, Inventory]
|
||||
type InventoryCacheEntry = tuple[InventoryName, int, Inventory]
|
||||
|
||||
#: The type of :confval:`intersphinx_mapping` *after* normalisation.
|
||||
IntersphinxMapping = dict[
|
||||
|
||||
@@ -9,7 +9,6 @@ import inspect
|
||||
import itertools
|
||||
import operator
|
||||
import re
|
||||
import sys
|
||||
import tokenize
|
||||
from token import DEDENT, INDENT, NAME, NEWLINE, NUMBER, OP, STRING
|
||||
from tokenize import COMMENT, NL
|
||||
@@ -21,12 +20,8 @@ if TYPE_CHECKING:
|
||||
from inspect import Signature
|
||||
from typing import Any
|
||||
|
||||
if sys.version_info[:2] >= (3, 12):
|
||||
AssignmentLike = ast.Assign | ast.AnnAssign | ast.TypeAlias
|
||||
AssignmentLikeType = (ast.Assign, ast.AnnAssign, ast.TypeAlias)
|
||||
else:
|
||||
AssignmentLike = ast.Assign | ast.AnnAssign
|
||||
AssignmentLikeType = (ast.Assign, ast.AnnAssign)
|
||||
AssignmentLike = ast.Assign | ast.AnnAssign | ast.TypeAlias
|
||||
AssignmentLikeType = (ast.Assign, ast.AnnAssign, ast.TypeAlias)
|
||||
|
||||
comment_re = re.compile('^\\s*#: ?(.*)\r?\n?$')
|
||||
indent_re = re.compile('^\\s*$')
|
||||
@@ -506,13 +501,12 @@ class VariableCommentPicker(ast.NodeVisitor):
|
||||
"""Handles AsyncFunctionDef node and set context."""
|
||||
self.visit_FunctionDef(node) # type: ignore[arg-type]
|
||||
|
||||
def visit_TypeAlias(self, node: ast.TypeAlias) -> None: # type: ignore[name-defined]
|
||||
def visit_TypeAlias(self, node: ast.TypeAlias) -> None:
|
||||
"""Handles TypeAlias node and picks up a variable comment.
|
||||
|
||||
.. note:: TypeAlias node refers to `type Foo = Bar` (PEP 695) assignment,
|
||||
NOT `Foo: TypeAlias = Bar` (PEP 613).
|
||||
"""
|
||||
# Python 3.12+
|
||||
current_line = self.get_line(node.lineno)
|
||||
self._collect_doc_comment(node, [node.name.id], current_line)
|
||||
|
||||
|
||||
+7
-9
@@ -22,7 +22,7 @@ from sphinx.util.logging import prefixed_warnings
|
||||
if TYPE_CHECKING:
|
||||
import os
|
||||
from collections.abc import Callable, Iterator, Mapping, Sequence
|
||||
from typing import Any, TypeAlias
|
||||
from typing import Any
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.nodes import Element, Node, TextElement
|
||||
@@ -49,15 +49,13 @@ if TYPE_CHECKING:
|
||||
# visit/depart function
|
||||
# the parameters should be (SphinxTranslator, Element)
|
||||
# or any subtype of either, but mypy rejects this.
|
||||
_NodeHandler: TypeAlias = Callable[[Any, Any], None]
|
||||
_NodeHandlerPair: TypeAlias = tuple[_NodeHandler, _NodeHandler | None]
|
||||
type _NodeHandler = Callable[[Any, Any], None]
|
||||
type _NodeHandlerPair = tuple[_NodeHandler, _NodeHandler | None]
|
||||
|
||||
_MathsRenderer: TypeAlias = Callable[[HTML5Translator, nodes.math], None]
|
||||
_MathsBlockRenderer: TypeAlias = Callable[[HTML5Translator, nodes.math_block], None]
|
||||
_MathsInlineRenderers: TypeAlias = tuple[_MathsRenderer, _MathsRenderer | None]
|
||||
_MathsBlockRenderers: TypeAlias = tuple[
|
||||
_MathsBlockRenderer, _MathsBlockRenderer | None
|
||||
]
|
||||
type _MathsRenderer = Callable[[HTML5Translator, nodes.math], None]
|
||||
type _MathsBlockRenderer = Callable[[HTML5Translator, nodes.math_block], None]
|
||||
type _MathsInlineRenderers = tuple[_MathsRenderer, _MathsRenderer | None]
|
||||
type _MathsBlockRenderers = tuple[_MathsBlockRenderer, _MathsBlockRenderer | None]
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -21,21 +21,18 @@ from sphinx.util.index_entries import split_index_msg
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Callable, Iterable, Set
|
||||
from typing import Any, Protocol, TypeVar
|
||||
from typing import Any, Protocol
|
||||
|
||||
from docutils.nodes import Node
|
||||
|
||||
from sphinx.environment import BuildEnvironment
|
||||
|
||||
_T_co = TypeVar('_T_co', covariant=True)
|
||||
_T_contra = TypeVar('_T_contra', contravariant=True)
|
||||
class _ReadableStream[T](Protocol):
|
||||
def read(self, n: int = ..., /) -> T: ...
|
||||
def readline(self, n: int = ..., /) -> T: ...
|
||||
|
||||
class _ReadableStream(Protocol[_T_co]):
|
||||
def read(self, n: int = ..., /) -> _T_co: ...
|
||||
def readline(self, n: int = ..., /) -> _T_co: ...
|
||||
|
||||
class _WritableStream(Protocol[_T_contra]):
|
||||
def write(self, s: _T_contra, /) -> object: ...
|
||||
class _WritableStream[T](Protocol):
|
||||
def write(self, s: T, /) -> object: ...
|
||||
|
||||
|
||||
_NON_MINIFIED_JS_PATH = package_dir.joinpath('search', 'non-minified-js')
|
||||
|
||||
@@ -23,7 +23,7 @@ from sphinx.util.nodes import apply_source_workaround, is_smartquotable
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Iterator
|
||||
from typing import Any, Literal, TypeAlias
|
||||
from typing import Any, Literal
|
||||
|
||||
from docutils.nodes import Node, Text
|
||||
from typing_extensions import TypeIs
|
||||
@@ -34,7 +34,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
_DEFAULT_SUBSTITUTION_NAMES: TypeAlias = Literal[
|
||||
type _DEFAULT_SUBSTITUTION_NAMES = Literal[
|
||||
'version',
|
||||
'release',
|
||||
'today',
|
||||
|
||||
@@ -5,7 +5,7 @@ from __future__ import annotations
|
||||
from operator import attrgetter
|
||||
from re import DOTALL, match
|
||||
from textwrap import indent
|
||||
from typing import TYPE_CHECKING, Any, TypeVar
|
||||
from typing import TYPE_CHECKING, Any
|
||||
|
||||
import docutils.utils
|
||||
from docutils import nodes
|
||||
@@ -49,9 +49,6 @@ logger = logging.getLogger(__name__)
|
||||
EXCLUDED_PENDING_XREF_ATTRIBUTES = ('refexplicit',)
|
||||
|
||||
|
||||
N = TypeVar('N', bound=nodes.Node)
|
||||
|
||||
|
||||
def _publish_msgstr(
|
||||
source: str,
|
||||
source_path: str,
|
||||
@@ -234,7 +231,7 @@ class _NodeUpdater:
|
||||
|
||||
def update_autofootnote_references(self) -> None:
|
||||
# auto-numbered foot note reference should use original 'ids'.
|
||||
def list_replace_or_append(lst: list[N], old: N, new: N) -> None:
|
||||
def list_replace_or_append[N: nodes.Node](lst: list[N], old: N, new: N) -> None:
|
||||
if old in lst:
|
||||
lst[lst.index(old)] = new
|
||||
else:
|
||||
|
||||
@@ -13,13 +13,13 @@ from sphinx.util import logging
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Callable, Sequence
|
||||
from typing import Any, NoReturn, TypeAlias
|
||||
from typing import Any, NoReturn
|
||||
|
||||
from docutils.nodes import TextElement
|
||||
|
||||
from sphinx.config import Config
|
||||
|
||||
StringifyTransform: TypeAlias = Callable[[Any], str]
|
||||
type StringifyTransform = Callable[[Any], str]
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -10,11 +10,7 @@ TYPE_CHECKING = False
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Callable, Iterable, Iterator
|
||||
from types import TracebackType
|
||||
from typing import Any, ParamSpec, TypeVar
|
||||
|
||||
T = TypeVar('T')
|
||||
P = ParamSpec('P')
|
||||
R = TypeVar('R')
|
||||
from typing import Any
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -27,7 +23,7 @@ def display_chunk(chunk: Any) -> str:
|
||||
return str(chunk)
|
||||
|
||||
|
||||
def status_iterator(
|
||||
def status_iterator[T](
|
||||
iterable: Iterable[T],
|
||||
summary: str,
|
||||
color: str = 'darkgreen',
|
||||
@@ -90,7 +86,7 @@ class progress_message:
|
||||
|
||||
return False
|
||||
|
||||
def __call__(self, f: Callable[P, R]) -> Callable[P, R]:
|
||||
def __call__[**P, R](self, f: Callable[P, R]) -> Callable[P, R]:
|
||||
@functools.wraps(f)
|
||||
def wrapper(*args: P.args, **kwargs: P.kwargs) -> R: # type: ignore[return]
|
||||
with self:
|
||||
|
||||
@@ -17,8 +17,6 @@ from sphinx.util import logging
|
||||
from sphinx.util.nodes import get_node_line
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import TypeAlias, TypeVar
|
||||
|
||||
from docutils.nodes import Element, Node
|
||||
from docutils.parsers.rst.states import Inliner
|
||||
|
||||
@@ -26,10 +24,9 @@ if TYPE_CHECKING:
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import TextlikeNode
|
||||
|
||||
ObjDescT = TypeVar('ObjDescT')
|
||||
_FieldEntry: TypeAlias = tuple[str, list[Node]]
|
||||
_FieldTypes: TypeAlias = dict[str, list[Node]]
|
||||
_EntriesTriple: TypeAlias = tuple['Field', _FieldEntry | list[_FieldEntry], Element]
|
||||
type _FieldEntry = tuple[str, list[Node]]
|
||||
type _FieldTypes = dict[str, list[Node]]
|
||||
type _EntriesTriple = tuple[Field, _FieldEntry | list[_FieldEntry], Element]
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -342,7 +339,7 @@ class TypedField(GroupedField):
|
||||
return nodes.field('', fieldname, fieldbody)
|
||||
|
||||
|
||||
class DocFieldTransformer:
|
||||
class DocFieldTransformer[ObjDescT]:
|
||||
"""Transforms field lists in "doc field" syntax into better-looking
|
||||
equivalents, using the field type definitions given on a domain.
|
||||
"""
|
||||
|
||||
+2
-2
@@ -21,7 +21,7 @@ from sphinx.util.osutil import SEP, _last_modified_time
|
||||
if TYPE_CHECKING:
|
||||
import datetime as dt
|
||||
from collections.abc import Iterator
|
||||
from typing import Protocol, TypeAlias
|
||||
from typing import Protocol
|
||||
|
||||
from babel.core import Locale
|
||||
|
||||
@@ -53,7 +53,7 @@ if TYPE_CHECKING:
|
||||
locale: str | Locale | None = ...,
|
||||
) -> str: ...
|
||||
|
||||
Formatter: TypeAlias = DateFormatter | TimeFormatter | DatetimeFormatter
|
||||
type Formatter = DateFormatter | TimeFormatter | DatetimeFormatter
|
||||
|
||||
from datetime import UTC
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ if TYPE_CHECKING:
|
||||
from collections.abc import Callable, Iterator, Sequence
|
||||
from inspect import _ParameterKind
|
||||
from types import MethodType, ModuleType
|
||||
from typing import Final, Protocol, TypeAlias
|
||||
from typing import Final, Protocol
|
||||
|
||||
from typing_extensions import TypeIs
|
||||
|
||||
@@ -47,7 +47,7 @@ if TYPE_CHECKING:
|
||||
class _AttrGetter(Protocol):
|
||||
def __call__(self, obj: Any, name: str, default: Any = ..., /) -> Any: ...
|
||||
|
||||
_RoutineType: TypeAlias = (
|
||||
type _RoutineType = (
|
||||
types.FunctionType
|
||||
| types.LambdaType
|
||||
| types.MethodType
|
||||
@@ -57,7 +57,7 @@ if TYPE_CHECKING:
|
||||
| types.MethodDescriptorType
|
||||
| types.ClassMethodDescriptorType
|
||||
)
|
||||
_SignatureType: TypeAlias = (
|
||||
type _SignatureType = (
|
||||
Callable[..., Any] | staticmethod[Any, Any] | classmethod[Any, Any, Any]
|
||||
)
|
||||
|
||||
@@ -436,7 +436,7 @@ def _is_wrapped_coroutine(obj: Any) -> bool:
|
||||
"""Check if the object is wrapped coroutine-function."""
|
||||
if isstaticmethod(obj) or isclassmethod(obj) or ispartial(obj):
|
||||
# staticmethod, classmethod and partial method are not a wrapped coroutine-function
|
||||
# Note: Since 3.10, staticmethod and classmethod becomes a kind of wrappers
|
||||
# Note: staticmethod and classmethod are a kind of wrapper
|
||||
return False
|
||||
return hasattr(obj, '__wrapped__')
|
||||
|
||||
@@ -833,7 +833,7 @@ def _evaluate_forwardref(
|
||||
# See: https://github.com/python/cpython/pull/118104.
|
||||
return ref._evaluate( # pyright: ignore[reportDeprecated]
|
||||
globalns, localns, type_params=(), recursive_guard=frozenset()
|
||||
) # type: ignore[call-arg]
|
||||
)
|
||||
return ref._evaluate(globalns, localns, recursive_guard=frozenset())
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import contextlib
|
||||
import re
|
||||
import unicodedata
|
||||
from io import StringIO
|
||||
from typing import TYPE_CHECKING, Any, Generic, TypeVar, cast
|
||||
from typing import TYPE_CHECKING, Any, cast
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.nodes import Node
|
||||
@@ -36,10 +36,7 @@ explicit_title_re = re.compile(r'^(.+?)\s*(?<!\x00)<([^<]*?)>$', re.DOTALL)
|
||||
caption_ref_re = explicit_title_re # b/w compat alias
|
||||
|
||||
|
||||
N = TypeVar('N', bound=Node)
|
||||
|
||||
|
||||
class NodeMatcher(Generic[N]):
|
||||
class NodeMatcher[N: Node]:
|
||||
"""A helper class for Node.findall().
|
||||
|
||||
It checks that the given node is an instance of the specified node-classes and
|
||||
|
||||
@@ -186,8 +186,6 @@ def _relative_path(path: Path, root: Path, /) -> Path:
|
||||
if path.anchor != root.anchor or '..' in root.parts:
|
||||
# If the drives are different, no relative path exists.
|
||||
return path
|
||||
if sys.version_info[:2] < (3, 12):
|
||||
return Path(os.path.relpath(path, root))
|
||||
return path.relative_to(root, walk_up=True)
|
||||
|
||||
|
||||
|
||||
+14
-26
@@ -7,7 +7,7 @@ import sys
|
||||
import types
|
||||
import typing
|
||||
from collections.abc import Callable, Sequence
|
||||
from typing import TYPE_CHECKING
|
||||
from typing import TYPE_CHECKING, TypeAliasType
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.parsers.rst.states import Inliner
|
||||
@@ -16,28 +16,24 @@ from sphinx.util import logging
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Mapping
|
||||
from typing import Annotated, Any, Final, Literal, Protocol, TypeAlias
|
||||
from typing import Annotated, Any, Final, Literal, Protocol
|
||||
|
||||
from typing_extensions import TypeIs
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.inventory import _InventoryItem
|
||||
|
||||
_RestifyMode: TypeAlias = Literal[
|
||||
type _RestifyMode = Literal[
|
||||
'fully-qualified-except-typing',
|
||||
'smart',
|
||||
]
|
||||
_StringifyMode: TypeAlias = Literal[
|
||||
type _StringifyMode = Literal[
|
||||
'fully-qualified-except-typing',
|
||||
'fully-qualified',
|
||||
'smart',
|
||||
]
|
||||
|
||||
AnyTypeAliasType: tuple[type, ...] = ()
|
||||
if sys.version_info[:2] >= (3, 12):
|
||||
from typing import TypeAliasType
|
||||
|
||||
AnyTypeAliasType += (TypeAliasType,)
|
||||
AnyTypeAliasType: tuple[type, ...] = (TypeAliasType,)
|
||||
|
||||
try:
|
||||
import typing_extensions
|
||||
@@ -129,10 +125,10 @@ def is_invalid_builtin_class(obj: Any) -> str:
|
||||
|
||||
|
||||
# Text like nodes which are initialized with text and rawsource
|
||||
TextlikeNode: TypeAlias = nodes.Text | nodes.TextElement
|
||||
type TextlikeNode = nodes.Text | nodes.TextElement
|
||||
|
||||
# path matcher
|
||||
PathMatcher: TypeAlias = Callable[[str], bool]
|
||||
type PathMatcher = Callable[[str], bool]
|
||||
|
||||
# common role functions
|
||||
if TYPE_CHECKING:
|
||||
@@ -151,19 +147,19 @@ if TYPE_CHECKING:
|
||||
) -> tuple[list[nodes.Node], list[nodes.system_message]]: ...
|
||||
|
||||
else:
|
||||
RoleFunction: TypeAlias = Callable[
|
||||
type RoleFunction = Callable[
|
||||
[str, str, str, int, Inliner, dict[str, typing.Any], Sequence[str]],
|
||||
tuple[list[nodes.Node], list[nodes.system_message]],
|
||||
]
|
||||
|
||||
# A option spec for directive
|
||||
OptionSpec: TypeAlias = dict[str, Callable[[str], typing.Any]]
|
||||
type OptionSpec = dict[str, Callable[[str], typing.Any]]
|
||||
|
||||
# title getter functions for enumerable nodes (see sphinx.domains.std)
|
||||
TitleGetter: TypeAlias = Callable[[nodes.Node], str]
|
||||
type TitleGetter = Callable[[nodes.Node], str]
|
||||
|
||||
# inventory data on memory
|
||||
Inventory: TypeAlias = dict[str, dict[str, '_InventoryItem']]
|
||||
type Inventory = dict[str, dict[str, _InventoryItem]]
|
||||
|
||||
|
||||
class ExtensionMetadata(typing.TypedDict, total=False):
|
||||
@@ -187,7 +183,7 @@ class ExtensionMetadata(typing.TypedDict, total=False):
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
_ExtensionSetupFunc: TypeAlias = Callable[[Sphinx], ExtensionMetadata] # NoQA: PYI047 (false positive)
|
||||
type _ExtensionSetupFunc = Callable[[Sphinx], ExtensionMetadata] # NoQA: PYI047 (false positive)
|
||||
|
||||
|
||||
def get_type_hints(
|
||||
@@ -304,9 +300,6 @@ def restify(cls: Any, mode: _RestifyMode = 'fully-qualified-except-typing') -> s
|
||||
else:
|
||||
meta_args.append(repr(m))
|
||||
meta = ', '.join(meta_args)
|
||||
if sys.version_info[:2] <= (3, 11):
|
||||
# Hardcoded to fix errors on Python 3.11 and earlier.
|
||||
return rf':py:class:`~typing.Annotated`\ [{args}, {meta}]'
|
||||
return (
|
||||
f':py:class:`{module_prefix}{cls.__module__}.{cls.__name__}`'
|
||||
rf'\ [{args}, {meta}]'
|
||||
@@ -476,7 +469,7 @@ def stringify_annotation(
|
||||
return module_prefix + f'{annotation_module}.{annotation_name}'
|
||||
elif fixed_annotation := is_invalid_builtin_class(annotation):
|
||||
return module_prefix + fixed_annotation
|
||||
elif _is_annotated_form(annotation): # for py310+
|
||||
elif _is_annotated_form(annotation):
|
||||
pass
|
||||
elif annotation_module == 'builtins' and annotation_qualname:
|
||||
args = getattr(annotation, '__args__', None)
|
||||
@@ -578,7 +571,7 @@ def stringify_annotation(
|
||||
_format_literal_arg_stringify(a, mode=mode) for a in annotation_args
|
||||
)
|
||||
return f'{module_prefix}Literal[{args}]'
|
||||
elif _is_annotated_form(annotation): # for py310+
|
||||
elif _is_annotated_form(annotation):
|
||||
args = stringify_annotation(
|
||||
annotation_args[0], mode=mode, short_literals=short_literals
|
||||
)
|
||||
@@ -603,11 +596,6 @@ def stringify_annotation(
|
||||
else:
|
||||
meta_args.append(repr(m))
|
||||
meta = ', '.join(meta_args)
|
||||
if sys.version_info[:2] <= (3, 11):
|
||||
if mode == 'fully-qualified-except-typing':
|
||||
return f'Annotated[{args}, {meta}]'
|
||||
module_prefix = module_prefix.replace('builtins', 'typing')
|
||||
return f'{module_prefix}Annotated[{args}, {meta}]'
|
||||
return f'{module_prefix}Annotated[{args}, {meta}]'
|
||||
elif all(is_system_TypeVar(a) for a in annotation_args):
|
||||
# Suppress arguments if all system defined TypeVars (ex. Dict[KT, VT])
|
||||
|
||||
@@ -7,7 +7,7 @@ T = TypeVar('T')
|
||||
|
||||
# Test that typing.Generic's __new__ method does not mask our class'
|
||||
# __init__ signature.
|
||||
class A(Generic[T]):
|
||||
class A(Generic[T]): # NoQA: UP046
|
||||
"""docstring for A"""
|
||||
|
||||
def __init__(self, a, b=None):
|
||||
|
||||
@@ -23,10 +23,9 @@ from sphinx.util.tags import Tags
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Iterable
|
||||
from pathlib import Path
|
||||
from typing import TypeAlias
|
||||
|
||||
CircularList: TypeAlias = list[int | 'CircularList']
|
||||
CircularDict: TypeAlias = dict[str, int | 'CircularDict']
|
||||
type CircularList = list[int | 'CircularList']
|
||||
type CircularDict = dict[str, int | 'CircularDict']
|
||||
|
||||
|
||||
def check_is_serializable(subject: object, *, circular: bool) -> None:
|
||||
|
||||
@@ -11,11 +11,9 @@ from sphinx.testing.util import assert_node
|
||||
|
||||
TYPE_CHECKING = False
|
||||
if TYPE_CHECKING:
|
||||
from typing import TypeAlias
|
||||
|
||||
from sphinx.testing.util import SphinxTestApp
|
||||
|
||||
_IndexEntry: TypeAlias = tuple[str, str, str, str, str | None]
|
||||
type _IndexEntry = tuple[str, str, str, str, str | None]
|
||||
|
||||
DOMAINS = [
|
||||
# directive, no-index, no-index-entry, signature of f, signature of g, index entry of g
|
||||
|
||||
@@ -1420,12 +1420,10 @@ class _EnumFormatter:
|
||||
)
|
||||
else:
|
||||
return '(*values)'
|
||||
if sys.version_info[:2] >= (3, 12):
|
||||
return (
|
||||
'(value, names=None, *values, module=None, '
|
||||
'qualname=None, type=None, start=1, boundary=None)'
|
||||
)
|
||||
return '(value)'
|
||||
return (
|
||||
'(value, names=None, *values, module=None, '
|
||||
'qualname=None, type=None, start=1, boundary=None)'
|
||||
)
|
||||
|
||||
def method(
|
||||
self,
|
||||
@@ -2206,10 +2204,6 @@ def test_autodoc_GenericAlias() -> None:
|
||||
]
|
||||
|
||||
|
||||
@pytest.mark.skipif(
|
||||
sys.version_info[:2] < (3, 12),
|
||||
reason='type statement introduced in Python 3.12',
|
||||
)
|
||||
def test_autodoc_pep695_type_alias() -> None:
|
||||
config = _AutodocConfig(
|
||||
autodoc_type_aliases={
|
||||
|
||||
@@ -858,7 +858,7 @@ def test_autodoc_type_aliases() -> None:
|
||||
|
||||
|
||||
def test_autodoc_default_options() -> None:
|
||||
if (3, 11, 7) <= sys.version_info < (3, 12) or sys.version_info >= (3, 12, 1):
|
||||
if sys.version_info[:3] >= (3, 12, 1):
|
||||
list_of_weak_references = ' list of weak references to the object'
|
||||
else:
|
||||
list_of_weak_references = ' list of weak references to the object (if defined)' # fmt: skip
|
||||
@@ -935,7 +935,7 @@ def test_autodoc_default_options() -> None:
|
||||
|
||||
|
||||
def test_autodoc_default_options_with_values() -> None:
|
||||
if (3, 11, 7) <= sys.version_info < (3, 12) or sys.version_info >= (3, 12, 1):
|
||||
if sys.version_info[:3] >= (3, 12, 1):
|
||||
list_of_weak_references = ' list of weak references to the object'
|
||||
else:
|
||||
list_of_weak_references = ' list of weak references to the object (if defined)' # fmt: skip
|
||||
|
||||
@@ -71,7 +71,7 @@ def test_MockObject_generic() -> None:
|
||||
T = TypeVar('T')
|
||||
|
||||
# test subclass with typing.Generic
|
||||
# Creating this class would raise an error on Python3.11+
|
||||
# Creating this class would raise an error on Python 3.11+
|
||||
# as mock objects are detected as typevars if hasattr(__typing_subst__) is True.
|
||||
|
||||
assert not hasattr(mock.SomeClass, '__typing_subst__')
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
from typing import Generic, TypeVar
|
||||
|
||||
import pytest
|
||||
@@ -120,10 +119,6 @@ def test_format_function_signatures() -> None:
|
||||
assert format_sig('function', 'g', g) == (r"(a='\n')", '')
|
||||
|
||||
|
||||
@pytest.mark.skipif(
|
||||
sys.version_info[:2] < (3, 12),
|
||||
reason='type statement introduced in Python 3.12',
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
('params', 'expect'),
|
||||
[
|
||||
@@ -220,9 +215,9 @@ def test_format_class_signatures_no_text_signature() -> None:
|
||||
class ExceptionSubclass(Exception):
|
||||
pass
|
||||
|
||||
# Exception has no __text_signature__ at least in Python 3.11
|
||||
# Exception has no __text_signature__ as at Python 3.14
|
||||
if getattr(Exception, '__text_signature__', None) is not None:
|
||||
pytest.skip()
|
||||
pytest.xfail('Exception.__text_signature__ exists!')
|
||||
assert format_sig('class', 'C', ExceptionSubclass) == ()
|
||||
|
||||
|
||||
|
||||
@@ -14,19 +14,15 @@ from sphinx.ext.napoleon import Config, _process_docstring, _skip_member, setup
|
||||
TYPE_CHECKING = False
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Callable
|
||||
from typing import ParamSpec, TypeVar
|
||||
|
||||
from sphinx.ext.autodoc._property_types import _AutodocObjType
|
||||
|
||||
_P = ParamSpec('_P')
|
||||
_R = TypeVar('_R')
|
||||
|
||||
|
||||
def simple_decorator(f: Callable[_P, _R]) -> Callable[_P, _R]:
|
||||
def simple_decorator[**P, R](f: Callable[P, R]) -> Callable[P, R]:
|
||||
"""A simple decorator that does nothing, for tests to use."""
|
||||
|
||||
@functools.wraps(f)
|
||||
def wrapper(*args: _P.args, **kwargs: _P.kwargs) -> _R:
|
||||
def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
|
||||
return f(*args, **kwargs)
|
||||
|
||||
return wrapper
|
||||
|
||||
@@ -877,7 +877,8 @@ def mock_time_and_i18n() -> Iterator[tuple[pytest.MonkeyPatch, _MockClock]]:
|
||||
_set_mtime_ns(self.mo_path, time.time_ns())
|
||||
|
||||
# see: https://github.com/pytest-dev/pytest/issues/363
|
||||
with pytest.MonkeyPatch.context() as mock:
|
||||
# see: https://github.com/astral-sh/ty/issues/1787
|
||||
with pytest.MonkeyPatch.context() as mock: # ty: ignore[missing-argument]
|
||||
clock: _MockClock
|
||||
if os.name == 'posix':
|
||||
clock = _MockUnixClock()
|
||||
|
||||
@@ -198,13 +198,10 @@ def test_is_invalid_builtin_class() -> None:
|
||||
WrapperDescriptorType,
|
||||
# weakref
|
||||
WeakSet,
|
||||
# zipfile
|
||||
zipfile.Path,
|
||||
zipfile.CompleteDirs,
|
||||
)
|
||||
if sys.version_info[:2] >= (3, 12):
|
||||
invalid_types += (
|
||||
# zipfile
|
||||
zipfile.Path,
|
||||
zipfile.CompleteDirs,
|
||||
)
|
||||
if sys.version_info[:2] == (3, 13):
|
||||
invalid_types += (
|
||||
# pathlib
|
||||
@@ -226,11 +223,6 @@ def test_is_invalid_builtin_class() -> None:
|
||||
('pathlib._local', 'PureWindowsPath'),
|
||||
('pathlib._local', 'WindowsPath'),
|
||||
}
|
||||
if sys.version_info[:2] < (3, 12):
|
||||
invalid_names |= {
|
||||
('zipfile._path', 'Path'),
|
||||
('zipfile._path', 'CompleteDirs'),
|
||||
}
|
||||
assert set(_INVALID_BUILTIN_CLASSES) == invalid_names
|
||||
|
||||
|
||||
@@ -488,14 +480,9 @@ def test_restify_Unpack() -> None:
|
||||
label: str
|
||||
|
||||
# Unpack is considered as typing special form so we always have '~'
|
||||
if sys.version_info[:2] >= (3, 12):
|
||||
expect = r':py:obj:`~typing.Unpack`\ [:py:class:`X`]'
|
||||
assert restify(UnpackCompat['X'], 'fully-qualified-except-typing') == expect
|
||||
assert restify(UnpackCompat['X'], 'smart') == expect
|
||||
else:
|
||||
expect = r':py:obj:`~typing_extensions.Unpack`\ [:py:class:`X`]'
|
||||
assert restify(UnpackCompat['X'], 'fully-qualified-except-typing') == expect
|
||||
assert restify(UnpackCompat['X'], 'smart') == expect
|
||||
expect = r':py:obj:`~typing.Unpack`\ [:py:class:`X`]'
|
||||
assert restify(UnpackCompat['X'], 'fully-qualified-except-typing') == expect
|
||||
assert restify(UnpackCompat['X'], 'smart') == expect
|
||||
|
||||
expect = r':py:obj:`~typing.Unpack`\ [:py:class:`X`]'
|
||||
assert restify(t.Unpack['X'], 'fully-qualified-except-typing') == expect
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[tox]
|
||||
minversion = 4.2.0
|
||||
envlist = py{311,312,313,314,315}
|
||||
envlist = py{312,313,314,315}
|
||||
|
||||
[testenv]
|
||||
usedevelop = True
|
||||
@@ -19,7 +19,7 @@ passenv =
|
||||
BUILDER
|
||||
READTHEDOCS
|
||||
description =
|
||||
py{311,312,313,314,315}: Run unit tests against {envname}.
|
||||
py{312,313,314,315}: Run unit tests against {envname}.
|
||||
dependency_groups =
|
||||
test
|
||||
setenv =
|
||||
|
||||
@@ -4,7 +4,7 @@ See https://github.com/trailofbits/pypi-attestations.
|
||||
"""
|
||||
|
||||
# /// script
|
||||
# requires-python = ">=3.11"
|
||||
# requires-python = ">=3.12"
|
||||
# dependencies = [
|
||||
# "pypi-attestations==0.0.28",
|
||||
# ]
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"""Refresh and update language stemming data from the Snowball project."""
|
||||
|
||||
# /// script
|
||||
# requires-python = ">=3.11"
|
||||
# requires-python = ">=3.12"
|
||||
# dependencies = [
|
||||
# "requests>=2.30",
|
||||
# ]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = ">=3.11"
|
||||
requires-python = ">=3.12"
|
||||
|
||||
[[package]]
|
||||
name = "alabaster"
|
||||
@@ -29,15 +29,6 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "backports-tarfile"
|
||||
version = "1.2.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/86/72/cd9b395f25e290e633655a100af28cb253e4393396264a98bd5f5951d50f/backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991", size = 86406, upload-time = "2024-05-28T17:01:54.731Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", size = 30181, upload-time = "2024-05-28T17:01:53.112Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "build"
|
||||
version = "1.3.0"
|
||||
@@ -70,19 +61,6 @@ dependencies = [
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" },
|
||||
@@ -137,22 +115,6 @@ version = "3.4.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/62/8b/171935adf2312cd745d290ed93cf16cf0dfe320863ab7cbeeae1dcd6535f/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", size = 160863, upload-time = "2025-10-14T04:40:37.188Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/09/73/ad875b192bda14f2173bfc1bc9a55e009808484a4b256748d931b6948442/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", size = 157837, upload-time = "2025-10-14T04:40:38.435Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", size = 151550, upload-time = "2025-10-14T04:40:40.053Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/55/c2/43edd615fdfba8c6f2dfbd459b25a6b3b551f24ea21981e23fb768503ce1/charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", size = 149162, upload-time = "2025-10-14T04:40:41.163Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/03/86/bde4ad8b4d0e9429a4e82c1e8f5c659993a9a863ad62c7df05cf7b678d75/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", size = 150019, upload-time = "2025-10-14T04:40:42.276Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1f/86/a151eb2af293a7e7bac3a739b81072585ce36ccfb4493039f49f1d3cae8c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", size = 143310, upload-time = "2025-10-14T04:40:43.439Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/fe/43dae6144a7e07b87478fdfc4dbe9efd5defb0e7ec29f5f58a55aeef7bf7/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", size = 162022, upload-time = "2025-10-14T04:40:44.547Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/80/e6/7aab83774f5d2bca81f42ac58d04caf44f0cc2b65fc6db2b3b2e8a05f3b3/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", size = 149383, upload-time = "2025-10-14T04:40:46.018Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4f/e8/b289173b4edae05c0dde07f69f8db476a0b511eac556dfe0d6bda3c43384/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", size = 159098, upload-time = "2025-10-14T04:40:47.081Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d8/df/fe699727754cae3f8478493c7f45f777b17c3ef0600e28abfec8619eb49c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", size = 152991, upload-time = "2025-10-14T04:40:48.246Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1a/86/584869fe4ddb6ffa3bd9f491b87a01568797fb9bd8933f557dba9771beaf/charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", size = 99456, upload-time = "2025-10-14T04:40:49.376Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", size = 106978, upload-time = "2025-10-14T04:40:50.844Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/9d/0710916e6c82948b3be62d9d398cb4fcf4e97b56d6a6aeccd66c4b2f2bd5/charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", size = 99969, upload-time = "2025-10-14T04:40:52.272Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" },
|
||||
@@ -267,12 +229,6 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/0a/6e/1c8331ddf91ca4730ab3086a0f1be19c65510a33b5a441cb334e7a2d2560/cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", size = 3036695, upload-time = "2025-10-15T23:18:08.672Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/90/45/b0d691df20633eff80955a0fc7695ff9051ffce8b69741444bd9ed7bd0db/cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", size = 3501720, upload-time = "2025-10-15T23:18:10.632Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e8/cb/2da4cc83f5edb9c3257d09e1e7ab7b23f049c7962cae8d842bbef0a9cec9/cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", size = 2918740, upload-time = "2025-10-15T23:18:12.277Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/06/8a/e60e46adab4362a682cf142c7dcb5bf79b782ab2199b0dcb81f55970807f/cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea", size = 3698132, upload-time = "2025-10-15T23:18:17.056Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/da/38/f59940ec4ee91e93d3311f7532671a5cef5570eb04a144bf203b58552d11/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b", size = 4243992, upload-time = "2025-10-15T23:18:18.695Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b0/0c/35b3d92ddebfdfda76bb485738306545817253d0a3ded0bfe80ef8e67aa5/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb", size = 4409944, upload-time = "2025-10-15T23:18:20.597Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/99/55/181022996c4063fc0e7666a47049a1ca705abb9c8a13830f074edb347495/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717", size = 4242957, upload-time = "2025-10-15T23:18:22.18Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ba/af/72cd6ef29f9c5f731251acadaeb821559fe25f10852f44a63374c9ca08c1/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9", size = 4409447, upload-time = "2025-10-15T23:18:24.209Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0d/c3/e90f4a4feae6410f914f8ebac129b9ae7a8c92eb60a638012dde42030a9d/cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c", size = 3438528, upload-time = "2025-10-15T23:18:26.227Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -281,10 +237,6 @@ version = "3.2.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/29/17/55fc687ba986f2210298fa2f60fec265fa3004c3f9a1e958ea1fe2d4e061/cython-3.2.2.tar.gz", hash = "sha256:c3add3d483acc73129a61d105389344d792c17e7c1cee24863f16416bd071634", size = 3275797, upload-time = "2025-11-30T12:48:20.942Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/ba/d785f60564a43bddbb7316134252a55d67ff6f164f0be90c4bf31482da82/cython-3.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d140c2701cbb8cf960300cf1b67f3b4fa9d294d32e51b85f329bff56936a82fd", size = 2951181, upload-time = "2025-11-30T12:48:39.723Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8c/36/277ea908bd7a326adcce5f67581926783ec11a4402ead0719e72555da2e7/cython-3.2.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50bbaabee733fd2780985e459fc20f655e02def83e8eff10220ad88455a34622", size = 3243194, upload-time = "2025-11-30T12:48:41.862Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/87/7776495bbff80bdd7754f4849bfde126b1d97741df5bc58a3a00af641747/cython-3.2.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9509f1e9c41c86b790cff745bb31927bbc861662a3b462596d71d3d2a578abb", size = 3378096, upload-time = "2025-11-30T12:48:43.584Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a5/d0/fabb9f4767f7101f1c0d6b23116d6d250148f656dac152afd792756661a8/cython-3.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:034ab96cb8bc8e7432bc27491f8d66f51e435b1eb21ddc03aa844be8f21ad847", size = 2768932, upload-time = "2025-11-30T12:48:45.193Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/57/0f/6fd78dc581373722bb9dedfc90c35b59ba88af988756315af227a877c7a2/cython-3.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:692a41c8fe06fb2dc55ca2c8d71c80c469fd16fe69486ed99f3b3cbb2d3af83f", size = 2968037, upload-time = "2025-11-30T12:48:47.279Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b0/52/50b6263c2fbad73aae8911ce54641ee1739d430a0592d3b3510591d7842b/cython-3.2.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:098590c1dc309f8a0406ade031963a95a87714296b425539f9920aebf924560d", size = 3223137, upload-time = "2025-11-30T12:48:48.951Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d6/44/4e34d161674c9162c6eb9ddef0cd69d41d92ae7e6dee3945fed3a6871ebe/cython-3.2.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3898c076e9c458bcb3e4936187919fda5f5365fe4c567d35d2b003444b6f3fe", size = 3390943, upload-time = "2025-11-30T12:48:51.125Z" },
|
||||
@@ -388,18 +340,6 @@ 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" },
|
||||
]
|
||||
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.3.0"
|
||||
@@ -425,9 +365,6 @@ wheels = [
|
||||
name = "jaraco-context"
|
||||
version = "6.0.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "backports-tarfile", marker = "python_full_version < '3.12'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", size = 13912, upload-time = "2024-08-20T03:39:27.358Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", size = 6825, upload-time = "2024-08-20T03:39:25.966Z" },
|
||||
@@ -471,7 +408,6 @@ name = "keyring"
|
||||
version = "25.7.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "importlib-metadata", marker = "python_full_version < '3.12'" },
|
||||
{ name = "jaraco-classes" },
|
||||
{ name = "jaraco-context" },
|
||||
{ name = "jaraco-functools" },
|
||||
@@ -490,17 +426,6 @@ version = "0.6.3"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/37/c3/cdff3c10e2e608490dc0a310ccf11ba777b3943ad4fcead2a2ade98c21e1/librt-0.6.3.tar.gz", hash = "sha256:c724a884e642aa2bbad52bb0203ea40406ad742368a5f90da1b220e970384aae", size = 54209, upload-time = "2025-11-29T14:01:56.058Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/8b/80/bc60fd16fe24910bf5974fb914778a2e8540cef55385ab2cb04a0dfe42c4/librt-0.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:61348cc488b18d1b1ff9f3e5fcd5ac43ed22d3e13e862489d2267c2337285c08", size = 27285, upload-time = "2025-11-29T14:00:46.626Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/88/3c/26335536ed9ba097c79cffcee148393592e55758fe76d99015af3e47a6d0/librt-0.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64645b757d617ad5f98c08e07620bc488d4bced9ced91c6279cec418f16056fa", size = 27629, upload-time = "2025-11-29T14:00:47.863Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/af/fd/2dcedeacfedee5d2eda23e7a49c1c12ce6221b5d58a13555f053203faafc/librt-0.6.3-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:26b8026393920320bb9a811b691d73c5981385d537ffc5b6e22e53f7b65d4122", size = 82039, upload-time = "2025-11-29T14:00:49.131Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/48/ff/6aa11914b83b0dc2d489f7636942a8e3322650d0dba840db9a1b455f3caa/librt-0.6.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d998b432ed9ffccc49b820e913c8f327a82026349e9c34fa3690116f6b70770f", size = 86560, upload-time = "2025-11-29T14:00:50.403Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/76/a1/d25af61958c2c7eb978164aeba0350719f615179ba3f428b682b9a5fdace/librt-0.6.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e18875e17ef69ba7dfa9623f2f95f3eda6f70b536079ee6d5763ecdfe6cc9040", size = 86494, upload-time = "2025-11-29T14:00:51.383Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7d/4b/40e75d3b258c801908e64b39788f9491635f9554f8717430a491385bd6f2/librt-0.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a218f85081fc3f70cddaed694323a1ad7db5ca028c379c214e3a7c11c0850523", size = 88914, upload-time = "2025-11-29T14:00:52.688Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/97/6d/0070c81aba8a169224301c75fb5fb6c3c25ca67e6ced086584fc130d5a67/librt-0.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1ef42ff4edd369e84433ce9b188a64df0837f4f69e3d34d3b34d4955c599d03f", size = 86944, upload-time = "2025-11-29T14:00:53.768Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a6/94/809f38887941b7726692e0b5a083dbdc87dbb8cf893e3b286550c5f0b129/librt-0.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0e0f2b79993fec23a685b3e8107ba5f8675eeae286675a216da0b09574fa1e47", size = 89852, upload-time = "2025-11-29T14:00:54.71Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/58/a3/b0e5b1cda675b91f1111d8ba941da455d8bfaa22f4d2d8963ba96ccb5b12/librt-0.6.3-cp311-cp311-win32.whl", hash = "sha256:fd98cacf4e0fabcd4005c452cb8a31750258a85cab9a59fb3559e8078da408d7", size = 19948, upload-time = "2025-11-29T14:00:55.989Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cc/73/70011c2b37e3be3ece3affd3abc8ebe5cda482b03fd6b3397906321a901e/librt-0.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:e17b5b42c8045867ca9d1f54af00cc2275198d38de18545edaa7833d7e9e4ac8", size = 21406, upload-time = "2025-11-29T14:00:56.874Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/91/ee/119aa759290af6ca0729edf513ca390c1afbeae60f3ecae9b9d56f25a8a9/librt-0.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:87597e3d57ec0120a3e1d857a708f80c02c42ea6b00227c728efbc860f067c45", size = 20875, upload-time = "2025-11-29T14:00:57.752Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b4/2c/b59249c566f98fe90e178baf59e83f628d6c38fb8bc78319301fccda0b5e/librt-0.6.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:74418f718083009108dc9a42c21bf2e4802d49638a1249e13677585fcc9ca176", size = 27841, upload-time = "2025-11-29T14:00:58.925Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/40/e8/9db01cafcd1a2872b76114c858f81cc29ce7ad606bc102020d6dabf470fb/librt-0.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:514f3f363d1ebc423357d36222c37e5c8e6674b6eae8d7195ac9a64903722057", size = 27844, upload-time = "2025-11-29T14:01:00.2Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/59/4d/da449d3a7d83cc853af539dee42adc37b755d7eea4ad3880bacfd84b651d/librt-0.6.3-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cf1115207a5049d1f4b7b4b72de0e52f228d6c696803d94843907111cbf80610", size = 84091, upload-time = "2025-11-29T14:01:01.118Z" },
|
||||
@@ -565,17 +490,6 @@ version = "3.0.3"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" },
|
||||
@@ -663,12 +577,6 @@ dependencies = [
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f9/b5/b58cdc25fadd424552804bf410855d52324183112aa004f0732c5f6324cf/mypy-1.19.0.tar.gz", hash = "sha256:f6b874ca77f733222641e5c46e4711648c4037ea13646fd0cdc814c2eaec2528", size = 3579025, upload-time = "2025-11-28T15:49:01.26Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/0f/d2/010fb171ae5ac4a01cc34fbacd7544531e5ace95c35ca166dd8fd1b901d0/mypy-1.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a31e4c28e8ddb042c84c5e977e28a21195d086aaffaf08b016b78e19c9ef8106", size = 13010563, upload-time = "2025-11-28T15:48:23.975Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/41/6b/63f095c9f1ce584fdeb595d663d49e0980c735a1d2004720ccec252c5d47/mypy-1.19.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34ec1ac66d31644f194b7c163d7f8b8434f1b49719d403a5d26c87fff7e913f7", size = 12077037, upload-time = "2025-11-28T15:47:51.582Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d7/83/6cb93d289038d809023ec20eb0b48bbb1d80af40511fa077da78af6ff7c7/mypy-1.19.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cb64b0ba5980466a0f3f9990d1c582bcab8db12e29815ecb57f1408d99b4bff7", size = 12680255, upload-time = "2025-11-28T15:46:57.628Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/99/db/d217815705987d2cbace2edd9100926196d6f85bcb9b5af05058d6e3c8ad/mypy-1.19.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:120cffe120cca5c23c03c77f84abc0c14c5d2e03736f6c312480020082f1994b", size = 13421472, upload-time = "2025-11-28T15:47:59.655Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4e/51/d2beaca7c497944b07594f3f8aad8d2f0e8fc53677059848ae5d6f4d193e/mypy-1.19.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7a500ab5c444268a70565e374fc803972bfd1f09545b13418a5174e29883dab7", size = 13651823, upload-time = "2025-11-28T15:45:29.318Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/aa/d1/7883dcf7644db3b69490f37b51029e0870aac4a7ad34d09ceae709a3df44/mypy-1.19.0-cp311-cp311-win_amd64.whl", hash = "sha256:c14a98bc63fd867530e8ec82f217dae29d0550c86e70debc9667fff1ec83284e", size = 10049077, upload-time = "2025-11-28T15:45:39.818Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/11/7e/1afa8fb188b876abeaa14460dc4983f909aaacaa4bf5718c00b2c7e0b3d5/mypy-1.19.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0fb3115cb8fa7c5f887c8a8d81ccdcb94cff334684980d847e5a62e926910e1d", size = 13207728, upload-time = "2025-11-28T15:46:26.463Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/13/f103d04962bcbefb1644f5ccb235998b32c337d6c13145ea390b9da47f3e/mypy-1.19.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3e19e3b897562276bb331074d64c076dbdd3e79213f36eed4e592272dabd760", size = 12202945, upload-time = "2025-11-28T15:48:49.143Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e4/93/a86a5608f74a22284a8ccea8592f6e270b61f95b8588951110ad797c2ddd/mypy-1.19.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9d491295825182fba01b6ffe2c6fe4e5a49dbf4e2bb4d1217b6ced3b4797bc6", size = 12718673, upload-time = "2025-11-28T15:47:37.193Z" },
|
||||
@@ -859,20 +767,6 @@ dependencies = [
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e8/72/74a989dd9f2084b3d9530b0915fdda64ac48831c30dbf7c72a41a5232db8/pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6", size = 2105873, upload-time = "2025-11-04T13:39:31.373Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b", size = 1899826, upload-time = "2025-11-04T13:39:32.897Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/33/7f/1d5cab3ccf44c1935a359d51a8a2a9e1a654b744b5e7f80d41b88d501eec/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a", size = 1917869, upload-time = "2025-11-04T13:39:34.469Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6e/6a/30d94a9674a7fe4f4744052ed6c5e083424510be1e93da5bc47569d11810/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8", size = 2063890, upload-time = "2025-11-04T13:39:36.053Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/50/be/76e5d46203fcb2750e542f32e6c371ffa9b8ad17364cf94bb0818dbfb50c/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e", size = 2229740, upload-time = "2025-11-04T13:39:37.753Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d3/ee/fed784df0144793489f87db310a6bbf8118d7b630ed07aa180d6067e653a/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1", size = 2350021, upload-time = "2025-11-04T13:39:40.94Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b", size = 2066378, upload-time = "2025-11-04T13:39:42.523Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b0/3b/698cf8ae1d536a010e05121b4958b1257f0b5522085e335360e53a6b1c8b/pydantic_core-2.41.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b", size = 2175761, upload-time = "2025-11-04T13:39:44.553Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/ba/15d537423939553116dea94ce02f9c31be0fa9d0b806d427e0308ec17145/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284", size = 2146303, upload-time = "2025-11-04T13:39:46.238Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/58/7f/0de669bf37d206723795f9c90c82966726a2ab06c336deba4735b55af431/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594", size = 2340355, upload-time = "2025-11-04T13:39:48.002Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e5/de/e7482c435b83d7e3c3ee5ee4451f6e8973cff0eb6007d2872ce6383f6398/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e", size = 2319875, upload-time = "2025-11-04T13:39:49.705Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fe/e6/8c9e81bb6dd7560e33b9053351c29f30c8194b72f2d6932888581f503482/pydantic_core-2.41.5-cp311-cp311-win32.whl", hash = "sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b", size = 1987549, upload-time = "2025-11-04T13:39:51.842Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/11/66/f14d1d978ea94d1bc21fc98fcf570f9542fe55bfcc40269d4e1a21c19bf7/pydantic_core-2.41.5-cp311-cp311-win_amd64.whl", hash = "sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe", size = 2011305, upload-time = "2025-11-04T13:39:53.485Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/56/d8/0e271434e8efd03186c5386671328154ee349ff0354d83c74f5caaf096ed/pydantic_core-2.41.5-cp311-cp311-win_arm64.whl", hash = "sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f", size = 1972902, upload-time = "2025-11-04T13:39:56.488Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7", size = 2110990, upload-time = "2025-11-04T13:39:58.079Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0", size = 1896003, upload-time = "2025-11-04T13:39:59.956Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69", size = 1919200, upload-time = "2025-11-04T13:40:02.241Z" },
|
||||
@@ -929,22 +823,10 @@ 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/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" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2e/1b/687711069de7efa6af934e74f601e2a4307365e8fdc404703afc453eab26/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad", size = 2138905, upload-time = "2025-11-04T13:42:47.156Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/09/32/59b0c7e63e277fa7911c2fc70ccfb45ce4b98991e7ef37110663437005af/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", size = 2110495, upload-time = "2025-11-04T13:42:49.689Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/aa/81/05e400037eaf55ad400bcd318c05bb345b57e708887f07ddb2d20e3f0e98/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", size = 1915388, upload-time = "2025-11-04T13:42:52.215Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6e/0d/e3549b2399f71d56476b77dbf3cf8937cec5cd70536bdc0e374a421d0599/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", size = 1942879, upload-time = "2025-11-04T13:42:56.483Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f7/07/34573da085946b6a313d7c42f82f16e8920bfd730665de2d11c0c37a74b5/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b", size = 2139017, upload-time = "2025-11-04T13:42:59.471Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5f/9b/1b3f0e9f9305839d7e84912f9e8bfbd191ed1b1ef48083609f0dabde978c/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26", size = 2101980, upload-time = "2025-11-04T13:43:25.97Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a4/ed/d71fefcb4263df0da6a85b5d8a7508360f2f2e9b3bf5814be9c8bccdccc1/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808", size = 1923865, upload-time = "2025-11-04T13:43:28.763Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ce/3a/626b38db460d675f873e4444b4bb030453bbe7b4ba55df821d026a0493c4/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc", size = 2134256, upload-time = "2025-11-04T13:43:31.71Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/83/d9/8412d7f06f616bbc053d30cb4e5f76786af3221462ad5eee1f202021eb4e/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1", size = 2174762, upload-time = "2025-11-04T13:43:34.744Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/55/4c/162d906b8e3ba3a99354e20faa1b49a85206c47de97a639510a0e673f5da/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84", size = 2143141, upload-time = "2025-11-04T13:43:37.701Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1f/f2/f11dd73284122713f5f89fc940f370d035fa8e1e078d446b3313955157fe/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770", size = 2330317, upload-time = "2025-11-04T13:43:40.406Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/88/9d/b06ca6acfe4abb296110fb1273a4d848a0bfb2ff65f3ee92127b3244e16b/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f", size = 2316992, upload-time = "2025-11-04T13:43:43.602Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/36/c7/cfc8e811f061c841d7990b0201912c3556bfeb99cdcb7ed24adc8d6f8704/pydantic_core-2.41.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51", size = 2145302, upload-time = "2025-11-04T13:43:46.64Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1098,20 +980,6 @@ version = "2025.11.3"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/cc/a9/546676f25e573a4cf00fe8e119b78a37b6a8fe2dc95cda877b30889c9c45/regex-2025.11.3.tar.gz", hash = "sha256:1fedc720f9bb2494ce31a58a1631f9c82df6a09b49c19517ea5cc280b4541e01", size = 414669, upload-time = "2025-11-03T21:34:22.089Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f7/90/4fb5056e5f03a7048abd2b11f598d464f0c167de4f2a51aa868c376b8c70/regex-2025.11.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eadade04221641516fa25139273505a1c19f9bf97589a05bc4cfcd8b4a618031", size = 488081, upload-time = "2025-11-03T21:31:11.946Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/85/23/63e481293fac8b069d84fba0299b6666df720d875110efd0338406b5d360/regex-2025.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:feff9e54ec0dd3833d659257f5c3f5322a12eee58ffa360984b716f8b92983f4", size = 290554, upload-time = "2025-11-03T21:31:13.387Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/9d/b101d0262ea293a0066b4522dfb722eb6a8785a8c3e084396a5f2c431a46/regex-2025.11.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3b30bc921d50365775c09a7ed446359e5c0179e9e2512beec4a60cbcef6ddd50", size = 288407, upload-time = "2025-11-03T21:31:14.809Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0c/64/79241c8209d5b7e00577ec9dca35cd493cc6be35b7d147eda367d6179f6d/regex-2025.11.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f99be08cfead2020c7ca6e396c13543baea32343b7a9a5780c462e323bd8872f", size = 793418, upload-time = "2025-11-03T21:31:16.556Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3d/e2/23cd5d3573901ce8f9757c92ca4db4d09600b865919b6d3e7f69f03b1afd/regex-2025.11.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6dd329a1b61c0ee95ba95385fb0c07ea0d3fe1a21e1349fa2bec272636217118", size = 860448, upload-time = "2025-11-03T21:31:18.12Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2a/4c/aecf31beeaa416d0ae4ecb852148d38db35391aac19c687b5d56aedf3a8b/regex-2025.11.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4c5238d32f3c5269d9e87be0cf096437b7622b6920f5eac4fd202468aaeb34d2", size = 907139, upload-time = "2025-11-03T21:31:20.753Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/61/22/b8cb00df7d2b5e0875f60628594d44dba283e951b1ae17c12f99e332cc0a/regex-2025.11.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10483eefbfb0adb18ee9474498c9a32fcf4e594fbca0543bb94c48bac6183e2e", size = 800439, upload-time = "2025-11-03T21:31:22.069Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/02/a8/c4b20330a5cdc7a8eb265f9ce593f389a6a88a0c5f280cf4d978f33966bc/regex-2025.11.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:78c2d02bb6e1da0720eedc0bad578049cad3f71050ef8cd065ecc87691bed2b0", size = 782965, upload-time = "2025-11-03T21:31:23.598Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b4/4c/ae3e52988ae74af4b04d2af32fee4e8077f26e51b62ec2d12d246876bea2/regex-2025.11.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e6b49cd2aad93a1790ce9cffb18964f6d3a4b0b3dbdbd5de094b65296fce6e58", size = 854398, upload-time = "2025-11-03T21:31:25.008Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/06/d1/a8b9cf45874eda14b2e275157ce3b304c87e10fb38d9fc26a6e14eb18227/regex-2025.11.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:885b26aa3ee56433b630502dc3d36ba78d186a00cc535d3806e6bfd9ed3c70ab", size = 845897, upload-time = "2025-11-03T21:31:26.427Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/fe/1830eb0236be93d9b145e0bd8ab499f31602fe0999b1f19e99955aa8fe20/regex-2025.11.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ddd76a9f58e6a00f8772e72cff8ebcff78e022be95edf018766707c730593e1e", size = 788906, upload-time = "2025-11-03T21:31:28.078Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/47/dc2577c1f95f188c1e13e2e69d8825a5ac582ac709942f8a03af42ed6e93/regex-2025.11.3-cp311-cp311-win32.whl", hash = "sha256:3e816cc9aac1cd3cc9a4ec4d860f06d40f994b5c7b4d03b93345f44e08cc68bf", size = 265812, upload-time = "2025-11-03T21:31:29.72Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/50/1e/15f08b2f82a9bbb510621ec9042547b54d11e83cb620643ebb54e4eb7d71/regex-2025.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:087511f5c8b7dfbe3a03f5d5ad0c2a33861b1fc387f21f6f60825a44865a385a", size = 277737, upload-time = "2025-11-03T21:31:31.422Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/fc/6500eb39f5f76c5e47a398df82e6b535a5e345f839581012a418b16f9cc3/regex-2025.11.3-cp311-cp311-win_arm64.whl", hash = "sha256:1ff0d190c7f68ae7769cd0313fe45820ba07ffebfddfaa89cc1eb70827ba0ddc", size = 270290, upload-time = "2025-11-03T21:31:33.041Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e8/74/18f04cb53e58e3fb107439699bd8375cf5a835eec81084e0bddbd122e4c2/regex-2025.11.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bc8ab71e2e31b16e40868a40a69007bc305e1109bd4658eb6cad007e0bf67c41", size = 489312, upload-time = "2025-11-03T21:31:34.343Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/78/3f/37fcdd0d2b1e78909108a876580485ea37c91e1acf66d3bb8e736348f441/regex-2025.11.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:22b29dda7e1f7062a52359fca6e58e548e28c6686f205e780b02ad8ef710de36", size = 291256, upload-time = "2025-11-03T21:31:35.675Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bf/26/0a575f58eb23b7ebd67a45fccbc02ac030b737b896b7e7a909ffe43ffd6a/regex-2025.11.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a91e4a29938bc1a082cc28fdea44be420bf2bebe2665343029723892eb073e1", size = 288921, upload-time = "2025-11-03T21:31:37.07Z" },
|
||||
@@ -1765,12 +1633,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" },
|
||||
]
|
||||
|
||||
[[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" },
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user