mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-30 13:51:16 +00:00
[ty] Sync vendored typeshed stubs (#19607)
Some checks are pending
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Waiting to run
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / Fuzz for new ty panics (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / check playground (push) Blocked by required conditions
CI / benchmarks-instrumented (push) Blocked by required conditions
CI / benchmarks-walltime (push) Blocked by required conditions
[ty Playground] Release / publish (push) Waiting to run
Some checks are pending
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Waiting to run
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / Fuzz for new ty panics (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / check playground (push) Blocked by required conditions
CI / benchmarks-instrumented (push) Blocked by required conditions
CI / benchmarks-walltime (push) Blocked by required conditions
[ty Playground] Release / publish (push) Waiting to run
Co-authored-by: typeshedbot <> Co-authored-by: Alex Waygood <alex.waygood@gmail.com>
This commit is contained in:
parent
d4f64cd474
commit
c6a123290d
204 changed files with 3265 additions and 1162 deletions
|
@ -199,14 +199,14 @@ mod tests {
|
||||||
|
|
||||||
assert_snapshot!(test.goto_type_definition(), @r#"
|
assert_snapshot!(test.goto_type_definition(), @r#"
|
||||||
info[goto-type-definition]: Type definition
|
info[goto-type-definition]: Type definition
|
||||||
--> stdlib/builtins.pyi:890:7
|
--> stdlib/builtins.pyi:892:7
|
||||||
|
|
|
|
||||||
888 | def __getitem__(self, key: int, /) -> str | int | None: ...
|
890 | def __getitem__(self, key: int, /) -> str | int | None: ...
|
||||||
889 |
|
891 |
|
||||||
890 | class str(Sequence[str]):
|
892 | class str(Sequence[str]):
|
||||||
| ^^^
|
| ^^^
|
||||||
891 | """str(object='') -> str
|
893 | """str(object='') -> str
|
||||||
892 | str(bytes_or_buffer[, encoding[, errors]]) -> str
|
894 | str(bytes_or_buffer[, encoding[, errors]]) -> str
|
||||||
|
|
|
|
||||||
info: Source
|
info: Source
|
||||||
--> main.py:4:13
|
--> main.py:4:13
|
||||||
|
@ -228,14 +228,14 @@ mod tests {
|
||||||
|
|
||||||
assert_snapshot!(test.goto_type_definition(), @r#"
|
assert_snapshot!(test.goto_type_definition(), @r#"
|
||||||
info[goto-type-definition]: Type definition
|
info[goto-type-definition]: Type definition
|
||||||
--> stdlib/builtins.pyi:890:7
|
--> stdlib/builtins.pyi:892:7
|
||||||
|
|
|
|
||||||
888 | def __getitem__(self, key: int, /) -> str | int | None: ...
|
890 | def __getitem__(self, key: int, /) -> str | int | None: ...
|
||||||
889 |
|
891 |
|
||||||
890 | class str(Sequence[str]):
|
892 | class str(Sequence[str]):
|
||||||
| ^^^
|
| ^^^
|
||||||
891 | """str(object='') -> str
|
893 | """str(object='') -> str
|
||||||
892 | str(bytes_or_buffer[, encoding[, errors]]) -> str
|
894 | str(bytes_or_buffer[, encoding[, errors]]) -> str
|
||||||
|
|
|
|
||||||
info: Source
|
info: Source
|
||||||
--> main.py:2:22
|
--> main.py:2:22
|
||||||
|
@ -344,14 +344,14 @@ mod tests {
|
||||||
|
|
||||||
assert_snapshot!(test.goto_type_definition(), @r#"
|
assert_snapshot!(test.goto_type_definition(), @r#"
|
||||||
info[goto-type-definition]: Type definition
|
info[goto-type-definition]: Type definition
|
||||||
--> stdlib/builtins.pyi:890:7
|
--> stdlib/builtins.pyi:892:7
|
||||||
|
|
|
|
||||||
888 | def __getitem__(self, key: int, /) -> str | int | None: ...
|
890 | def __getitem__(self, key: int, /) -> str | int | None: ...
|
||||||
889 |
|
891 |
|
||||||
890 | class str(Sequence[str]):
|
892 | class str(Sequence[str]):
|
||||||
| ^^^
|
| ^^^
|
||||||
891 | """str(object='') -> str
|
893 | """str(object='') -> str
|
||||||
892 | str(bytes_or_buffer[, encoding[, errors]]) -> str
|
894 | str(bytes_or_buffer[, encoding[, errors]]) -> str
|
||||||
|
|
|
|
||||||
info: Source
|
info: Source
|
||||||
--> main.py:4:18
|
--> main.py:4:18
|
||||||
|
@ -413,14 +413,14 @@ f(**kwargs<CURSOR>)
|
||||||
|
|
||||||
assert_snapshot!(test.goto_type_definition(), @r#"
|
assert_snapshot!(test.goto_type_definition(), @r#"
|
||||||
info[goto-type-definition]: Type definition
|
info[goto-type-definition]: Type definition
|
||||||
--> stdlib/builtins.pyi:2888:7
|
--> stdlib/builtins.pyi:2890:7
|
||||||
|
|
|
|
||||||
2886 | """See PEP 585"""
|
2888 | """See PEP 585"""
|
||||||
2887 |
|
2889 |
|
||||||
2888 | class dict(MutableMapping[_KT, _VT]):
|
2890 | class dict(MutableMapping[_KT, _VT]):
|
||||||
| ^^^^
|
| ^^^^
|
||||||
2889 | """dict() -> new empty dictionary
|
2891 | """dict() -> new empty dictionary
|
||||||
2890 | dict(mapping) -> new dictionary initialized from a mapping object's
|
2892 | dict(mapping) -> new dictionary initialized from a mapping object's
|
||||||
|
|
|
|
||||||
info: Source
|
info: Source
|
||||||
--> main.py:6:5
|
--> main.py:6:5
|
||||||
|
@ -444,14 +444,14 @@ f(**kwargs<CURSOR>)
|
||||||
|
|
||||||
assert_snapshot!(test.goto_type_definition(), @r#"
|
assert_snapshot!(test.goto_type_definition(), @r#"
|
||||||
info[goto-type-definition]: Type definition
|
info[goto-type-definition]: Type definition
|
||||||
--> stdlib/builtins.pyi:890:7
|
--> stdlib/builtins.pyi:892:7
|
||||||
|
|
|
|
||||||
888 | def __getitem__(self, key: int, /) -> str | int | None: ...
|
890 | def __getitem__(self, key: int, /) -> str | int | None: ...
|
||||||
889 |
|
891 |
|
||||||
890 | class str(Sequence[str]):
|
892 | class str(Sequence[str]):
|
||||||
| ^^^
|
| ^^^
|
||||||
891 | """str(object='') -> str
|
893 | """str(object='') -> str
|
||||||
892 | str(bytes_or_buffer[, encoding[, errors]]) -> str
|
894 | str(bytes_or_buffer[, encoding[, errors]]) -> str
|
||||||
|
|
|
|
||||||
info: Source
|
info: Source
|
||||||
--> main.py:3:17
|
--> main.py:3:17
|
||||||
|
@ -537,14 +537,14 @@ f(**kwargs<CURSOR>)
|
||||||
|
|
||||||
assert_snapshot!(test.goto_type_definition(), @r#"
|
assert_snapshot!(test.goto_type_definition(), @r#"
|
||||||
info[goto-type-definition]: Type definition
|
info[goto-type-definition]: Type definition
|
||||||
--> stdlib/builtins.pyi:890:7
|
--> stdlib/builtins.pyi:892:7
|
||||||
|
|
|
|
||||||
888 | def __getitem__(self, key: int, /) -> str | int | None: ...
|
890 | def __getitem__(self, key: int, /) -> str | int | None: ...
|
||||||
889 |
|
891 |
|
||||||
890 | class str(Sequence[str]):
|
892 | class str(Sequence[str]):
|
||||||
| ^^^
|
| ^^^
|
||||||
891 | """str(object='') -> str
|
893 | """str(object='') -> str
|
||||||
892 | str(bytes_or_buffer[, encoding[, errors]]) -> str
|
894 | str(bytes_or_buffer[, encoding[, errors]]) -> str
|
||||||
|
|
|
|
||||||
info: Source
|
info: Source
|
||||||
--> main.py:4:27
|
--> main.py:4:27
|
||||||
|
@ -568,13 +568,13 @@ f(**kwargs<CURSOR>)
|
||||||
|
|
||||||
assert_snapshot!(test.goto_type_definition(), @r#"
|
assert_snapshot!(test.goto_type_definition(), @r#"
|
||||||
info[goto-type-definition]: Type definition
|
info[goto-type-definition]: Type definition
|
||||||
--> stdlib/types.pyi:921:11
|
--> stdlib/types.pyi:922:11
|
||||||
|
|
|
|
||||||
919 | if sys.version_info >= (3, 10):
|
920 | if sys.version_info >= (3, 10):
|
||||||
920 | @final
|
921 | @final
|
||||||
921 | class NoneType:
|
922 | class NoneType:
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
922 | """The type of the None singleton."""
|
923 | """The type of the None singleton."""
|
||||||
|
|
|
|
||||||
info: Source
|
info: Source
|
||||||
--> main.py:3:17
|
--> main.py:3:17
|
||||||
|
@ -585,14 +585,14 @@ f(**kwargs<CURSOR>)
|
||||||
|
|
|
|
||||||
|
|
||||||
info[goto-type-definition]: Type definition
|
info[goto-type-definition]: Type definition
|
||||||
--> stdlib/builtins.pyi:890:7
|
--> stdlib/builtins.pyi:892:7
|
||||||
|
|
|
|
||||||
888 | def __getitem__(self, key: int, /) -> str | int | None: ...
|
890 | def __getitem__(self, key: int, /) -> str | int | None: ...
|
||||||
889 |
|
891 |
|
||||||
890 | class str(Sequence[str]):
|
892 | class str(Sequence[str]):
|
||||||
| ^^^
|
| ^^^
|
||||||
891 | """str(object='') -> str
|
893 | """str(object='') -> str
|
||||||
892 | str(bytes_or_buffer[, encoding[, errors]]) -> str
|
894 | str(bytes_or_buffer[, encoding[, errors]]) -> str
|
||||||
|
|
|
|
||||||
info: Source
|
info: Source
|
||||||
--> main.py:3:17
|
--> main.py:3:17
|
||||||
|
|
|
@ -29,16 +29,16 @@ error[invalid-argument-type]: Argument to function `loads` is incorrect
|
||||||
| ^ Expected `str | bytes | bytearray`, found `Literal[5]`
|
| ^ Expected `str | bytes | bytearray`, found `Literal[5]`
|
||||||
|
|
|
|
||||||
info: Function defined here
|
info: Function defined here
|
||||||
--> stdlib/json/__init__.pyi:218:5
|
--> stdlib/json/__init__.pyi:220:5
|
||||||
|
|
|
|
||||||
216 | """
|
218 | """
|
||||||
217 |
|
219 |
|
||||||
218 | def loads(
|
220 | def loads(
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
219 | s: str | bytes | bytearray,
|
221 | s: str | bytes | bytearray,
|
||||||
| -------------------------- Parameter declared here
|
| -------------------------- Parameter declared here
|
||||||
220 | *,
|
222 | *,
|
||||||
221 | cls: type[JSONDecoder] | None = None,
|
223 | cls: type[JSONDecoder] | None = None,
|
||||||
|
|
|
|
||||||
info: rule `invalid-argument-type` is enabled by default
|
info: rule `invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
|
|
6
crates/ty_vendored/vendor/typeshed/README.md
vendored
6
crates/ty_vendored/vendor/typeshed/README.md
vendored
|
@ -25,9 +25,9 @@ Typeshed supports Python versions 3.9 to 3.14.
|
||||||
|
|
||||||
## Using
|
## Using
|
||||||
|
|
||||||
If you're just using a type checker ([mypy](https://github.com/python/mypy/),
|
If you're just using a type checker (e.g. [mypy](https://github.com/python/mypy/),
|
||||||
[pyright](https://github.com/microsoft/pyright),
|
[pyright](https://github.com/microsoft/pyright), or PyCharm's built-in type
|
||||||
[pytype](https://github.com/google/pytype/), PyCharm, ...), as opposed to
|
checker), as opposed to
|
||||||
developing it, you don't need to interact with the typeshed repo at
|
developing it, you don't need to interact with the typeshed repo at
|
||||||
all: a copy of standard library part of typeshed is bundled with type checkers.
|
all: a copy of standard library part of typeshed is bundled with type checkers.
|
||||||
And type stubs for third party packages and modules you are using can
|
And type stubs for third party packages and modules you are using can
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
08225953c98cfd375d80bc88865e5aae77d2c07f
|
9ab7fde0a0cd24ed7a72837fcb21093b811b80d8
|
||||||
|
|
|
@ -124,6 +124,7 @@ compileall: 3.0-
|
||||||
compression: 3.14-
|
compression: 3.14-
|
||||||
concurrent: 3.2-
|
concurrent: 3.2-
|
||||||
concurrent.futures.interpreter: 3.14-
|
concurrent.futures.interpreter: 3.14-
|
||||||
|
concurrent.interpreters: 3.14-
|
||||||
configparser: 3.0-
|
configparser: 3.0-
|
||||||
contextlib: 3.0-
|
contextlib: 3.0-
|
||||||
contextvars: 3.7-
|
contextvars: 3.7-
|
||||||
|
|
|
@ -142,7 +142,7 @@ class _PyCPointerType(_CTypeBaseType):
|
||||||
def from_buffer_copy(self: type[_typeshed.Self], buffer: ReadableBuffer, offset: int = 0, /) -> _typeshed.Self: ...
|
def from_buffer_copy(self: type[_typeshed.Self], buffer: ReadableBuffer, offset: int = 0, /) -> _typeshed.Self: ...
|
||||||
def from_param(self: type[_typeshed.Self], value: Any, /) -> _typeshed.Self | _CArgObject: ...
|
def from_param(self: type[_typeshed.Self], value: Any, /) -> _typeshed.Self | _CArgObject: ...
|
||||||
def in_dll(self: type[_typeshed.Self], dll: CDLL, name: str, /) -> _typeshed.Self: ...
|
def in_dll(self: type[_typeshed.Self], dll: CDLL, name: str, /) -> _typeshed.Self: ...
|
||||||
def set_type(self, type: Any, /) -> None: ...
|
def set_type(self, type: _CTypeBaseType, /) -> None: ...
|
||||||
if sys.version_info < (3, 13):
|
if sys.version_info < (3, 13):
|
||||||
# Inherited from CType_Type starting on 3.13
|
# Inherited from CType_Type starting on 3.13
|
||||||
def __mul__(cls: type[_CT], other: int) -> type[Array[_CT]]: ... # type: ignore[misc] # pyright: ignore[reportGeneralTypeIssues]
|
def __mul__(cls: type[_CT], other: int) -> type[Array[_CT]]: ... # type: ignore[misc] # pyright: ignore[reportGeneralTypeIssues]
|
||||||
|
|
|
@ -69,6 +69,7 @@ if sys.version_info >= (3, 11):
|
||||||
on entry to the with-statement and restore the previous default context when
|
on entry to the with-statement and restore the previous default context when
|
||||||
exiting the with-statement. If no context is specified, a copy of the current
|
exiting the with-statement. If no context is specified, a copy of the current
|
||||||
default context is used.
|
default context is used.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -77,6 +78,7 @@ else:
|
||||||
on entry to the with-statement and restore the previous default context when
|
on entry to the with-statement and restore the previous default context when
|
||||||
exiting the with-statement. If no context is specified, a copy of the current
|
exiting the with-statement. If no context is specified, a copy of the current
|
||||||
default context is used.
|
default context is used.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if sys.version_info >= (3, 14):
|
if sys.version_info >= (3, 14):
|
||||||
|
@ -84,6 +86,7 @@ if sys.version_info >= (3, 14):
|
||||||
"""Return a context object initialized to the proper values for one of the
|
"""Return a context object initialized to the proper values for one of the
|
||||||
IEEE interchange formats. The argument must be a multiple of 32 and less
|
IEEE interchange formats. The argument must be a multiple of 32 and less
|
||||||
than IEEE_CONTEXT_MAX_BITS.
|
than IEEE_CONTEXT_MAX_BITS.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
DefaultContext: Context
|
DefaultContext: Context
|
||||||
|
|
|
@ -32,6 +32,7 @@ def __import__(
|
||||||
being imported (e.g. ``from module import <fromlist>``). The 'level'
|
being imported (e.g. ``from module import <fromlist>``). The 'level'
|
||||||
argument represents the package location to import from in a relative
|
argument represents the package location to import from in a relative
|
||||||
import (e.g. ``from ..pkg import mod`` would have a 'level' of 2).
|
import (e.g. ``from ..pkg import mod`` would have a 'level' of 2).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def spec_from_loader(
|
def spec_from_loader(
|
||||||
|
@ -80,6 +81,7 @@ class ModuleSpec:
|
||||||
|
|
||||||
Only finders (see importlib.abc.MetaPathFinder and
|
Only finders (see importlib.abc.MetaPathFinder and
|
||||||
importlib.abc.PathEntryFinder) should modify ModuleSpec instances.
|
importlib.abc.PathEntryFinder) should modify ModuleSpec instances.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
|
@ -109,6 +111,7 @@ class BuiltinImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader)
|
||||||
|
|
||||||
All methods are either class or static methods to avoid the need to
|
All methods are either class or static methods to avoid the need to
|
||||||
instantiate the class.
|
instantiate the class.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# MetaPathFinder
|
# MetaPathFinder
|
||||||
|
@ -120,6 +123,7 @@ class BuiltinImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader)
|
||||||
If 'path' is ever specified then the search is considered a failure.
|
If 'path' is ever specified then the search is considered a failure.
|
||||||
|
|
||||||
This method is deprecated. Use find_spec() instead.
|
This method is deprecated. Use find_spec() instead.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -136,6 +140,7 @@ class BuiltinImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader)
|
||||||
"""Load the specified module into sys.modules and return it.
|
"""Load the specified module into sys.modules and return it.
|
||||||
|
|
||||||
This method is deprecated. Use loader.exec_module() instead.
|
This method is deprecated. Use loader.exec_module() instead.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -152,6 +157,7 @@ class BuiltinImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader)
|
||||||
"""Return repr for the module.
|
"""Return repr for the module.
|
||||||
|
|
||||||
The method is deprecated. The import machinery does the job itself.
|
The method is deprecated. The import machinery does the job itself.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if sys.version_info >= (3, 10):
|
if sys.version_info >= (3, 10):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -175,6 +181,7 @@ class FrozenImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader):
|
||||||
|
|
||||||
All methods are either class or static methods to avoid the need to
|
All methods are either class or static methods to avoid the need to
|
||||||
instantiate the class.
|
instantiate the class.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# MetaPathFinder
|
# MetaPathFinder
|
||||||
|
@ -184,6 +191,7 @@ class FrozenImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader):
|
||||||
"""Find a frozen module.
|
"""Find a frozen module.
|
||||||
|
|
||||||
This method is deprecated. Use find_spec() instead.
|
This method is deprecated. Use find_spec() instead.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -200,6 +208,7 @@ class FrozenImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader):
|
||||||
"""Load a frozen module.
|
"""Load a frozen module.
|
||||||
|
|
||||||
This method is deprecated. Use exec_module() instead.
|
This method is deprecated. Use exec_module() instead.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -216,6 +225,7 @@ class FrozenImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader):
|
||||||
"""Return repr for the module.
|
"""Return repr for the module.
|
||||||
|
|
||||||
The method is deprecated. The import machinery does the job itself.
|
The method is deprecated. The import machinery does the job itself.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if sys.version_info >= (3, 10):
|
if sys.version_info >= (3, 10):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
@ -51,6 +51,7 @@ def cache_from_source(path: StrPath, debug_override: bool | None = None, *, opti
|
||||||
while a False value is equivalent to setting 'optimization' to '1'.
|
while a False value is equivalent to setting 'optimization' to '1'.
|
||||||
|
|
||||||
If sys.implementation.cache_tag is None then NotImplementedError is raised.
|
If sys.implementation.cache_tag is None then NotImplementedError is raised.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def source_from_cache(path: StrPath) -> str:
|
def source_from_cache(path: StrPath) -> str:
|
||||||
|
@ -60,6 +61,7 @@ def source_from_cache(path: StrPath) -> str:
|
||||||
the .py file calculated to correspond to the .pyc file. If path does
|
the .py file calculated to correspond to the .pyc file. If path does
|
||||||
not conform to PEP 3147/488 format, ValueError will be raised. If
|
not conform to PEP 3147/488 format, ValueError will be raised. If
|
||||||
sys.implementation.cache_tag is None then NotImplementedError is raised.
|
sys.implementation.cache_tag is None then NotImplementedError is raised.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def decode_source(source_bytes: ReadableBuffer) -> str:
|
def decode_source(source_bytes: ReadableBuffer) -> str:
|
||||||
|
@ -83,6 +85,7 @@ def spec_from_file_location(
|
||||||
import system.
|
import system.
|
||||||
|
|
||||||
The loader must take a spec as its only __init__() arg.
|
The loader must take a spec as its only __init__() arg.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@deprecated(
|
@deprecated(
|
||||||
|
@ -98,6 +101,7 @@ class WindowsRegistryFinder(importlib.abc.MetaPathFinder):
|
||||||
"""Find module named in the registry.
|
"""Find module named in the registry.
|
||||||
|
|
||||||
This method is deprecated. Use find_spec() instead.
|
This method is deprecated. Use find_spec() instead.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -123,7 +127,8 @@ class PathFinder(importlib.abc.MetaPathFinder):
|
||||||
if sys.version_info >= (3, 10):
|
if sys.version_info >= (3, 10):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def find_distributions(context: DistributionFinder.Context = ...) -> Iterable[PathDistribution]:
|
def find_distributions(context: DistributionFinder.Context = ...) -> Iterable[PathDistribution]:
|
||||||
"""Find distributions.
|
"""
|
||||||
|
Find distributions.
|
||||||
|
|
||||||
Return an iterable of all Distribution instances capable of
|
Return an iterable of all Distribution instances capable of
|
||||||
loading the metadata for packages matching ``context.name``
|
loading the metadata for packages matching ``context.name``
|
||||||
|
@ -133,7 +138,8 @@ class PathFinder(importlib.abc.MetaPathFinder):
|
||||||
else:
|
else:
|
||||||
@classmethod
|
@classmethod
|
||||||
def find_distributions(cls, context: DistributionFinder.Context = ...) -> Iterable[PathDistribution]:
|
def find_distributions(cls, context: DistributionFinder.Context = ...) -> Iterable[PathDistribution]:
|
||||||
"""Find distributions.
|
"""
|
||||||
|
Find distributions.
|
||||||
|
|
||||||
Return an iterable of all Distribution instances capable of
|
Return an iterable of all Distribution instances capable of
|
||||||
loading the metadata for packages matching ``context.name``
|
loading the metadata for packages matching ``context.name``
|
||||||
|
@ -156,6 +162,7 @@ class PathFinder(importlib.abc.MetaPathFinder):
|
||||||
sys.path_importer_cache.
|
sys.path_importer_cache.
|
||||||
|
|
||||||
This method is deprecated. Use find_spec() instead.
|
This method is deprecated. Use find_spec() instead.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
SOURCE_SUFFIXES: list[str]
|
SOURCE_SUFFIXES: list[str]
|
||||||
|
@ -169,6 +176,7 @@ class FileFinder(importlib.abc.PathEntryFinder):
|
||||||
|
|
||||||
Interactions with the file system are cached for performance, being
|
Interactions with the file system are cached for performance, being
|
||||||
refreshed when the directory the finder is handling has been modified.
|
refreshed when the directory the finder is handling has been modified.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
path: str
|
path: str
|
||||||
|
@ -188,6 +196,7 @@ class FileFinder(importlib.abc.PathEntryFinder):
|
||||||
|
|
||||||
If the path called on the closure is not a directory, ImportError is
|
If the path called on the closure is not a directory, ImportError is
|
||||||
raised.
|
raised.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class _LoaderBasics:
|
class _LoaderBasics:
|
||||||
|
@ -252,6 +261,7 @@ class SourceLoader(_LoaderBasics):
|
||||||
|
|
||||||
Reading of bytecode requires path_stats to be implemented. To write
|
Reading of bytecode requires path_stats to be implemented. To write
|
||||||
bytecode, set_data must also be implemented.
|
bytecode, set_data must also be implemented.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class FileLoader:
|
class FileLoader:
|
||||||
|
@ -276,6 +286,7 @@ class FileLoader:
|
||||||
"""Load a module from a file.
|
"""Load a module from a file.
|
||||||
|
|
||||||
This method is deprecated. Use exec_module() instead.
|
This method is deprecated. Use exec_module() instead.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if sys.version_info >= (3, 10):
|
if sys.version_info >= (3, 10):
|
||||||
def get_resource_reader(self, name: str | None = None) -> importlib.readers.FileReader: ...
|
def get_resource_reader(self, name: str | None = None) -> importlib.readers.FileReader: ...
|
||||||
|
@ -318,6 +329,7 @@ class ExtensionFileLoader(FileLoader, _LoaderBasics, importlib.abc.ExecutionLoad
|
||||||
"""Loader for extension modules.
|
"""Loader for extension modules.
|
||||||
|
|
||||||
The constructor is designed to work with FileFinder.
|
The constructor is designed to work with FileFinder.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, name: str, path: str) -> None: ...
|
def __init__(self, name: str, path: str) -> None: ...
|
||||||
|
@ -356,6 +368,7 @@ if sys.version_info >= (3, 11):
|
||||||
"""Load a namespace module.
|
"""Load a namespace module.
|
||||||
|
|
||||||
This method is deprecated. Use exec_module() instead.
|
This method is deprecated. Use exec_module() instead.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_resource_reader(self, module: types.ModuleType) -> importlib.readers.NamespaceReader: ...
|
def get_resource_reader(self, module: types.ModuleType) -> importlib.readers.NamespaceReader: ...
|
||||||
|
@ -366,6 +379,7 @@ if sys.version_info >= (3, 11):
|
||||||
"""Return repr for the module.
|
"""Return repr for the module.
|
||||||
|
|
||||||
The method is deprecated. The import machinery does the job itself.
|
The method is deprecated. The import machinery does the job itself.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_NamespaceLoader = NamespaceLoader
|
_NamespaceLoader = NamespaceLoader
|
||||||
|
@ -386,6 +400,7 @@ else:
|
||||||
"""Load a namespace module.
|
"""Load a namespace module.
|
||||||
|
|
||||||
This method is deprecated. Use exec_module() instead.
|
This method is deprecated. Use exec_module() instead.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if sys.version_info >= (3, 10):
|
if sys.version_info >= (3, 10):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -394,6 +409,7 @@ else:
|
||||||
"""Return repr for the module.
|
"""Return repr for the module.
|
||||||
|
|
||||||
The method is deprecated. The import machinery does the job itself.
|
The method is deprecated. The import machinery does the job itself.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_resource_reader(self, module: types.ModuleType) -> importlib.readers.NamespaceReader: ...
|
def get_resource_reader(self, module: types.ModuleType) -> importlib.readers.NamespaceReader: ...
|
||||||
|
@ -404,6 +420,7 @@ else:
|
||||||
"""Return repr for the module.
|
"""Return repr for the module.
|
||||||
|
|
||||||
The method is deprecated. The import machinery does the job itself.
|
The method is deprecated. The import machinery does the job itself.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if sys.version_info >= (3, 13):
|
if sys.version_info >= (3, 13):
|
||||||
|
|
|
@ -4,9 +4,11 @@ The 'interpreters' module provides a more convenient interface.
|
||||||
|
|
||||||
import types
|
import types
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from typing import Any, Final, Literal, SupportsIndex
|
from typing import Any, Final, Literal, SupportsIndex, TypeVar
|
||||||
from typing_extensions import TypeAlias
|
from typing_extensions import TypeAlias
|
||||||
|
|
||||||
|
_R = TypeVar("_R")
|
||||||
|
|
||||||
_Configs: TypeAlias = Literal["default", "isolated", "legacy", "empty", ""]
|
_Configs: TypeAlias = Literal["default", "isolated", "legacy", "empty", ""]
|
||||||
_SharedDict: TypeAlias = dict[str, Any] # many objects can be shared
|
_SharedDict: TypeAlias = dict[str, Any] # many objects can be shared
|
||||||
|
|
||||||
|
@ -88,7 +90,7 @@ def get_config(id: SupportsIndex, *, restrict: bool = False) -> types.SimpleName
|
||||||
Return a representation of the config used to initialize the interpreter.
|
Return a representation of the config used to initialize the interpreter.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def whence(id: SupportsIndex) -> int:
|
def whence(id: SupportsIndex) -> _Whence:
|
||||||
"""whence(id) -> int
|
"""whence(id) -> int
|
||||||
|
|
||||||
Return an identifier for where the interpreter was created.
|
Return an identifier for where the interpreter was created.
|
||||||
|
@ -120,12 +122,12 @@ def exec(
|
||||||
|
|
||||||
def call(
|
def call(
|
||||||
id: SupportsIndex,
|
id: SupportsIndex,
|
||||||
callable: Callable[..., object],
|
callable: Callable[..., _R],
|
||||||
args: tuple[object, ...] | None = None,
|
args: tuple[object, ...] | None = None,
|
||||||
kwargs: dict[str, object] | None = None,
|
kwargs: dict[str, object] | None = None,
|
||||||
*,
|
*,
|
||||||
restrict: bool = False,
|
restrict: bool = False,
|
||||||
) -> object:
|
) -> tuple[_R, types.SimpleNamespace]:
|
||||||
"""call(id, callable, args=None, kwargs=None, *, restrict=False)
|
"""call(id, callable, args=None, kwargs=None, *, restrict=False)
|
||||||
|
|
||||||
Call the provided object in the identified interpreter.
|
Call the provided object in the identified interpreter.
|
||||||
|
@ -182,6 +184,7 @@ def capture_exception(exc: BaseException | None = None) -> types.SimpleNamespace
|
||||||
The returned snapshot is the same as what _interpreters.exec() returns.
|
The returned snapshot is the same as what _interpreters.exec() returns.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
_Whence: TypeAlias = Literal[0, 1, 2, 3, 4, 5]
|
||||||
WHENCE_UNKNOWN: Final = 0
|
WHENCE_UNKNOWN: Final = 0
|
||||||
WHENCE_RUNTIME: Final = 1
|
WHENCE_RUNTIME: Final = 1
|
||||||
WHENCE_LEGACY_CAPI: Final = 2
|
WHENCE_LEGACY_CAPI: Final = 2
|
||||||
|
|
|
@ -82,7 +82,7 @@ def encode_basestring_ascii(s: str, /) -> str:
|
||||||
Return an ASCII-only JSON representation of a Python string
|
Return an ASCII-only JSON representation of a Python string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def scanstring(string: str, end: int, strict: bool = ...) -> tuple[str, int]:
|
def scanstring(string: str, end: int, strict: bool = True) -> tuple[str, int]:
|
||||||
"""scanstring(string, end, strict=True) -> (string, end)
|
"""scanstring(string, end, strict=True) -> (string, end)
|
||||||
|
|
||||||
Scan the string s for a JSON string. End is the index of the
|
Scan the string s for a JSON string. End is the index of the
|
||||||
|
|
|
@ -11,7 +11,7 @@ import sys
|
||||||
from _typeshed import SupportsGetItem
|
from _typeshed import SupportsGetItem
|
||||||
from collections.abc import Callable, Container, Iterable, MutableMapping, MutableSequence, Sequence
|
from collections.abc import Callable, Container, Iterable, MutableMapping, MutableSequence, Sequence
|
||||||
from operator import attrgetter as attrgetter, itemgetter as itemgetter, methodcaller as methodcaller
|
from operator import attrgetter as attrgetter, itemgetter as itemgetter, methodcaller as methodcaller
|
||||||
from typing import Any, AnyStr, Protocol, SupportsAbs, SupportsIndex, TypeVar, overload
|
from typing import Any, AnyStr, Protocol, SupportsAbs, SupportsIndex, TypeVar, overload, type_check_only
|
||||||
from typing_extensions import ParamSpec, TypeAlias, TypeIs
|
from typing_extensions import ParamSpec, TypeAlias, TypeIs
|
||||||
|
|
||||||
_R = TypeVar("_R")
|
_R = TypeVar("_R")
|
||||||
|
@ -25,12 +25,15 @@ _P = ParamSpec("_P")
|
||||||
# operators can be overloaded to return an arbitrary object. For example,
|
# operators can be overloaded to return an arbitrary object. For example,
|
||||||
# the numpy.array comparison dunders return another numpy.array.
|
# the numpy.array comparison dunders return another numpy.array.
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _SupportsDunderLT(Protocol):
|
class _SupportsDunderLT(Protocol):
|
||||||
def __lt__(self, other: Any, /) -> Any: ...
|
def __lt__(self, other: Any, /) -> Any: ...
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _SupportsDunderGT(Protocol):
|
class _SupportsDunderGT(Protocol):
|
||||||
def __gt__(self, other: Any, /) -> Any: ...
|
def __gt__(self, other: Any, /) -> Any: ...
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _SupportsDunderLE(Protocol):
|
class _SupportsDunderLE(Protocol):
|
||||||
def __le__(self, other: Any, /) -> Any: ...
|
def __le__(self, other: Any, /) -> Any: ...
|
||||||
|
|
||||||
|
@ -39,12 +42,15 @@ class _SupportsDunderGE(Protocol):
|
||||||
|
|
||||||
_SupportsComparison: TypeAlias = _SupportsDunderLE | _SupportsDunderGE | _SupportsDunderGT | _SupportsDunderLT
|
_SupportsComparison: TypeAlias = _SupportsDunderLE | _SupportsDunderGE | _SupportsDunderGT | _SupportsDunderLT
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _SupportsInversion(Protocol[_T_co]):
|
class _SupportsInversion(Protocol[_T_co]):
|
||||||
def __invert__(self) -> _T_co: ...
|
def __invert__(self) -> _T_co: ...
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _SupportsNeg(Protocol[_T_co]):
|
class _SupportsNeg(Protocol[_T_co]):
|
||||||
def __neg__(self) -> _T_co: ...
|
def __neg__(self) -> _T_co: ...
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _SupportsPos(Protocol[_T_co]):
|
class _SupportsPos(Protocol[_T_co]):
|
||||||
def __pos__(self) -> _T_co: ...
|
def __pos__(self) -> _T_co: ...
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,8 @@ def _check_for_unavailable_sdk(_config_vars: dict[str, str]) -> dict[str, str]:
|
||||||
"""Remove references to any SDKs not available"""
|
"""Remove references to any SDKs not available"""
|
||||||
|
|
||||||
def compiler_fixup(compiler_so: Iterable[str], cc_args: Sequence[str]) -> list[str]:
|
def compiler_fixup(compiler_so: Iterable[str], cc_args: Sequence[str]) -> list[str]:
|
||||||
"""This function will strip '-isysroot PATH' and '-arch ARCH' from the
|
"""
|
||||||
|
This function will strip '-isysroot PATH' and '-arch ARCH' from the
|
||||||
compile flags if the user has specified one them in extra_compile_flags.
|
compile flags if the user has specified one them in extra_compile_flags.
|
||||||
|
|
||||||
This is needed because '-arch ARCH' adds another architecture to the
|
This is needed because '-arch ARCH' adds another architecture to the
|
||||||
|
|
|
@ -16,8 +16,9 @@ from sqlite3 import (
|
||||||
ProgrammingError as ProgrammingError,
|
ProgrammingError as ProgrammingError,
|
||||||
Row as Row,
|
Row as Row,
|
||||||
Warning as Warning,
|
Warning as Warning,
|
||||||
|
_IsolationLevel,
|
||||||
)
|
)
|
||||||
from typing import Any, Final, Literal, TypeVar, overload
|
from typing import Any, Final, TypeVar, overload
|
||||||
from typing_extensions import TypeAlias
|
from typing_extensions import TypeAlias
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
|
@ -228,7 +229,7 @@ if sys.version_info >= (3, 12):
|
||||||
database: StrOrBytesPath,
|
database: StrOrBytesPath,
|
||||||
timeout: float = 5.0,
|
timeout: float = 5.0,
|
||||||
detect_types: int = 0,
|
detect_types: int = 0,
|
||||||
isolation_level: Literal["DEFERRED", "EXCLUSIVE", "IMMEDIATE"] | None = "DEFERRED",
|
isolation_level: _IsolationLevel = "DEFERRED",
|
||||||
check_same_thread: bool = True,
|
check_same_thread: bool = True,
|
||||||
cached_statements: int = 128,
|
cached_statements: int = 128,
|
||||||
uri: bool = False,
|
uri: bool = False,
|
||||||
|
@ -251,7 +252,7 @@ if sys.version_info >= (3, 12):
|
||||||
database: StrOrBytesPath,
|
database: StrOrBytesPath,
|
||||||
timeout: float,
|
timeout: float,
|
||||||
detect_types: int,
|
detect_types: int,
|
||||||
isolation_level: Literal["DEFERRED", "EXCLUSIVE", "IMMEDIATE"] | None,
|
isolation_level: _IsolationLevel,
|
||||||
check_same_thread: bool,
|
check_same_thread: bool,
|
||||||
factory: type[_ConnectionT],
|
factory: type[_ConnectionT],
|
||||||
cached_statements: int = 128,
|
cached_statements: int = 128,
|
||||||
|
@ -264,7 +265,7 @@ if sys.version_info >= (3, 12):
|
||||||
database: StrOrBytesPath,
|
database: StrOrBytesPath,
|
||||||
timeout: float = 5.0,
|
timeout: float = 5.0,
|
||||||
detect_types: int = 0,
|
detect_types: int = 0,
|
||||||
isolation_level: Literal["DEFERRED", "EXCLUSIVE", "IMMEDIATE"] | None = "DEFERRED",
|
isolation_level: _IsolationLevel = "DEFERRED",
|
||||||
check_same_thread: bool = True,
|
check_same_thread: bool = True,
|
||||||
*,
|
*,
|
||||||
factory: type[_ConnectionT],
|
factory: type[_ConnectionT],
|
||||||
|
@ -279,7 +280,7 @@ else:
|
||||||
database: StrOrBytesPath,
|
database: StrOrBytesPath,
|
||||||
timeout: float = 5.0,
|
timeout: float = 5.0,
|
||||||
detect_types: int = 0,
|
detect_types: int = 0,
|
||||||
isolation_level: Literal["DEFERRED", "EXCLUSIVE", "IMMEDIATE"] | None = "DEFERRED",
|
isolation_level: _IsolationLevel = "DEFERRED",
|
||||||
check_same_thread: bool = True,
|
check_same_thread: bool = True,
|
||||||
cached_statements: int = 128,
|
cached_statements: int = 128,
|
||||||
uri: bool = False,
|
uri: bool = False,
|
||||||
|
@ -295,7 +296,7 @@ else:
|
||||||
database: StrOrBytesPath,
|
database: StrOrBytesPath,
|
||||||
timeout: float,
|
timeout: float,
|
||||||
detect_types: int,
|
detect_types: int,
|
||||||
isolation_level: Literal["DEFERRED", "EXCLUSIVE", "IMMEDIATE"] | None,
|
isolation_level: _IsolationLevel,
|
||||||
check_same_thread: bool,
|
check_same_thread: bool,
|
||||||
factory: type[_ConnectionT],
|
factory: type[_ConnectionT],
|
||||||
cached_statements: int = 128,
|
cached_statements: int = 128,
|
||||||
|
@ -306,7 +307,7 @@ else:
|
||||||
database: StrOrBytesPath,
|
database: StrOrBytesPath,
|
||||||
timeout: float = 5.0,
|
timeout: float = 5.0,
|
||||||
detect_types: int = 0,
|
detect_types: int = 0,
|
||||||
isolation_level: Literal["DEFERRED", "EXCLUSIVE", "IMMEDIATE"] | None = "DEFERRED",
|
isolation_level: _IsolationLevel = "DEFERRED",
|
||||||
check_same_thread: bool = True,
|
check_same_thread: bool = True,
|
||||||
*,
|
*,
|
||||||
factory: type[_ConnectionT],
|
factory: type[_ConnectionT],
|
||||||
|
|
|
@ -253,7 +253,7 @@ def start_new(function: Callable[[Unpack[_Ts]], object], args: tuple[Unpack[_Ts]
|
||||||
def start_new(function: Callable[..., object], args: tuple[Any, ...], kwargs: dict[str, Any], /) -> int: ...
|
def start_new(function: Callable[..., object], args: tuple[Any, ...], kwargs: dict[str, Any], /) -> int: ...
|
||||||
|
|
||||||
if sys.version_info >= (3, 10):
|
if sys.version_info >= (3, 10):
|
||||||
def interrupt_main(signum: signal.Signals = ..., /) -> None:
|
def interrupt_main(signum: signal.Signals = signal.SIGINT, /) -> None:
|
||||||
"""Simulate the arrival of the given signal in the main thread,
|
"""Simulate the arrival of the given signal in the main thread,
|
||||||
where the corresponding signal handler will be executed.
|
where the corresponding signal handler will be executed.
|
||||||
If *signum* is omitted, SIGINT is assumed.
|
If *signum* is omitted, SIGINT is assumed.
|
||||||
|
|
|
@ -131,7 +131,9 @@ if sys.version_info >= (3, 13):
|
||||||
use: str | None = None,
|
use: str | None = None,
|
||||||
/,
|
/,
|
||||||
):
|
):
|
||||||
"""wantTk
|
"""
|
||||||
|
|
||||||
|
wantTk
|
||||||
if false, then Tk_Init() doesn't get called
|
if false, then Tk_Init() doesn't get called
|
||||||
sync
|
sync
|
||||||
if true, then pass -sync to wish
|
if true, then pass -sync to wish
|
||||||
|
@ -151,7 +153,9 @@ else:
|
||||||
use: str | None = None,
|
use: str | None = None,
|
||||||
/,
|
/,
|
||||||
):
|
):
|
||||||
"""wantTk
|
"""
|
||||||
|
|
||||||
|
wantTk
|
||||||
if false, then Tk_Init() doesn't get called
|
if false, then Tk_Init() doesn't get called
|
||||||
sync
|
sync
|
||||||
if true, then pass -sync to wish
|
if true, then pass -sync to wish
|
||||||
|
|
|
@ -65,10 +65,10 @@ MaybeNone: TypeAlias = Any # stable
|
||||||
# In cases where the sentinel object is exported and can be used by user code,
|
# In cases where the sentinel object is exported and can be used by user code,
|
||||||
# a construct like this is better:
|
# a construct like this is better:
|
||||||
#
|
#
|
||||||
# _SentinelType = NewType("_SentinelType", object)
|
# _SentinelType = NewType("_SentinelType", object) # does not exist at runtime
|
||||||
# sentinel: _SentinelType
|
# sentinel: Final[_SentinelType]
|
||||||
# def foo(x: int | None | _SentinelType = ...) -> None: ...
|
# def foo(x: int | None | _SentinelType = ...) -> None: ...
|
||||||
sentinel: Any
|
sentinel: Any # stable
|
||||||
|
|
||||||
# stable
|
# stable
|
||||||
class IdentityFunction(Protocol):
|
class IdentityFunction(Protocol):
|
||||||
|
|
|
@ -81,6 +81,7 @@ class abstractclassmethod(classmethod[_T, _P, _R_co]):
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def my_abstract_classmethod(cls, ...):
|
def my_abstract_classmethod(cls, ...):
|
||||||
...
|
...
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__isabstractmethod__: Literal[True]
|
__isabstractmethod__: Literal[True]
|
||||||
|
@ -97,6 +98,7 @@ class abstractstaticmethod(staticmethod[_P, _R_co]):
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def my_abstract_staticmethod(...):
|
def my_abstract_staticmethod(...):
|
||||||
...
|
...
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__isabstractmethod__: Literal[True]
|
__isabstractmethod__: Literal[True]
|
||||||
|
@ -113,6 +115,7 @@ class abstractproperty(property):
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def my_abstract_property(self):
|
def my_abstract_property(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__isabstractmethod__: Literal[True]
|
__isabstractmethod__: Literal[True]
|
||||||
|
|
|
@ -39,6 +39,7 @@ if sys.version_info >= (3, 14):
|
||||||
* owner: The owning object (module, class, or function).
|
* owner: The owning object (module, class, or function).
|
||||||
* is_argument: Does nothing, retained for compatibility.
|
* is_argument: Does nothing, retained for compatibility.
|
||||||
* is_class: True if the forward reference was created in class scope.
|
* is_class: True if the forward reference was created in class scope.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__forward_is_argument__: bool
|
__forward_is_argument__: bool
|
||||||
|
@ -132,6 +133,7 @@ if sys.version_info >= (3, 14):
|
||||||
class, or function that the __annotate__ function derives from). With the
|
class, or function that the __annotate__ function derives from). With the
|
||||||
FORWARDREF format, it is used to provide better evaluation capabilities
|
FORWARDREF format, it is used to provide better evaluation capabilities
|
||||||
on the generated ForwardRef objects.
|
on the generated ForwardRef objects.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -231,6 +233,7 @@ if sys.version_info >= (3, 14):
|
||||||
This is intended as a helper for tools that support the STRING format but do
|
This is intended as a helper for tools that support the STRING format but do
|
||||||
not have access to the code that originally produced the annotations. It uses
|
not have access to the code that originally produced the annotations. It uses
|
||||||
repr() for most objects.
|
repr() for most objects.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def annotations_to_string(annotations: SupportsItems[str, object]) -> dict[str, str]:
|
def annotations_to_string(annotations: SupportsItems[str, object]) -> dict[str, str]:
|
||||||
|
|
|
@ -65,7 +65,7 @@ import sys
|
||||||
from _typeshed import SupportsWrite, sentinel
|
from _typeshed import SupportsWrite, sentinel
|
||||||
from collections.abc import Callable, Generator, Iterable, Sequence
|
from collections.abc import Callable, Generator, Iterable, Sequence
|
||||||
from re import Pattern
|
from re import Pattern
|
||||||
from typing import IO, Any, ClassVar, Final, Generic, NoReturn, Protocol, TypeVar, overload
|
from typing import IO, Any, ClassVar, Final, Generic, NoReturn, Protocol, TypeVar, overload, type_check_only
|
||||||
from typing_extensions import Self, TypeAlias, deprecated
|
from typing_extensions import Self, TypeAlias, deprecated
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
@ -168,7 +168,8 @@ class _ActionsContainer:
|
||||||
version: str = ...,
|
version: str = ...,
|
||||||
**kwargs: Any,
|
**kwargs: Any,
|
||||||
) -> Action:
|
) -> Action:
|
||||||
"""add_argument(dest, ..., name=value, ...)
|
"""
|
||||||
|
add_argument(dest, ..., name=value, ...)
|
||||||
add_argument(option_string, option_string, ..., name=value, ...)
|
add_argument(option_string, option_string, ..., name=value, ...)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -193,6 +194,7 @@ class _ActionsContainer:
|
||||||
def _handle_conflict_error(self, action: Action, conflicting_actions: Iterable[tuple[str, Action]]) -> NoReturn: ...
|
def _handle_conflict_error(self, action: Action, conflicting_actions: Iterable[tuple[str, Action]]) -> NoReturn: ...
|
||||||
def _handle_conflict_resolve(self, action: Action, conflicting_actions: Iterable[tuple[str, Action]]) -> None: ...
|
def _handle_conflict_resolve(self, action: Action, conflicting_actions: Iterable[tuple[str, Action]]) -> None: ...
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _FormatterClass(Protocol):
|
class _FormatterClass(Protocol):
|
||||||
def __call__(self, *, prog: str) -> HelpFormatter: ...
|
def __call__(self, *, prog: str) -> HelpFormatter: ...
|
||||||
|
|
||||||
|
@ -401,7 +403,7 @@ class HelpFormatter:
|
||||||
|
|
||||||
if sys.version_info >= (3, 14):
|
if sys.version_info >= (3, 14):
|
||||||
def __init__(
|
def __init__(
|
||||||
self, prog: str, indent_increment: int = 2, max_help_position: int = 24, width: int | None = None, color: bool = False
|
self, prog: str, indent_increment: int = 2, max_help_position: int = 24, width: int | None = None, color: bool = True
|
||||||
) -> None: ...
|
) -> None: ...
|
||||||
else:
|
else:
|
||||||
def __init__(
|
def __init__(
|
||||||
|
|
|
@ -2170,7 +2170,8 @@ if sys.version_info >= (3, 13):
|
||||||
feature_version: None | int | tuple[int, int] = None,
|
feature_version: None | int | tuple[int, int] = None,
|
||||||
optimize: Literal[-1, 0, 1, 2] = -1,
|
optimize: Literal[-1, 0, 1, 2] = -1,
|
||||||
) -> Module:
|
) -> Module:
|
||||||
"""Parse the source into an AST node.
|
"""
|
||||||
|
Parse the source into an AST node.
|
||||||
Equivalent to compile(source, filename, mode, PyCF_ONLY_AST).
|
Equivalent to compile(source, filename, mode, PyCF_ONLY_AST).
|
||||||
Pass type_comments=True to get back type comments where the syntax allows.
|
Pass type_comments=True to get back type comments where the syntax allows.
|
||||||
"""
|
"""
|
||||||
|
@ -2253,7 +2254,8 @@ else:
|
||||||
type_comments: bool = False,
|
type_comments: bool = False,
|
||||||
feature_version: None | int | tuple[int, int] = None,
|
feature_version: None | int | tuple[int, int] = None,
|
||||||
) -> Module:
|
) -> Module:
|
||||||
"""Parse the source into an AST node.
|
"""
|
||||||
|
Parse the source into an AST node.
|
||||||
Equivalent to compile(source, filename, mode, PyCF_ONLY_AST).
|
Equivalent to compile(source, filename, mode, PyCF_ONLY_AST).
|
||||||
Pass type_comments=True to get back type comments where the syntax allows.
|
Pass type_comments=True to get back type comments where the syntax allows.
|
||||||
"""
|
"""
|
||||||
|
@ -2320,7 +2322,8 @@ else:
|
||||||
) -> mod: ...
|
) -> mod: ...
|
||||||
|
|
||||||
def literal_eval(node_or_string: str | AST) -> Any:
|
def literal_eval(node_or_string: str | AST) -> Any:
|
||||||
"""Evaluate an expression node or a string containing only a Python
|
"""
|
||||||
|
Evaluate an expression node or a string containing only a Python
|
||||||
expression. The string or node provided may only consist of the following
|
expression. The string or node provided may only consist of the following
|
||||||
Python literal structures: strings, bytes, numbers, tuples, lists, dicts,
|
Python literal structures: strings, bytes, numbers, tuples, lists, dicts,
|
||||||
sets, booleans, and None.
|
sets, booleans, and None.
|
||||||
|
@ -2337,7 +2340,8 @@ if sys.version_info >= (3, 13):
|
||||||
indent: int | str | None = None,
|
indent: int | str | None = None,
|
||||||
show_empty: bool = False,
|
show_empty: bool = False,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Return a formatted dump of the tree in node. This is mainly useful for
|
"""
|
||||||
|
Return a formatted dump of the tree in node. This is mainly useful for
|
||||||
debugging purposes. If annotate_fields is true (by default),
|
debugging purposes. If annotate_fields is true (by default),
|
||||||
the returned string will show the names and the values for fields.
|
the returned string will show the names and the values for fields.
|
||||||
If annotate_fields is false, the result string will be more compact by
|
If annotate_fields is false, the result string will be more compact by
|
||||||
|
@ -2354,7 +2358,8 @@ else:
|
||||||
def dump(
|
def dump(
|
||||||
node: AST, annotate_fields: bool = True, include_attributes: bool = False, *, indent: int | str | None = None
|
node: AST, annotate_fields: bool = True, include_attributes: bool = False, *, indent: int | str | None = None
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Return a formatted dump of the tree in node. This is mainly useful for
|
"""
|
||||||
|
Return a formatted dump of the tree in node. This is mainly useful for
|
||||||
debugging purposes. If annotate_fields is true (by default),
|
debugging purposes. If annotate_fields is true (by default),
|
||||||
the returned string will show the names and the values for fields.
|
the returned string will show the names and the values for fields.
|
||||||
If annotate_fields is false, the result string will be more compact by
|
If annotate_fields is false, the result string will be more compact by
|
||||||
|
@ -2366,12 +2371,14 @@ else:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def copy_location(new_node: _T, old_node: AST) -> _T:
|
def copy_location(new_node: _T, old_node: AST) -> _T:
|
||||||
"""Copy source location (`lineno`, `col_offset`, `end_lineno`, and `end_col_offset`
|
"""
|
||||||
|
Copy source location (`lineno`, `col_offset`, `end_lineno`, and `end_col_offset`
|
||||||
attributes) from *old_node* to *new_node* if possible, and return *new_node*.
|
attributes) from *old_node* to *new_node* if possible, and return *new_node*.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def fix_missing_locations(node: _T) -> _T:
|
def fix_missing_locations(node: _T) -> _T:
|
||||||
"""When you compile a node tree with compile(), the compiler expects lineno and
|
"""
|
||||||
|
When you compile a node tree with compile(), the compiler expects lineno and
|
||||||
col_offset attributes for every node that supports them. This is rather
|
col_offset attributes for every node that supports them. This is rather
|
||||||
tedious to fill in for generated nodes, so this helper adds these attributes
|
tedious to fill in for generated nodes, so this helper adds these attributes
|
||||||
recursively where not already set, by setting them to the values of the
|
recursively where not already set, by setting them to the values of the
|
||||||
|
@ -2379,23 +2386,27 @@ def fix_missing_locations(node: _T) -> _T:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def increment_lineno(node: _T, n: int = 1) -> _T:
|
def increment_lineno(node: _T, n: int = 1) -> _T:
|
||||||
"""Increment the line number and end line number of each node in the tree
|
"""
|
||||||
|
Increment the line number and end line number of each node in the tree
|
||||||
starting at *node* by *n*. This is useful to "move code" to a different
|
starting at *node* by *n*. This is useful to "move code" to a different
|
||||||
location in a file.
|
location in a file.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def iter_fields(node: AST) -> Iterator[tuple[str, Any]]:
|
def iter_fields(node: AST) -> Iterator[tuple[str, Any]]:
|
||||||
"""Yield a tuple of ``(fieldname, value)`` for each field in ``node._fields``
|
"""
|
||||||
|
Yield a tuple of ``(fieldname, value)`` for each field in ``node._fields``
|
||||||
that is present on *node*.
|
that is present on *node*.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def iter_child_nodes(node: AST) -> Iterator[AST]:
|
def iter_child_nodes(node: AST) -> Iterator[AST]:
|
||||||
"""Yield all direct child nodes of *node*, that is, all fields that are nodes
|
"""
|
||||||
|
Yield all direct child nodes of *node*, that is, all fields that are nodes
|
||||||
and all items of fields that are lists of nodes.
|
and all items of fields that are lists of nodes.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_docstring(node: AsyncFunctionDef | FunctionDef | ClassDef | Module, clean: bool = True) -> str | None:
|
def get_docstring(node: AsyncFunctionDef | FunctionDef | ClassDef | Module, clean: bool = True) -> str | None:
|
||||||
"""Return the docstring for the given node or None if no docstring can
|
"""
|
||||||
|
Return the docstring for the given node or None if no docstring can
|
||||||
be found. If the node provided does not have docstrings a TypeError
|
be found. If the node provided does not have docstrings a TypeError
|
||||||
will be raised.
|
will be raised.
|
||||||
|
|
||||||
|
@ -2414,7 +2425,8 @@ def get_source_segment(source: str, node: AST, *, padded: bool = False) -> str |
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def walk(node: AST) -> Iterator[AST]:
|
def walk(node: AST) -> Iterator[AST]:
|
||||||
"""Recursively yield all descendant nodes in the tree starting at *node*
|
"""
|
||||||
|
Recursively yield all descendant nodes in the tree starting at *node*
|
||||||
(including *node* itself), in no specified order. This is useful if you
|
(including *node* itself), in no specified order. This is useful if you
|
||||||
only want to modify nodes in place and don't care about the context.
|
only want to modify nodes in place and don't care about the context.
|
||||||
"""
|
"""
|
||||||
|
@ -2431,7 +2443,8 @@ if sys.version_info >= (3, 14):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class NodeVisitor:
|
class NodeVisitor:
|
||||||
"""A node visitor base class that walks the abstract syntax tree and calls a
|
"""
|
||||||
|
A node visitor base class that walks the abstract syntax tree and calls a
|
||||||
visitor function for every node found. This function may return a value
|
visitor function for every node found. This function may return a value
|
||||||
which is forwarded by the `visit` method.
|
which is forwarded by the `visit` method.
|
||||||
|
|
||||||
|
@ -2595,7 +2608,8 @@ class NodeVisitor:
|
||||||
def visit_Ellipsis(self, node: Ellipsis) -> Any: ... # type: ignore[deprecated]
|
def visit_Ellipsis(self, node: Ellipsis) -> Any: ... # type: ignore[deprecated]
|
||||||
|
|
||||||
class NodeTransformer(NodeVisitor):
|
class NodeTransformer(NodeVisitor):
|
||||||
"""A :class:`NodeVisitor` subclass that walks the abstract syntax tree and
|
"""
|
||||||
|
A :class:`NodeVisitor` subclass that walks the abstract syntax tree and
|
||||||
allows modification of nodes.
|
allows modification of nodes.
|
||||||
|
|
||||||
The `NodeTransformer` will walk the AST and use the return value of the
|
The `NodeTransformer` will walk the AST and use the return value of the
|
||||||
|
|
|
@ -43,14 +43,11 @@ if sys.platform == "win32":
|
||||||
"Server", # from base_events
|
"Server", # from base_events
|
||||||
"iscoroutinefunction", # from coroutines
|
"iscoroutinefunction", # from coroutines
|
||||||
"iscoroutine", # from coroutines
|
"iscoroutine", # from coroutines
|
||||||
"_AbstractEventLoopPolicy", # from events
|
|
||||||
"AbstractEventLoop", # from events
|
"AbstractEventLoop", # from events
|
||||||
"AbstractServer", # from events
|
"AbstractServer", # from events
|
||||||
"Handle", # from events
|
"Handle", # from events
|
||||||
"TimerHandle", # from events
|
"TimerHandle", # from events
|
||||||
"_get_event_loop_policy", # from events
|
|
||||||
"get_event_loop_policy", # from events
|
"get_event_loop_policy", # from events
|
||||||
"_set_event_loop_policy", # from events
|
|
||||||
"set_event_loop_policy", # from events
|
"set_event_loop_policy", # from events
|
||||||
"get_event_loop", # from events
|
"get_event_loop", # from events
|
||||||
"set_event_loop", # from events
|
"set_event_loop", # from events
|
||||||
|
@ -519,14 +516,11 @@ else:
|
||||||
"Server", # from base_events
|
"Server", # from base_events
|
||||||
"iscoroutinefunction", # from coroutines
|
"iscoroutinefunction", # from coroutines
|
||||||
"iscoroutine", # from coroutines
|
"iscoroutine", # from coroutines
|
||||||
"_AbstractEventLoopPolicy", # from events
|
|
||||||
"AbstractEventLoop", # from events
|
"AbstractEventLoop", # from events
|
||||||
"AbstractServer", # from events
|
"AbstractServer", # from events
|
||||||
"Handle", # from events
|
"Handle", # from events
|
||||||
"TimerHandle", # from events
|
"TimerHandle", # from events
|
||||||
"_get_event_loop_policy", # from events
|
|
||||||
"get_event_loop_policy", # from events
|
"get_event_loop_policy", # from events
|
||||||
"_set_event_loop_policy", # from events
|
|
||||||
"set_event_loop_policy", # from events
|
"set_event_loop_policy", # from events
|
||||||
"get_event_loop", # from events
|
"get_event_loop", # from events
|
||||||
"set_event_loop", # from events
|
"set_event_loop", # from events
|
||||||
|
@ -612,7 +606,6 @@ else:
|
||||||
"DatagramTransport", # from transports
|
"DatagramTransport", # from transports
|
||||||
"SubprocessTransport", # from transports
|
"SubprocessTransport", # from transports
|
||||||
"SelectorEventLoop", # from unix_events
|
"SelectorEventLoop", # from unix_events
|
||||||
"_DefaultEventLoopPolicy", # from unix_events
|
|
||||||
"EventLoop", # from unix_events
|
"EventLoop", # from unix_events
|
||||||
)
|
)
|
||||||
elif sys.version_info >= (3, 13):
|
elif sys.version_info >= (3, 13):
|
||||||
|
|
|
@ -1,20 +1,25 @@
|
||||||
|
from _asyncio import Future
|
||||||
from collections.abc import Callable, Sequence
|
from collections.abc import Callable, Sequence
|
||||||
from contextvars import Context
|
from contextvars import Context
|
||||||
from typing import Any, Final
|
from typing import Any, Final
|
||||||
|
from typing_extensions import TypeIs
|
||||||
|
|
||||||
from . import futures
|
from . import futures
|
||||||
|
|
||||||
__all__ = ()
|
__all__ = ()
|
||||||
|
|
||||||
# asyncio defines 'isfuture()' in base_futures.py and re-imports it in futures.py
|
|
||||||
# but it leads to circular import error in pytype tool.
|
|
||||||
# That's why the import order is reversed.
|
|
||||||
from .futures import isfuture as isfuture
|
|
||||||
|
|
||||||
_PENDING: Final = "PENDING" # undocumented
|
_PENDING: Final = "PENDING" # undocumented
|
||||||
_CANCELLED: Final = "CANCELLED" # undocumented
|
_CANCELLED: Final = "CANCELLED" # undocumented
|
||||||
_FINISHED: Final = "FINISHED" # undocumented
|
_FINISHED: Final = "FINISHED" # undocumented
|
||||||
|
|
||||||
|
def isfuture(obj: object) -> TypeIs[Future[Any]]:
|
||||||
|
"""Check for a Future.
|
||||||
|
|
||||||
|
This returns True when obj is a Future instance or is advertising
|
||||||
|
itself as duck-type compatible by setting _asyncio_future_blocking.
|
||||||
|
See comment in Future for more details.
|
||||||
|
"""
|
||||||
|
|
||||||
def _format_callbacks(cb: Sequence[tuple[Callable[[futures.Future[Any]], None], Context]]) -> str: # undocumented
|
def _format_callbacks(cb: Sequence[tuple[Callable[[futures.Future[Any]], None], Context]]) -> str: # undocumented
|
||||||
"""helper function for Future.__repr__"""
|
"""helper function for Future.__repr__"""
|
||||||
|
|
||||||
|
|
|
@ -30,14 +30,11 @@ if sys.version_info < (3, 14):
|
||||||
# Keep asyncio.__all__ updated with any changes to __all__ here
|
# Keep asyncio.__all__ updated with any changes to __all__ here
|
||||||
if sys.version_info >= (3, 14):
|
if sys.version_info >= (3, 14):
|
||||||
__all__ = (
|
__all__ = (
|
||||||
"_AbstractEventLoopPolicy",
|
|
||||||
"AbstractEventLoop",
|
"AbstractEventLoop",
|
||||||
"AbstractServer",
|
"AbstractServer",
|
||||||
"Handle",
|
"Handle",
|
||||||
"TimerHandle",
|
"TimerHandle",
|
||||||
"_get_event_loop_policy",
|
|
||||||
"get_event_loop_policy",
|
"get_event_loop_policy",
|
||||||
"_set_event_loop_policy",
|
|
||||||
"set_event_loop_policy",
|
"set_event_loop_policy",
|
||||||
"get_event_loop",
|
"get_event_loop",
|
||||||
"set_event_loop",
|
"set_event_loop",
|
||||||
|
|
|
@ -43,7 +43,8 @@ class SendfileNotAvailableError(RuntimeError):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class IncompleteReadError(EOFError):
|
class IncompleteReadError(EOFError):
|
||||||
"""Incomplete read error. Attributes:
|
"""
|
||||||
|
Incomplete read error. Attributes:
|
||||||
|
|
||||||
- partial: read bytes string before the end of stream was reached
|
- partial: read bytes string before the end of stream was reached
|
||||||
- expected: total number of expected bytes (or None if unknown)
|
- expected: total number of expected bytes (or None if unknown)
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
import sys
|
import sys
|
||||||
from _asyncio import Future as Future
|
from _asyncio import Future as Future
|
||||||
from concurrent.futures._base import Future as _ConcurrentFuture
|
from concurrent.futures._base import Future as _ConcurrentFuture
|
||||||
from typing import Any, TypeVar
|
from typing import TypeVar
|
||||||
from typing_extensions import TypeIs
|
|
||||||
|
|
||||||
|
from .base_futures import isfuture as isfuture
|
||||||
from .events import AbstractEventLoop
|
from .events import AbstractEventLoop
|
||||||
|
|
||||||
# Keep asyncio.__all__ updated with any changes to __all__ here
|
# Keep asyncio.__all__ updated with any changes to __all__ here
|
||||||
|
@ -18,16 +18,5 @@ else:
|
||||||
|
|
||||||
_T = TypeVar("_T")
|
_T = TypeVar("_T")
|
||||||
|
|
||||||
# asyncio defines 'isfuture()' in base_futures.py and re-imports it in futures.py
|
|
||||||
# but it leads to circular import error in pytype tool.
|
|
||||||
# That's why the import order is reversed.
|
|
||||||
def isfuture(obj: object) -> TypeIs[Future[Any]]:
|
|
||||||
"""Check for a Future.
|
|
||||||
|
|
||||||
This returns True when obj is a Future instance or is advertising
|
|
||||||
itself as duck-type compatible by setting _asyncio_future_blocking.
|
|
||||||
See comment in Future for more details.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def wrap_future(future: _ConcurrentFuture[_T] | Future[_T], *, loop: AbstractEventLoop | None = None) -> Future[_T]:
|
def wrap_future(future: _ConcurrentFuture[_T] | Future[_T], *, loop: AbstractEventLoop | None = None) -> Future[_T]:
|
||||||
"""Wrap concurrent.futures.Future object."""
|
"""Wrap concurrent.futures.Future object."""
|
||||||
|
|
|
@ -80,6 +80,7 @@ class Lock(_ContextManagerMixin, _LoopBoundMixin):
|
||||||
else:
|
else:
|
||||||
# lock is acquired
|
# lock is acquired
|
||||||
...
|
...
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_waiters: deque[Future[Any]] | None
|
_waiters: deque[Future[Any]] | None
|
||||||
|
|
|
@ -39,6 +39,7 @@ if sys.version_info >= (3, 11):
|
||||||
unittest runners, console tools, -- everywhere when async code
|
unittest runners, console tools, -- everywhere when async code
|
||||||
is called from existing sync framework and where the preferred single
|
is called from existing sync framework and where the preferred single
|
||||||
asyncio.run() call doesn't work.
|
asyncio.run() call doesn't work.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, *, debug: bool | None = None, loop_factory: Callable[[], AbstractEventLoop] | None = None) -> None: ...
|
def __init__(self, *, debug: bool | None = None, loop_factory: Callable[[], AbstractEventLoop] | None = None) -> None: ...
|
||||||
|
|
|
@ -66,7 +66,8 @@ if sys.version_info < (3, 11):
|
||||||
_handshake_cb: Callable[[BaseException | None], None] | None
|
_handshake_cb: Callable[[BaseException | None], None] | None
|
||||||
_shutdown_cb: Callable[[], None] | None
|
_shutdown_cb: Callable[[], None] | None
|
||||||
def __init__(self, context: ssl.SSLContext, server_side: bool, server_hostname: str | None = None) -> None:
|
def __init__(self, context: ssl.SSLContext, server_side: bool, server_hostname: str | None = None) -> None:
|
||||||
"""The *context* argument specifies the ssl.SSLContext to use.
|
"""
|
||||||
|
The *context* argument specifies the ssl.SSLContext to use.
|
||||||
|
|
||||||
The *server_side* argument indicates whether this is a server side or
|
The *server_side* argument indicates whether this is a server side or
|
||||||
client side transport.
|
client side transport.
|
||||||
|
@ -95,7 +96,8 @@ if sys.version_info < (3, 11):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def wrapped(self) -> bool:
|
def wrapped(self) -> bool:
|
||||||
"""Whether a security layer is currently in effect.
|
"""
|
||||||
|
Whether a security layer is currently in effect.
|
||||||
|
|
||||||
Return False during handshake.
|
Return False during handshake.
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -58,4 +58,5 @@ async def staggered_race(
|
||||||
``len(exceptions)`` is equal to the number of coroutines actually
|
``len(exceptions)`` is equal to the number of coroutines actually
|
||||||
started, and the order is the same as in ``coro_fns``. The winning
|
started, and the order is the same as in ``coro_fns``. The winning
|
||||||
coroutine's entry is ``None``.
|
coroutine's entry is ``None``.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -40,7 +40,8 @@ class CycleFoundException(Exception):
|
||||||
|
|
||||||
def get_all_awaited_by(pid: SupportsIndex) -> list[_AwaitedInfo]: ...
|
def get_all_awaited_by(pid: SupportsIndex) -> list[_AwaitedInfo]: ...
|
||||||
def build_async_tree(result: Iterable[_AwaitedInfo], task_emoji: str = "(T)", cor_emoji: str = "") -> list[list[str]]:
|
def build_async_tree(result: Iterable[_AwaitedInfo], task_emoji: str = "(T)", cor_emoji: str = "") -> list[list[str]]:
|
||||||
"""Build a list of strings for pretty-print an async call tree.
|
"""
|
||||||
|
Build a list of strings for pretty-print an async call tree.
|
||||||
|
|
||||||
The call tree is produced by `get_all_async_stacks()`, prefixing tasks
|
The call tree is produced by `get_all_async_stacks()`, prefixing tasks
|
||||||
with `task_emoji` and coroutine frames with `cor_emoji`.
|
with `task_emoji` and coroutine frames with `cor_emoji`.
|
||||||
|
|
|
@ -18,7 +18,7 @@ _Ts = TypeVarTuple("_Ts")
|
||||||
# Keep asyncio.__all__ updated with any changes to __all__ here
|
# Keep asyncio.__all__ updated with any changes to __all__ here
|
||||||
if sys.platform != "win32":
|
if sys.platform != "win32":
|
||||||
if sys.version_info >= (3, 14):
|
if sys.version_info >= (3, 14):
|
||||||
__all__ = ("SelectorEventLoop", "_DefaultEventLoopPolicy", "EventLoop")
|
__all__ = ("SelectorEventLoop", "EventLoop")
|
||||||
elif sys.version_info >= (3, 13):
|
elif sys.version_info >= (3, 13):
|
||||||
# Adds EventLoop
|
# Adds EventLoop
|
||||||
__all__ = (
|
__all__ = (
|
||||||
|
@ -131,6 +131,7 @@ if sys.version_info < (3, 14):
|
||||||
|
|
||||||
Return True if the watcher is installed and ready to handle process exit
|
Return True if the watcher is installed and ready to handle process exit
|
||||||
notifications.
|
notifications.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -214,6 +215,7 @@ if sys.version_info < (3, 14):
|
||||||
|
|
||||||
Return True if the watcher is installed and ready to handle process exit
|
Return True if the watcher is installed and ready to handle process exit
|
||||||
notifications.
|
notifications.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if sys.platform != "win32":
|
if sys.platform != "win32":
|
||||||
|
|
|
@ -93,10 +93,13 @@ def urlsafe_b64decode(s: str | ReadableBuffer) -> bytes:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def b32encode(s: ReadableBuffer) -> bytes:
|
def b32encode(s: ReadableBuffer) -> bytes:
|
||||||
"""Encode the bytes-like objects using base32 and return a bytes object."""
|
"""
|
||||||
|
Encode the bytes-like objects using base32 and return a bytes object.
|
||||||
|
"""
|
||||||
|
|
||||||
def b32decode(s: str | ReadableBuffer, casefold: bool = False, map01: str | ReadableBuffer | None = None) -> bytes:
|
def b32decode(s: str | ReadableBuffer, casefold: bool = False, map01: str | ReadableBuffer | None = None) -> bytes:
|
||||||
"""Decode the base32 encoded bytes-like object or ASCII string s.
|
"""
|
||||||
|
Decode the base32 encoded bytes-like object or ASCII string s.
|
||||||
|
|
||||||
Optional casefold is a flag specifying whether a lowercase alphabet is
|
Optional casefold is a flag specifying whether a lowercase alphabet is
|
||||||
acceptable as input. For security purposes, the default is False.
|
acceptable as input. For security purposes, the default is False.
|
||||||
|
@ -130,10 +133,13 @@ def b16decode(s: str | ReadableBuffer, casefold: bool = False) -> bytes:
|
||||||
|
|
||||||
if sys.version_info >= (3, 10):
|
if sys.version_info >= (3, 10):
|
||||||
def b32hexencode(s: ReadableBuffer) -> bytes:
|
def b32hexencode(s: ReadableBuffer) -> bytes:
|
||||||
"""Encode the bytes-like objects using base32hex and return a bytes object."""
|
"""
|
||||||
|
Encode the bytes-like objects using base32hex and return a bytes object.
|
||||||
|
"""
|
||||||
|
|
||||||
def b32hexdecode(s: str | ReadableBuffer, casefold: bool = False) -> bytes:
|
def b32hexdecode(s: str | ReadableBuffer, casefold: bool = False) -> bytes:
|
||||||
"""Decode the base32hex encoded bytes-like object or ASCII string s.
|
"""
|
||||||
|
Decode the base32hex encoded bytes-like object or ASCII string s.
|
||||||
|
|
||||||
Optional casefold is a flag specifying whether a lowercase alphabet is
|
Optional casefold is a flag specifying whether a lowercase alphabet is
|
||||||
acceptable as input. For security purposes, the default is False.
|
acceptable as input. For security purposes, the default is False.
|
||||||
|
|
|
@ -278,6 +278,7 @@ class Bdb:
|
||||||
return string contains the canonical filename, the function name
|
return string contains the canonical filename, the function name
|
||||||
or '<lambda>', the input arguments, the return value, and the
|
or '<lambda>', the input arguments, the return value, and the
|
||||||
line of code (if it exists).
|
line of code (if it exists).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def run(self, cmd: str | CodeType, globals: dict[str, Any] | None = None, locals: Mapping[str, Any] | None = None) -> None:
|
def run(self, cmd: str | CodeType, globals: dict[str, Any] | None = None, locals: Mapping[str, Any] | None = None) -> None:
|
||||||
|
@ -374,6 +375,7 @@ class Breakpoint:
|
||||||
The information includes the breakpoint number, temporary
|
The information includes the breakpoint number, temporary
|
||||||
status, file:line position, break condition, number of times to
|
status, file:line position, break condition, number of times to
|
||||||
ignore, and number of times hit.
|
ignore, and number of times hit.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def checkfuncname(b: Breakpoint, frame: FrameType) -> bool:
|
def checkfuncname(b: Breakpoint, frame: FrameType) -> bool:
|
||||||
|
|
|
@ -881,9 +881,11 @@ class complex:
|
||||||
def from_number(cls, number: complex | SupportsComplex | SupportsFloat | SupportsIndex, /) -> Self:
|
def from_number(cls, number: complex | SupportsComplex | SupportsFloat | SupportsIndex, /) -> Self:
|
||||||
"""Convert number to a complex floating-point number."""
|
"""Convert number to a complex floating-point number."""
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _FormatMapMapping(Protocol):
|
class _FormatMapMapping(Protocol):
|
||||||
def __getitem__(self, key: str, /) -> Any: ...
|
def __getitem__(self, key: str, /) -> Any: ...
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _TranslateTable(Protocol):
|
class _TranslateTable(Protocol):
|
||||||
def __getitem__(self, key: int, /) -> str | int | None: ...
|
def __getitem__(self, key: int, /) -> str | int | None: ...
|
||||||
|
|
||||||
|
@ -3380,6 +3382,7 @@ if sys.version_info >= (3, 10):
|
||||||
def aiter(async_iterable: SupportsAiter[_SupportsAnextT_co], /) -> _SupportsAnextT_co:
|
def aiter(async_iterable: SupportsAiter[_SupportsAnextT_co], /) -> _SupportsAnextT_co:
|
||||||
"""Return an AsyncIterator for an AsyncIterable object."""
|
"""Return an AsyncIterator for an AsyncIterable object."""
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _SupportsSynchronousAnext(Protocol[_AwaitableT_co]):
|
class _SupportsSynchronousAnext(Protocol[_AwaitableT_co]):
|
||||||
def __anext__(self) -> _AwaitableT_co: ...
|
def __anext__(self) -> _AwaitableT_co: ...
|
||||||
|
|
||||||
|
@ -3700,7 +3703,6 @@ def iter(object: Callable[[], _T | None], sentinel: None, /) -> Iterator[_T]: ..
|
||||||
@overload
|
@overload
|
||||||
def iter(object: Callable[[], _T], sentinel: object, /) -> Iterator[_T]: ...
|
def iter(object: Callable[[], _T], sentinel: object, /) -> Iterator[_T]: ...
|
||||||
|
|
||||||
# Keep this alias in sync with unittest.case._ClassInfo
|
|
||||||
if sys.version_info >= (3, 10):
|
if sys.version_info >= (3, 10):
|
||||||
_ClassInfo: TypeAlias = type | types.UnionType | tuple[_ClassInfo, ...]
|
_ClassInfo: TypeAlias = type | types.UnionType | tuple[_ClassInfo, ...]
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -75,6 +75,7 @@ def open(
|
||||||
For text mode, a BZ2File object is created, and wrapped in an
|
For text mode, a BZ2File object is created, and wrapped in an
|
||||||
io.TextIOWrapper instance with the specified encoding, error
|
io.TextIOWrapper instance with the specified encoding, error
|
||||||
handling behavior, and line ending(s).
|
handling behavior, and line ending(s).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
|
|
@ -87,7 +87,8 @@ def monthrange(year: int, month: int) -> tuple[int, int]:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Calendar:
|
class Calendar:
|
||||||
"""Base calendar class. This class doesn't do any formatting. It simply
|
"""
|
||||||
|
Base calendar class. This class doesn't do any formatting. It simply
|
||||||
provides data to subclasses.
|
provides data to subclasses.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -96,137 +97,183 @@ class Calendar:
|
||||||
def getfirstweekday(self) -> int: ...
|
def getfirstweekday(self) -> int: ...
|
||||||
def setfirstweekday(self, firstweekday: int) -> None: ...
|
def setfirstweekday(self, firstweekday: int) -> None: ...
|
||||||
def iterweekdays(self) -> Iterable[int]:
|
def iterweekdays(self) -> Iterable[int]:
|
||||||
"""Return an iterator for one week of weekday numbers starting with the
|
"""
|
||||||
|
Return an iterator for one week of weekday numbers starting with the
|
||||||
configured first one.
|
configured first one.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def itermonthdates(self, year: int, month: int) -> Iterable[datetime.date]:
|
def itermonthdates(self, year: int, month: int) -> Iterable[datetime.date]:
|
||||||
"""Return an iterator for one month. The iterator will yield datetime.date
|
"""
|
||||||
|
Return an iterator for one month. The iterator will yield datetime.date
|
||||||
values and will always iterate through complete weeks, so it will yield
|
values and will always iterate through complete weeks, so it will yield
|
||||||
dates outside the specified month.
|
dates outside the specified month.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def itermonthdays2(self, year: int, month: int) -> Iterable[tuple[int, int]]:
|
def itermonthdays2(self, year: int, month: int) -> Iterable[tuple[int, int]]:
|
||||||
"""Like itermonthdates(), but will yield (day number, weekday number)
|
"""
|
||||||
|
Like itermonthdates(), but will yield (day number, weekday number)
|
||||||
tuples. For days outside the specified month the day number is 0.
|
tuples. For days outside the specified month the day number is 0.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def itermonthdays(self, year: int, month: int) -> Iterable[int]:
|
def itermonthdays(self, year: int, month: int) -> Iterable[int]:
|
||||||
"""Like itermonthdates(), but will yield day numbers. For days outside
|
"""
|
||||||
|
Like itermonthdates(), but will yield day numbers. For days outside
|
||||||
the specified month the day number is 0.
|
the specified month the day number is 0.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def monthdatescalendar(self, year: int, month: int) -> list[list[datetime.date]]:
|
def monthdatescalendar(self, year: int, month: int) -> list[list[datetime.date]]:
|
||||||
"""Return a matrix (list of lists) representing a month's calendar.
|
"""
|
||||||
|
Return a matrix (list of lists) representing a month's calendar.
|
||||||
Each row represents a week; week entries are datetime.date values.
|
Each row represents a week; week entries are datetime.date values.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def monthdays2calendar(self, year: int, month: int) -> list[list[tuple[int, int]]]:
|
def monthdays2calendar(self, year: int, month: int) -> list[list[tuple[int, int]]]:
|
||||||
"""Return a matrix representing a month's calendar.
|
"""
|
||||||
|
Return a matrix representing a month's calendar.
|
||||||
Each row represents a week; week entries are
|
Each row represents a week; week entries are
|
||||||
(day number, weekday number) tuples. Day numbers outside this month
|
(day number, weekday number) tuples. Day numbers outside this month
|
||||||
are zero.
|
are zero.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def monthdayscalendar(self, year: int, month: int) -> list[list[int]]:
|
def monthdayscalendar(self, year: int, month: int) -> list[list[int]]:
|
||||||
"""Return a matrix representing a month's calendar.
|
"""
|
||||||
|
Return a matrix representing a month's calendar.
|
||||||
Each row represents a week; days outside this month are zero.
|
Each row represents a week; days outside this month are zero.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def yeardatescalendar(self, year: int, width: int = 3) -> list[list[list[list[datetime.date]]]]:
|
def yeardatescalendar(self, year: int, width: int = 3) -> list[list[list[list[datetime.date]]]]:
|
||||||
"""Return the data for the specified year ready for formatting. The return
|
"""
|
||||||
|
Return the data for the specified year ready for formatting. The return
|
||||||
value is a list of month rows. Each month row contains up to width months.
|
value is a list of month rows. Each month row contains up to width months.
|
||||||
Each month contains between 4 and 6 weeks and each week contains 1-7
|
Each month contains between 4 and 6 weeks and each week contains 1-7
|
||||||
days. Days are datetime.date objects.
|
days. Days are datetime.date objects.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def yeardays2calendar(self, year: int, width: int = 3) -> list[list[list[list[tuple[int, int]]]]]:
|
def yeardays2calendar(self, year: int, width: int = 3) -> list[list[list[list[tuple[int, int]]]]]:
|
||||||
"""Return the data for the specified year ready for formatting (similar to
|
"""
|
||||||
|
Return the data for the specified year ready for formatting (similar to
|
||||||
yeardatescalendar()). Entries in the week lists are
|
yeardatescalendar()). Entries in the week lists are
|
||||||
(day number, weekday number) tuples. Day numbers outside this month are
|
(day number, weekday number) tuples. Day numbers outside this month are
|
||||||
zero.
|
zero.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def yeardayscalendar(self, year: int, width: int = 3) -> list[list[list[list[int]]]]:
|
def yeardayscalendar(self, year: int, width: int = 3) -> list[list[list[list[int]]]]:
|
||||||
"""Return the data for the specified year ready for formatting (similar to
|
"""
|
||||||
|
Return the data for the specified year ready for formatting (similar to
|
||||||
yeardatescalendar()). Entries in the week lists are day numbers.
|
yeardatescalendar()). Entries in the week lists are day numbers.
|
||||||
Day numbers outside this month are zero.
|
Day numbers outside this month are zero.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def itermonthdays3(self, year: int, month: int) -> Iterable[tuple[int, int, int]]:
|
def itermonthdays3(self, year: int, month: int) -> Iterable[tuple[int, int, int]]:
|
||||||
"""Like itermonthdates(), but will yield (year, month, day) tuples. Can be
|
"""
|
||||||
|
Like itermonthdates(), but will yield (year, month, day) tuples. Can be
|
||||||
used for dates outside of datetime.date range.
|
used for dates outside of datetime.date range.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def itermonthdays4(self, year: int, month: int) -> Iterable[tuple[int, int, int, int]]:
|
def itermonthdays4(self, year: int, month: int) -> Iterable[tuple[int, int, int, int]]:
|
||||||
"""Like itermonthdates(), but will yield (year, month, day, day_of_week) tuples.
|
"""
|
||||||
|
Like itermonthdates(), but will yield (year, month, day, day_of_week) tuples.
|
||||||
Can be used for dates outside of datetime.date range.
|
Can be used for dates outside of datetime.date range.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class TextCalendar(Calendar):
|
class TextCalendar(Calendar):
|
||||||
"""Subclass of Calendar that outputs a calendar as a simple plain text
|
"""
|
||||||
|
Subclass of Calendar that outputs a calendar as a simple plain text
|
||||||
similar to the UNIX program cal.
|
similar to the UNIX program cal.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def prweek(self, theweek: int, width: int) -> None:
|
def prweek(self, theweek: int, width: int) -> None:
|
||||||
"""Print a single week (no newline)."""
|
"""
|
||||||
|
Print a single week (no newline).
|
||||||
|
"""
|
||||||
|
|
||||||
def formatday(self, day: int, weekday: int, width: int) -> str:
|
def formatday(self, day: int, weekday: int, width: int) -> str:
|
||||||
"""Returns a formatted day."""
|
"""
|
||||||
|
Returns a formatted day.
|
||||||
|
"""
|
||||||
|
|
||||||
def formatweek(self, theweek: int, width: int) -> str:
|
def formatweek(self, theweek: int, width: int) -> str:
|
||||||
"""Returns a single week in a string (no newline)."""
|
"""
|
||||||
|
Returns a single week in a string (no newline).
|
||||||
|
"""
|
||||||
|
|
||||||
def formatweekday(self, day: int, width: int) -> str:
|
def formatweekday(self, day: int, width: int) -> str:
|
||||||
"""Returns a formatted week day name."""
|
"""
|
||||||
|
Returns a formatted week day name.
|
||||||
|
"""
|
||||||
|
|
||||||
def formatweekheader(self, width: int) -> str:
|
def formatweekheader(self, width: int) -> str:
|
||||||
"""Return a header for a week."""
|
"""
|
||||||
|
Return a header for a week.
|
||||||
|
"""
|
||||||
|
|
||||||
def formatmonthname(self, theyear: int, themonth: int, width: int, withyear: bool = True) -> str:
|
def formatmonthname(self, theyear: int, themonth: int, width: int, withyear: bool = True) -> str:
|
||||||
"""Return a formatted month name."""
|
"""
|
||||||
|
Return a formatted month name.
|
||||||
|
"""
|
||||||
|
|
||||||
def prmonth(self, theyear: int, themonth: int, w: int = 0, l: int = 0) -> None:
|
def prmonth(self, theyear: int, themonth: int, w: int = 0, l: int = 0) -> None:
|
||||||
"""Print a month's calendar."""
|
"""
|
||||||
|
Print a month's calendar.
|
||||||
|
"""
|
||||||
|
|
||||||
def formatmonth(self, theyear: int, themonth: int, w: int = 0, l: int = 0) -> str:
|
def formatmonth(self, theyear: int, themonth: int, w: int = 0, l: int = 0) -> str:
|
||||||
"""Return a month's calendar string (multi-line)."""
|
"""
|
||||||
|
Return a month's calendar string (multi-line).
|
||||||
|
"""
|
||||||
|
|
||||||
def formatyear(self, theyear: int, w: int = 2, l: int = 1, c: int = 6, m: int = 3) -> str:
|
def formatyear(self, theyear: int, w: int = 2, l: int = 1, c: int = 6, m: int = 3) -> str:
|
||||||
"""Returns a year's calendar as a multi-line string."""
|
"""
|
||||||
|
Returns a year's calendar as a multi-line string.
|
||||||
|
"""
|
||||||
|
|
||||||
def pryear(self, theyear: int, w: int = 0, l: int = 0, c: int = 6, m: int = 3) -> None:
|
def pryear(self, theyear: int, w: int = 0, l: int = 0, c: int = 6, m: int = 3) -> None:
|
||||||
"""Print a year's calendar."""
|
"""Print a year's calendar."""
|
||||||
|
|
||||||
def firstweekday() -> int: ...
|
def firstweekday() -> int: ...
|
||||||
def monthcalendar(year: int, month: int) -> list[list[int]]:
|
def monthcalendar(year: int, month: int) -> list[list[int]]:
|
||||||
"""Return a matrix representing a month's calendar.
|
"""
|
||||||
|
Return a matrix representing a month's calendar.
|
||||||
Each row represents a week; days outside this month are zero.
|
Each row represents a week; days outside this month are zero.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def prweek(theweek: int, width: int) -> None:
|
def prweek(theweek: int, width: int) -> None:
|
||||||
"""Print a single week (no newline)."""
|
"""
|
||||||
|
Print a single week (no newline).
|
||||||
|
"""
|
||||||
|
|
||||||
def week(theweek: int, width: int) -> str:
|
def week(theweek: int, width: int) -> str:
|
||||||
"""Returns a single week in a string (no newline)."""
|
"""
|
||||||
|
Returns a single week in a string (no newline).
|
||||||
|
"""
|
||||||
|
|
||||||
def weekheader(width: int) -> str:
|
def weekheader(width: int) -> str:
|
||||||
"""Return a header for a week."""
|
"""
|
||||||
|
Return a header for a week.
|
||||||
|
"""
|
||||||
|
|
||||||
def prmonth(theyear: int, themonth: int, w: int = 0, l: int = 0) -> None:
|
def prmonth(theyear: int, themonth: int, w: int = 0, l: int = 0) -> None:
|
||||||
"""Print a month's calendar."""
|
"""
|
||||||
|
Print a month's calendar.
|
||||||
|
"""
|
||||||
|
|
||||||
def month(theyear: int, themonth: int, w: int = 0, l: int = 0) -> str:
|
def month(theyear: int, themonth: int, w: int = 0, l: int = 0) -> str:
|
||||||
"""Return a month's calendar string (multi-line)."""
|
"""
|
||||||
|
Return a month's calendar string (multi-line).
|
||||||
|
"""
|
||||||
|
|
||||||
def calendar(theyear: int, w: int = 2, l: int = 1, c: int = 6, m: int = 3) -> str:
|
def calendar(theyear: int, w: int = 2, l: int = 1, c: int = 6, m: int = 3) -> str:
|
||||||
"""Returns a year's calendar as a multi-line string."""
|
"""
|
||||||
|
Returns a year's calendar as a multi-line string.
|
||||||
|
"""
|
||||||
|
|
||||||
def prcal(theyear: int, w: int = 0, l: int = 0, c: int = 6, m: int = 3) -> None:
|
def prcal(theyear: int, w: int = 0, l: int = 0, c: int = 6, m: int = 3) -> None:
|
||||||
"""Print a year's calendar."""
|
"""Print a year's calendar."""
|
||||||
|
|
||||||
class HTMLCalendar(Calendar):
|
class HTMLCalendar(Calendar):
|
||||||
"""This calendar returns complete HTML pages."""
|
"""
|
||||||
|
This calendar returns complete HTML pages.
|
||||||
|
"""
|
||||||
|
|
||||||
cssclasses: ClassVar[list[str]]
|
cssclasses: ClassVar[list[str]]
|
||||||
cssclass_noday: ClassVar[str]
|
cssclass_noday: ClassVar[str]
|
||||||
|
@ -236,30 +283,46 @@ class HTMLCalendar(Calendar):
|
||||||
cssclass_year: ClassVar[str]
|
cssclass_year: ClassVar[str]
|
||||||
cssclass_year_head: ClassVar[str]
|
cssclass_year_head: ClassVar[str]
|
||||||
def formatday(self, day: int, weekday: int) -> str:
|
def formatday(self, day: int, weekday: int) -> str:
|
||||||
"""Return a day as a table cell."""
|
"""
|
||||||
|
Return a day as a table cell.
|
||||||
|
"""
|
||||||
|
|
||||||
def formatweek(self, theweek: int) -> str:
|
def formatweek(self, theweek: int) -> str:
|
||||||
"""Return a complete week as a table row."""
|
"""
|
||||||
|
Return a complete week as a table row.
|
||||||
|
"""
|
||||||
|
|
||||||
def formatweekday(self, day: int) -> str:
|
def formatweekday(self, day: int) -> str:
|
||||||
"""Return a weekday name as a table header."""
|
"""
|
||||||
|
Return a weekday name as a table header.
|
||||||
|
"""
|
||||||
|
|
||||||
def formatweekheader(self) -> str:
|
def formatweekheader(self) -> str:
|
||||||
"""Return a header for a week as a table row."""
|
"""
|
||||||
|
Return a header for a week as a table row.
|
||||||
|
"""
|
||||||
|
|
||||||
def formatmonthname(self, theyear: int, themonth: int, withyear: bool = True) -> str:
|
def formatmonthname(self, theyear: int, themonth: int, withyear: bool = True) -> str:
|
||||||
"""Return a month name as a table row."""
|
"""
|
||||||
|
Return a month name as a table row.
|
||||||
|
"""
|
||||||
|
|
||||||
def formatmonth(self, theyear: int, themonth: int, withyear: bool = True) -> str:
|
def formatmonth(self, theyear: int, themonth: int, withyear: bool = True) -> str:
|
||||||
"""Return a formatted month as a table."""
|
"""
|
||||||
|
Return a formatted month as a table.
|
||||||
|
"""
|
||||||
|
|
||||||
def formatyear(self, theyear: int, width: int = 3) -> str:
|
def formatyear(self, theyear: int, width: int = 3) -> str:
|
||||||
"""Return a formatted year as a table of tables."""
|
"""
|
||||||
|
Return a formatted year as a table of tables.
|
||||||
|
"""
|
||||||
|
|
||||||
def formatyearpage(
|
def formatyearpage(
|
||||||
self, theyear: int, width: int = 3, css: str | None = "calendar.css", encoding: str | None = None
|
self, theyear: int, width: int = 3, css: str | None = "calendar.css", encoding: str | None = None
|
||||||
) -> bytes:
|
) -> bytes:
|
||||||
"""Return a formatted year as a complete HTML page."""
|
"""
|
||||||
|
Return a formatted year as a complete HTML page.
|
||||||
|
"""
|
||||||
|
|
||||||
class different_locale:
|
class different_locale:
|
||||||
def __init__(self, locale: _LocaleType) -> None: ...
|
def __init__(self, locale: _LocaleType) -> None: ...
|
||||||
|
@ -267,14 +330,16 @@ class different_locale:
|
||||||
def __exit__(self, *args: Unused) -> None: ...
|
def __exit__(self, *args: Unused) -> None: ...
|
||||||
|
|
||||||
class LocaleTextCalendar(TextCalendar):
|
class LocaleTextCalendar(TextCalendar):
|
||||||
"""This class can be passed a locale name in the constructor and will return
|
"""
|
||||||
|
This class can be passed a locale name in the constructor and will return
|
||||||
month and weekday names in the specified locale.
|
month and weekday names in the specified locale.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, firstweekday: int = 0, locale: _LocaleType | None = None) -> None: ...
|
def __init__(self, firstweekday: int = 0, locale: _LocaleType | None = None) -> None: ...
|
||||||
|
|
||||||
class LocaleHTMLCalendar(HTMLCalendar):
|
class LocaleHTMLCalendar(HTMLCalendar):
|
||||||
"""This class can be passed a locale name in the constructor and will return
|
"""
|
||||||
|
This class can be passed a locale name in the constructor and will return
|
||||||
month and weekday names in the specified locale.
|
month and weekday names in the specified locale.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ from builtins import list as _list, type as _type
|
||||||
from collections.abc import Iterable, Iterator, Mapping
|
from collections.abc import Iterable, Iterator, Mapping
|
||||||
from email.message import Message
|
from email.message import Message
|
||||||
from types import TracebackType
|
from types import TracebackType
|
||||||
from typing import IO, Any, Protocol
|
from typing import IO, Any, Protocol, type_check_only
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
@ -78,6 +78,7 @@ def parse_multipart(
|
||||||
is a list of strings.
|
is a list of strings.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _Environ(Protocol):
|
class _Environ(Protocol):
|
||||||
def __getitem__(self, k: str, /) -> str: ...
|
def __getitem__(self, k: str, /) -> str: ...
|
||||||
def keys(self) -> Iterable[str]: ...
|
def keys(self) -> Iterable[str]: ...
|
||||||
|
@ -86,6 +87,7 @@ def parse_header(line: str) -> tuple[str, dict[str, str]]:
|
||||||
"""Parse a Content-type like header.
|
"""Parse a Content-type like header.
|
||||||
|
|
||||||
Return the main content-type and a dictionary of options.
|
Return the main content-type and a dictionary of options.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def test(environ: _Environ = ...) -> None:
|
def test(environ: _Environ = ...) -> None:
|
||||||
|
@ -93,6 +95,7 @@ def test(environ: _Environ = ...) -> None:
|
||||||
|
|
||||||
Write minimal HTTP headers and dump all information provided to
|
Write minimal HTTP headers and dump all information provided to
|
||||||
the script in HTML form.
|
the script in HTML form.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def print_environ(environ: _Environ = ...) -> None:
|
def print_environ(environ: _Environ = ...) -> None:
|
||||||
|
@ -164,6 +167,7 @@ class FieldStorage:
|
||||||
a file open for reading and writing. This makes it possible to
|
a file open for reading and writing. This makes it possible to
|
||||||
override the default choice of storing all files in a temporary
|
override the default choice of storing all files in a temporary
|
||||||
directory and unlinking them as soon as they have been opened.
|
directory and unlinking them as soon as they have been opened.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
FieldStorageClass: _type | None
|
FieldStorageClass: _type | None
|
||||||
|
@ -243,6 +247,7 @@ class FieldStorage:
|
||||||
|
|
||||||
max_num_fields: int. If set, then __init__ throws a ValueError
|
max_num_fields: int. If set, then __init__ throws a ValueError
|
||||||
if there are more than n fields read by parse_qsl().
|
if there are more than n fields read by parse_qsl().
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __enter__(self) -> Self: ...
|
def __enter__(self) -> Self: ...
|
||||||
|
@ -294,6 +299,7 @@ class FieldStorage:
|
||||||
that is nevertheless automatically deleted when the script
|
that is nevertheless automatically deleted when the script
|
||||||
terminates, try defining a __del__ method in a derived class
|
terminates, try defining a __del__ method in a derived class
|
||||||
which unlinks the temporary files you have created.
|
which unlinks the temporary files you have created.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def print_exception(
|
def print_exception(
|
||||||
|
|
|
@ -61,6 +61,7 @@ class Cmd:
|
||||||
framework. There is no good reason to instantiate Cmd itself; rather,
|
framework. There is no good reason to instantiate Cmd itself; rather,
|
||||||
it's useful as a superclass of an interpreter class you define yourself
|
it's useful as a superclass of an interpreter class you define yourself
|
||||||
in order to inherit Cmd's methods and encapsulate action methods.
|
in order to inherit Cmd's methods and encapsulate action methods.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
prompt: str
|
prompt: str
|
||||||
|
@ -87,17 +88,20 @@ class Cmd:
|
||||||
is done automatically. The optional arguments stdin and stdout
|
is done automatically. The optional arguments stdin and stdout
|
||||||
specify alternate input and output file objects; if not specified,
|
specify alternate input and output file objects; if not specified,
|
||||||
sys.stdin and sys.stdout are used.
|
sys.stdin and sys.stdout are used.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
old_completer: Callable[[str, int], str | None] | None
|
old_completer: Callable[[str, int], str | None] | None
|
||||||
def cmdloop(self, intro: Any | None = None) -> None:
|
def cmdloop(self, intro: Any | None = None) -> None:
|
||||||
"""Repeatedly issue a prompt, accept input, parse an initial prefix
|
"""Repeatedly issue a prompt, accept input, parse an initial prefix
|
||||||
off the received input, and dispatch to action methods, passing them
|
off the received input, and dispatch to action methods, passing them
|
||||||
the remainder of the line as argument.
|
the remainder of the line as argument.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def precmd(self, line: str) -> str:
|
def precmd(self, line: str) -> str:
|
||||||
"""Hook method executed just before the command line is
|
"""Hook method executed just before the command line is
|
||||||
interpreted, but after the input prompt is generated and issued.
|
interpreted, but after the input prompt is generated and issued.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def postcmd(self, stop: bool, line: str) -> bool:
|
def postcmd(self, stop: bool, line: str) -> bool:
|
||||||
|
@ -109,6 +113,7 @@ class Cmd:
|
||||||
def postloop(self) -> None:
|
def postloop(self) -> None:
|
||||||
"""Hook method executed once when the cmdloop() method is about to
|
"""Hook method executed once when the cmdloop() method is about to
|
||||||
return.
|
return.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def parseline(self, line: str) -> tuple[str | None, str | None, str]:
|
def parseline(self, line: str) -> tuple[str | None, str | None, str]:
|
||||||
|
@ -125,6 +130,7 @@ class Cmd:
|
||||||
see the precmd() and postcmd() methods for useful execution hooks.
|
see the precmd() and postcmd() methods for useful execution hooks.
|
||||||
The return value is a flag indicating whether interpretation of
|
The return value is a flag indicating whether interpretation of
|
||||||
commands by the interpreter should stop.
|
commands by the interpreter should stop.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def emptyline(self) -> bool:
|
def emptyline(self) -> bool:
|
||||||
|
@ -132,6 +138,7 @@ class Cmd:
|
||||||
|
|
||||||
If this method is not overridden, it repeats the last nonempty
|
If this method is not overridden, it repeats the last nonempty
|
||||||
command entered.
|
command entered.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def default(self, line: str) -> None:
|
def default(self, line: str) -> None:
|
||||||
|
@ -139,6 +146,7 @@ class Cmd:
|
||||||
|
|
||||||
If this method is not overridden, it prints an error message and
|
If this method is not overridden, it prints an error message and
|
||||||
returns.
|
returns.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def completedefault(self, *ignored: Any) -> list[str]:
|
def completedefault(self, *ignored: Any) -> list[str]:
|
||||||
|
@ -146,6 +154,7 @@ class Cmd:
|
||||||
complete_*() method is available.
|
complete_*() method is available.
|
||||||
|
|
||||||
By default, it returns an empty list.
|
By default, it returns an empty list.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def completenames(self, text: str, *ignored: Any) -> list[str]: ...
|
def completenames(self, text: str, *ignored: Any) -> list[str]: ...
|
||||||
|
|
|
@ -14,6 +14,7 @@ class InteractiveInterpreter:
|
||||||
This class deals with parsing and interpreter state (the user's
|
This class deals with parsing and interpreter state (the user's
|
||||||
namespace); it doesn't deal with input buffering or prompting or
|
namespace); it doesn't deal with input buffering or prompting or
|
||||||
input file naming (the filename is always passed in explicitly).
|
input file naming (the filename is always passed in explicitly).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
locals: dict[str, Any] # undocumented
|
locals: dict[str, Any] # undocumented
|
||||||
|
@ -25,6 +26,7 @@ class InteractiveInterpreter:
|
||||||
namespace in which code will be executed; it defaults to a newly
|
namespace in which code will be executed; it defaults to a newly
|
||||||
created dictionary with key "__name__" set to "__console__" and
|
created dictionary with key "__name__" set to "__console__" and
|
||||||
key "__doc__" set to None.
|
key "__doc__" set to None.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def runsource(self, source: str, filename: str = "<input>", symbol: str = "single") -> bool:
|
def runsource(self, source: str, filename: str = "<input>", symbol: str = "single") -> bool:
|
||||||
|
@ -49,6 +51,7 @@ class InteractiveInterpreter:
|
||||||
an exception is raised). The return value can be used to
|
an exception is raised). The return value can be used to
|
||||||
decide whether to use sys.ps1 or sys.ps2 to prompt the next
|
decide whether to use sys.ps1 or sys.ps2 to prompt the next
|
||||||
line.
|
line.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def runcode(self, code: CodeType) -> None:
|
def runcode(self, code: CodeType) -> None:
|
||||||
|
@ -61,6 +64,7 @@ class InteractiveInterpreter:
|
||||||
A note about KeyboardInterrupt: this exception may occur
|
A note about KeyboardInterrupt: this exception may occur
|
||||||
elsewhere in this code, and may not always be caught. The
|
elsewhere in this code, and may not always be caught. The
|
||||||
caller should be prepared to deal with it.
|
caller should be prepared to deal with it.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if sys.version_info >= (3, 13):
|
if sys.version_info >= (3, 13):
|
||||||
def showsyntaxerror(self, filename: str | None = None, *, source: str = "") -> None:
|
def showsyntaxerror(self, filename: str | None = None, *, source: str = "") -> None:
|
||||||
|
@ -73,6 +77,7 @@ class InteractiveInterpreter:
|
||||||
"<string>" when reading from a string).
|
"<string>" when reading from a string).
|
||||||
|
|
||||||
The output is written by self.write(), below.
|
The output is written by self.write(), below.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
else:
|
else:
|
||||||
def showsyntaxerror(self, filename: str | None = None) -> None:
|
def showsyntaxerror(self, filename: str | None = None) -> None:
|
||||||
|
@ -85,6 +90,7 @@ class InteractiveInterpreter:
|
||||||
"<string>" when reading from a string).
|
"<string>" when reading from a string).
|
||||||
|
|
||||||
The output is written by self.write(), below.
|
The output is written by self.write(), below.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def showtraceback(self) -> None:
|
def showtraceback(self) -> None:
|
||||||
|
@ -93,6 +99,7 @@ class InteractiveInterpreter:
|
||||||
We remove the first stack item because it is our own code.
|
We remove the first stack item because it is our own code.
|
||||||
|
|
||||||
The output is written by self.write(), below.
|
The output is written by self.write(), below.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def write(self, data: str) -> None:
|
def write(self, data: str) -> None:
|
||||||
|
@ -100,6 +107,7 @@ class InteractiveInterpreter:
|
||||||
|
|
||||||
The base implementation writes to sys.stderr; a subclass may
|
The base implementation writes to sys.stderr; a subclass may
|
||||||
replace this with a different implementation.
|
replace this with a different implementation.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class InteractiveConsole(InteractiveInterpreter):
|
class InteractiveConsole(InteractiveInterpreter):
|
||||||
|
@ -107,6 +115,7 @@ class InteractiveConsole(InteractiveInterpreter):
|
||||||
|
|
||||||
This class builds on InteractiveInterpreter and adds prompting
|
This class builds on InteractiveInterpreter and adds prompting
|
||||||
using the familiar sys.ps1 and sys.ps2, and input buffering.
|
using the familiar sys.ps1 and sys.ps2, and input buffering.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
buffer: list[str] # undocumented
|
buffer: list[str] # undocumented
|
||||||
|
@ -122,6 +131,7 @@ class InteractiveConsole(InteractiveInterpreter):
|
||||||
|
|
||||||
The optional filename argument should specify the (file)name
|
The optional filename argument should specify the (file)name
|
||||||
of the input stream; it will show up in tracebacks.
|
of the input stream; it will show up in tracebacks.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def push(self, line: str, filename: str | None = None) -> bool:
|
def push(self, line: str, filename: str | None = None) -> bool:
|
||||||
|
@ -136,6 +146,7 @@ class InteractiveConsole(InteractiveInterpreter):
|
||||||
is left as it was after the line was appended. The return
|
is left as it was after the line was appended. The return
|
||||||
value is 1 if more input is required, 0 if the line was dealt
|
value is 1 if more input is required, 0 if the line was dealt
|
||||||
with in some way (this is the same as runsource()).
|
with in some way (this is the same as runsource()).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
else:
|
else:
|
||||||
def __init__(self, locals: dict[str, Any] | None = None, filename: str = "<console>") -> None:
|
def __init__(self, locals: dict[str, Any] | None = None, filename: str = "<console>") -> None:
|
||||||
|
@ -146,6 +157,7 @@ class InteractiveConsole(InteractiveInterpreter):
|
||||||
|
|
||||||
The optional filename argument should specify the (file)name
|
The optional filename argument should specify the (file)name
|
||||||
of the input stream; it will show up in tracebacks.
|
of the input stream; it will show up in tracebacks.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def push(self, line: str) -> bool:
|
def push(self, line: str) -> bool:
|
||||||
|
@ -160,6 +172,7 @@ class InteractiveConsole(InteractiveInterpreter):
|
||||||
is left as it was after the line was appended. The return
|
is left as it was after the line was appended. The return
|
||||||
value is 1 if more input is required, 0 if the line was dealt
|
value is 1 if more input is required, 0 if the line was dealt
|
||||||
with in some way (this is the same as runsource()).
|
with in some way (this is the same as runsource()).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def interact(self, banner: str | None = None, exitmsg: str | None = None) -> None:
|
def interact(self, banner: str | None = None, exitmsg: str | None = None) -> None:
|
||||||
|
@ -176,6 +189,7 @@ class InteractiveConsole(InteractiveInterpreter):
|
||||||
printed when exiting. Pass the empty string to suppress
|
printed when exiting. Pass the empty string to suppress
|
||||||
printing an exit message. If exitmsg is not given or None,
|
printing an exit message. If exitmsg is not given or None,
|
||||||
a default message is printed.
|
a default message is printed.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def resetbuffer(self) -> None:
|
def resetbuffer(self) -> None:
|
||||||
|
@ -190,6 +204,7 @@ class InteractiveConsole(InteractiveInterpreter):
|
||||||
The base implementation uses the built-in function
|
The base implementation uses the built-in function
|
||||||
input(); a subclass may replace this with a different
|
input(); a subclass may replace this with a different
|
||||||
implementation.
|
implementation.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if sys.version_info >= (3, 13):
|
if sys.version_info >= (3, 13):
|
||||||
|
@ -213,6 +228,7 @@ if sys.version_info >= (3, 13):
|
||||||
local -- passed to InteractiveInterpreter.__init__()
|
local -- passed to InteractiveInterpreter.__init__()
|
||||||
exitmsg -- passed to InteractiveConsole.interact()
|
exitmsg -- passed to InteractiveConsole.interact()
|
||||||
local_exit -- passed to InteractiveConsole.__init__()
|
local_exit -- passed to InteractiveConsole.__init__()
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -234,4 +250,5 @@ else:
|
||||||
readfunc -- if not None, replaces InteractiveConsole.raw_input()
|
readfunc -- if not None, replaces InteractiveConsole.raw_input()
|
||||||
local -- passed to InteractiveInterpreter.__init__()
|
local -- passed to InteractiveInterpreter.__init__()
|
||||||
exitmsg -- passed to InteractiveConsole.interact()
|
exitmsg -- passed to InteractiveConsole.interact()
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -156,6 +156,7 @@ def getencoder(encoding: str) -> _Encoder:
|
||||||
its encoder function.
|
its encoder function.
|
||||||
|
|
||||||
Raises a LookupError in case the encoding cannot be found.
|
Raises a LookupError in case the encoding cannot be found.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def getdecoder(encoding: str) -> _Decoder:
|
def getdecoder(encoding: str) -> _Decoder:
|
||||||
|
@ -163,6 +164,7 @@ def getdecoder(encoding: str) -> _Decoder:
|
||||||
its decoder function.
|
its decoder function.
|
||||||
|
|
||||||
Raises a LookupError in case the encoding cannot be found.
|
Raises a LookupError in case the encoding cannot be found.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def getincrementalencoder(encoding: str) -> _IncrementalEncoder:
|
def getincrementalencoder(encoding: str) -> _IncrementalEncoder:
|
||||||
|
@ -171,6 +173,7 @@ def getincrementalencoder(encoding: str) -> _IncrementalEncoder:
|
||||||
|
|
||||||
Raises a LookupError in case the encoding cannot be found
|
Raises a LookupError in case the encoding cannot be found
|
||||||
or the codecs doesn't provide an incremental encoder.
|
or the codecs doesn't provide an incremental encoder.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -180,6 +183,7 @@ def getincrementaldecoder(encoding: _BufferedEncoding) -> _BufferedIncrementalDe
|
||||||
|
|
||||||
Raises a LookupError in case the encoding cannot be found
|
Raises a LookupError in case the encoding cannot be found
|
||||||
or the codecs doesn't provide an incremental decoder.
|
or the codecs doesn't provide an incremental decoder.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -189,6 +193,7 @@ def getreader(encoding: str) -> _StreamReader:
|
||||||
its StreamReader class or factory function.
|
its StreamReader class or factory function.
|
||||||
|
|
||||||
Raises a LookupError in case the encoding cannot be found.
|
Raises a LookupError in case the encoding cannot be found.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def getwriter(encoding: str) -> _StreamWriter:
|
def getwriter(encoding: str) -> _StreamWriter:
|
||||||
|
@ -196,6 +201,7 @@ def getwriter(encoding: str) -> _StreamWriter:
|
||||||
its StreamWriter class or factory function.
|
its StreamWriter class or factory function.
|
||||||
|
|
||||||
Raises a LookupError in case the encoding cannot be found.
|
Raises a LookupError in case the encoding cannot be found.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def open(
|
def open(
|
||||||
|
@ -252,10 +258,12 @@ def EncodedFile(file: _Stream, data_encoding: str, file_encoding: str | None = N
|
||||||
.data_encoding and .file_encoding which reflect the given
|
.data_encoding and .file_encoding which reflect the given
|
||||||
parameters of the same name. The attributes can be used for
|
parameters of the same name. The attributes can be used for
|
||||||
introspection by Python programs.
|
introspection by Python programs.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def iterencode(iterator: Iterable[str], encoding: str, errors: str = "strict") -> Generator[bytes, None, None]:
|
def iterencode(iterator: Iterable[str], encoding: str, errors: str = "strict") -> Generator[bytes, None, None]:
|
||||||
"""Encoding iterator.
|
"""
|
||||||
|
Encoding iterator.
|
||||||
|
|
||||||
Encodes the input strings from the iterator using an IncrementalEncoder.
|
Encodes the input strings from the iterator using an IncrementalEncoder.
|
||||||
|
|
||||||
|
@ -264,7 +272,8 @@ def iterencode(iterator: Iterable[str], encoding: str, errors: str = "strict") -
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def iterdecode(iterator: Iterable[bytes], encoding: str, errors: str = "strict") -> Generator[str, None, None]:
|
def iterdecode(iterator: Iterable[bytes], encoding: str, errors: str = "strict") -> Generator[str, None, None]:
|
||||||
"""Decoding iterator.
|
"""
|
||||||
|
Decoding iterator.
|
||||||
|
|
||||||
Decodes the input strings from the iterator using an IncrementalDecoder.
|
Decodes the input strings from the iterator using an IncrementalDecoder.
|
||||||
|
|
||||||
|
@ -322,6 +331,7 @@ class Codec:
|
||||||
(only for encoding).
|
(only for encoding).
|
||||||
|
|
||||||
The set of allowed values can be extended via register_error.
|
The set of allowed values can be extended via register_error.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# These are sort of @abstractmethod but sort of not.
|
# These are sort of @abstractmethod but sort of not.
|
||||||
|
@ -340,6 +350,7 @@ class Codec:
|
||||||
The encoder must be able to handle zero length input and
|
The encoder must be able to handle zero length input and
|
||||||
return an empty object of the output object type in this
|
return an empty object of the output object type in this
|
||||||
situation.
|
situation.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def decode(self, input: bytes, errors: str = "strict") -> tuple[str, int]:
|
def decode(self, input: bytes, errors: str = "strict") -> tuple[str, int]:
|
||||||
|
@ -360,17 +371,20 @@ class Codec:
|
||||||
The decoder must be able to handle zero length input and
|
The decoder must be able to handle zero length input and
|
||||||
return an empty object of the output object type in this
|
return an empty object of the output object type in this
|
||||||
situation.
|
situation.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class IncrementalEncoder:
|
class IncrementalEncoder:
|
||||||
"""An IncrementalEncoder encodes an input in multiple steps. The input can
|
"""
|
||||||
|
An IncrementalEncoder encodes an input in multiple steps. The input can
|
||||||
be passed piece by piece to the encode() method. The IncrementalEncoder
|
be passed piece by piece to the encode() method. The IncrementalEncoder
|
||||||
remembers the state of the encoding process between calls to encode().
|
remembers the state of the encoding process between calls to encode().
|
||||||
"""
|
"""
|
||||||
|
|
||||||
errors: str
|
errors: str
|
||||||
def __init__(self, errors: str = "strict") -> None:
|
def __init__(self, errors: str = "strict") -> None:
|
||||||
"""Creates an IncrementalEncoder instance.
|
"""
|
||||||
|
Creates an IncrementalEncoder instance.
|
||||||
|
|
||||||
The IncrementalEncoder may use different error handling schemes by
|
The IncrementalEncoder may use different error handling schemes by
|
||||||
providing the errors keyword argument. See the module docstring
|
providing the errors keyword argument. See the module docstring
|
||||||
|
@ -379,28 +393,37 @@ class IncrementalEncoder:
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def encode(self, input: str, final: bool = False) -> bytes:
|
def encode(self, input: str, final: bool = False) -> bytes:
|
||||||
"""Encodes input and returns the resulting object."""
|
"""
|
||||||
|
Encodes input and returns the resulting object.
|
||||||
|
"""
|
||||||
|
|
||||||
def reset(self) -> None:
|
def reset(self) -> None:
|
||||||
"""Resets the encoder to the initial state."""
|
"""
|
||||||
|
Resets the encoder to the initial state.
|
||||||
|
"""
|
||||||
# documentation says int but str is needed for the subclass.
|
# documentation says int but str is needed for the subclass.
|
||||||
def getstate(self) -> int | str:
|
def getstate(self) -> int | str:
|
||||||
"""Return the current state of the encoder."""
|
"""
|
||||||
|
Return the current state of the encoder.
|
||||||
|
"""
|
||||||
|
|
||||||
def setstate(self, state: int | str) -> None:
|
def setstate(self, state: int | str) -> None:
|
||||||
"""Set the current state of the encoder. state must have been
|
"""
|
||||||
|
Set the current state of the encoder. state must have been
|
||||||
returned by getstate().
|
returned by getstate().
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class IncrementalDecoder:
|
class IncrementalDecoder:
|
||||||
"""An IncrementalDecoder decodes an input in multiple steps. The input can
|
"""
|
||||||
|
An IncrementalDecoder decodes an input in multiple steps. The input can
|
||||||
be passed piece by piece to the decode() method. The IncrementalDecoder
|
be passed piece by piece to the decode() method. The IncrementalDecoder
|
||||||
remembers the state of the decoding process between calls to decode().
|
remembers the state of the decoding process between calls to decode().
|
||||||
"""
|
"""
|
||||||
|
|
||||||
errors: str
|
errors: str
|
||||||
def __init__(self, errors: str = "strict") -> None:
|
def __init__(self, errors: str = "strict") -> None:
|
||||||
"""Create an IncrementalDecoder instance.
|
"""
|
||||||
|
Create an IncrementalDecoder instance.
|
||||||
|
|
||||||
The IncrementalDecoder may use different error handling schemes by
|
The IncrementalDecoder may use different error handling schemes by
|
||||||
providing the errors keyword argument. See the module docstring
|
providing the errors keyword argument. See the module docstring
|
||||||
|
@ -409,13 +432,18 @@ class IncrementalDecoder:
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def decode(self, input: ReadableBuffer, final: bool = False) -> str:
|
def decode(self, input: ReadableBuffer, final: bool = False) -> str:
|
||||||
"""Decode input and returns the resulting object."""
|
"""
|
||||||
|
Decode input and returns the resulting object.
|
||||||
|
"""
|
||||||
|
|
||||||
def reset(self) -> None:
|
def reset(self) -> None:
|
||||||
"""Reset the decoder to the initial state."""
|
"""
|
||||||
|
Reset the decoder to the initial state.
|
||||||
|
"""
|
||||||
|
|
||||||
def getstate(self) -> tuple[bytes, int]:
|
def getstate(self) -> tuple[bytes, int]:
|
||||||
"""Return the current state of the decoder.
|
"""
|
||||||
|
Return the current state of the decoder.
|
||||||
|
|
||||||
This must be a (buffered_input, additional_state_info) tuple.
|
This must be a (buffered_input, additional_state_info) tuple.
|
||||||
buffered_input must be a bytes object containing bytes that
|
buffered_input must be a bytes object containing bytes that
|
||||||
|
@ -427,7 +455,8 @@ class IncrementalDecoder:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def setstate(self, state: tuple[bytes, int]) -> None:
|
def setstate(self, state: tuple[bytes, int]) -> None:
|
||||||
"""Set the current state of the decoder.
|
"""
|
||||||
|
Set the current state of the decoder.
|
||||||
|
|
||||||
state must have been returned by getstate(). The effect of
|
state must have been returned by getstate(). The effect of
|
||||||
setstate((b"", 0)) must be equivalent to reset().
|
setstate((b"", 0)) must be equivalent to reset().
|
||||||
|
@ -435,7 +464,8 @@ class IncrementalDecoder:
|
||||||
|
|
||||||
# These are not documented but used in encodings/*.py implementations.
|
# These are not documented but used in encodings/*.py implementations.
|
||||||
class BufferedIncrementalEncoder(IncrementalEncoder):
|
class BufferedIncrementalEncoder(IncrementalEncoder):
|
||||||
"""This subclass of IncrementalEncoder can be used as the baseclass for an
|
"""
|
||||||
|
This subclass of IncrementalEncoder can be used as the baseclass for an
|
||||||
incremental encoder if the encoder must keep some of the output in a
|
incremental encoder if the encoder must keep some of the output in a
|
||||||
buffer between calls to encode().
|
buffer between calls to encode().
|
||||||
"""
|
"""
|
||||||
|
@ -447,7 +477,8 @@ class BufferedIncrementalEncoder(IncrementalEncoder):
|
||||||
def encode(self, input: str, final: bool = False) -> bytes: ...
|
def encode(self, input: str, final: bool = False) -> bytes: ...
|
||||||
|
|
||||||
class BufferedIncrementalDecoder(IncrementalDecoder):
|
class BufferedIncrementalDecoder(IncrementalDecoder):
|
||||||
"""This subclass of IncrementalDecoder can be used as the baseclass for an
|
"""
|
||||||
|
This subclass of IncrementalDecoder can be used as the baseclass for an
|
||||||
incremental decoder if the decoder must be able to handle incomplete
|
incremental decoder if the decoder must be able to handle incomplete
|
||||||
byte sequences.
|
byte sequences.
|
||||||
"""
|
"""
|
||||||
|
@ -500,6 +531,7 @@ class StreamWriter(Codec):
|
||||||
output is put into a clean state, that allows appending
|
output is put into a clean state, that allows appending
|
||||||
of new fresh data without having to rescan the whole
|
of new fresh data without having to rescan the whole
|
||||||
stream to recover state.
|
stream to recover state.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def seek(self, offset: int, whence: int = 0) -> None: ...
|
def seek(self, offset: int, whence: int = 0) -> None: ...
|
||||||
|
@ -564,6 +596,7 @@ class StreamReader(Codec):
|
||||||
|
|
||||||
size, if given, is passed as size argument to the
|
size, if given, is passed as size argument to the
|
||||||
read() method.
|
read() method.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def readlines(self, sizehint: int | None = None, keepends: bool = True) -> list[str]:
|
def readlines(self, sizehint: int | None = None, keepends: bool = True) -> list[str]:
|
||||||
|
@ -574,7 +607,8 @@ class StreamReader(Codec):
|
||||||
method and are included in the list entries.
|
method and are included in the list entries.
|
||||||
|
|
||||||
sizehint, if given, is ignored since there is no efficient
|
sizehint, if given, is ignored since there is no efficient
|
||||||
way to finding the true end-of-line.
|
way of finding the true end-of-line.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def reset(self) -> None:
|
def reset(self) -> None:
|
||||||
|
@ -583,6 +617,7 @@ class StreamReader(Codec):
|
||||||
Note that no stream repositioning should take place.
|
Note that no stream repositioning should take place.
|
||||||
This method is primarily intended to be able to recover
|
This method is primarily intended to be able to recover
|
||||||
from decoding errors.
|
from decoding errors.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def seek(self, offset: int, whence: int = 0) -> None:
|
def seek(self, offset: int, whence: int = 0) -> None:
|
||||||
|
@ -609,6 +644,7 @@ class StreamReaderWriter(TextIO):
|
||||||
The design is such that one can use the factory functions
|
The design is such that one can use the factory functions
|
||||||
returned by the codec.lookup() function to construct the
|
returned by the codec.lookup() function to construct the
|
||||||
instance.
|
instance.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
stream: _Stream
|
stream: _Stream
|
||||||
|
@ -622,6 +658,7 @@ class StreamReaderWriter(TextIO):
|
||||||
|
|
||||||
Error handling is done in the same way as defined for the
|
Error handling is done in the same way as defined for the
|
||||||
StreamWriter/Readers.
|
StreamWriter/Readers.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def read(self, size: int = -1) -> str: ...
|
def read(self, size: int = -1) -> str: ...
|
||||||
|
@ -664,6 +701,7 @@ class StreamRecoder(BinaryIO):
|
||||||
|
|
||||||
In the other direction, data is read from the underlying stream using
|
In the other direction, data is read from the underlying stream using
|
||||||
a Reader instance and then encoded and returned to the caller.
|
a Reader instance and then encoded and returned to the caller.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
data_encoding: str
|
data_encoding: str
|
||||||
|
@ -693,6 +731,7 @@ class StreamRecoder(BinaryIO):
|
||||||
|
|
||||||
Error handling is done in the same way as defined for the
|
Error handling is done in the same way as defined for the
|
||||||
StreamWriter/Readers.
|
StreamWriter/Readers.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def read(self, size: int = -1) -> bytes: ...
|
def read(self, size: int = -1) -> bytes: ...
|
||||||
|
|
|
@ -77,6 +77,7 @@ def namedtuple(
|
||||||
Point(x=11, y=22)
|
Point(x=11, y=22)
|
||||||
>>> p._replace(x=100) # _replace() is like str.replace() but targets named fields
|
>>> p._replace(x=100) # _replace() is like str.replace() but targets named fields
|
||||||
Point(x=100, y=22)
|
Point(x=100, y=22)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class UserDict(MutableMapping[_KT, _VT]):
|
class UserDict(MutableMapping[_KT, _VT]):
|
||||||
|
@ -404,6 +405,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
>>> c['b'] -= 2 # reduce the count of 'b' by two
|
>>> c['b'] -= 2 # reduce the count of 'b' by two
|
||||||
>>> c.most_common() # 'b' is still in, but its count is zero
|
>>> c.most_common() # 'b' is still in, but its count is zero
|
||||||
[('a', 3), ('c', 1), ('b', 0)]
|
[('a', 3), ('c', 1), ('b', 0)]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -416,6 +418,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
>>> c = Counter('gallahad') # a new counter from an iterable
|
>>> c = Counter('gallahad') # a new counter from an iterable
|
||||||
>>> c = Counter({'a': 4, 'b': 2}) # a new counter from a mapping
|
>>> c = Counter({'a': 4, 'b': 2}) # a new counter from a mapping
|
||||||
>>> c = Counter(a=4, b=2) # a new counter from keyword args
|
>>> c = Counter(a=4, b=2) # a new counter from keyword args
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -443,6 +446,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
|
|
||||||
Note, if an element's count has been set to zero or is a negative
|
Note, if an element's count has been set to zero or is a negative
|
||||||
number, elements() will ignore it.
|
number, elements() will ignore it.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def most_common(self, n: int | None = None) -> list[tuple[_T, int]]:
|
def most_common(self, n: int | None = None) -> list[tuple[_T, int]]:
|
||||||
|
@ -451,6 +455,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
|
|
||||||
>>> Counter('abracadabra').most_common(3)
|
>>> Counter('abracadabra').most_common(3)
|
||||||
[('a', 5), ('b', 2), ('r', 2)]
|
[('a', 5), ('b', 2), ('r', 2)]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -470,6 +475,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
0
|
0
|
||||||
>>> c['w'] # 1 in which, minus 1 in witch, minus 1 in watch
|
>>> c['w'] # 1 in which, minus 1 in witch, minus 1 in watch
|
||||||
-1
|
-1
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -494,6 +500,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
>>> c.update(d) # add elements from another counter
|
>>> c.update(d) # add elements from another counter
|
||||||
>>> c['h'] # four 'h' in which, witch, and watch
|
>>> c['h'] # four 'h' in which, witch, and watch
|
||||||
4
|
4
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -517,6 +524,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
|
|
||||||
>>> Counter('abbb') + Counter('bcc')
|
>>> Counter('abbb') + Counter('bcc')
|
||||||
Counter({'b': 4, 'c': 2, 'a': 1})
|
Counter({'b': 4, 'c': 2, 'a': 1})
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __sub__(self, other: Counter[_T]) -> Counter[_T]:
|
def __sub__(self, other: Counter[_T]) -> Counter[_T]:
|
||||||
|
@ -524,6 +532,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
|
|
||||||
>>> Counter('abbbc') - Counter('bccd')
|
>>> Counter('abbbc') - Counter('bccd')
|
||||||
Counter({'b': 2, 'a': 1})
|
Counter({'b': 2, 'a': 1})
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __and__(self, other: Counter[_T]) -> Counter[_T]:
|
def __and__(self, other: Counter[_T]) -> Counter[_T]:
|
||||||
|
@ -531,6 +540,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
|
|
||||||
>>> Counter('abbb') & Counter('bcc')
|
>>> Counter('abbb') & Counter('bcc')
|
||||||
Counter({'b': 1})
|
Counter({'b': 1})
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __or__(self, other: Counter[_S]) -> Counter[_T | _S]: # type: ignore[override]
|
def __or__(self, other: Counter[_S]) -> Counter[_T | _S]: # type: ignore[override]
|
||||||
|
@ -538,6 +548,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
|
|
||||||
>>> Counter('abbb') | Counter('bcc')
|
>>> Counter('abbb') | Counter('bcc')
|
||||||
Counter({'b': 3, 'c': 2, 'a': 1})
|
Counter({'b': 3, 'c': 2, 'a': 1})
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __pos__(self) -> Counter[_T]:
|
def __pos__(self) -> Counter[_T]:
|
||||||
|
@ -546,6 +557,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
def __neg__(self) -> Counter[_T]:
|
def __neg__(self) -> Counter[_T]:
|
||||||
"""Subtracts from an empty counter. Strips positive and zero counts,
|
"""Subtracts from an empty counter. Strips positive and zero counts,
|
||||||
and flips the sign on negative counts.
|
and flips the sign on negative counts.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# several type: ignores because __iadd__ is supposedly incompatible with __add__, etc.
|
# several type: ignores because __iadd__ is supposedly incompatible with __add__, etc.
|
||||||
def __iadd__(self, other: SupportsItems[_T, int]) -> Self: # type: ignore[misc]
|
def __iadd__(self, other: SupportsItems[_T, int]) -> Self: # type: ignore[misc]
|
||||||
|
@ -555,6 +567,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
>>> c += Counter('bcc')
|
>>> c += Counter('bcc')
|
||||||
>>> c
|
>>> c
|
||||||
Counter({'b': 4, 'c': 2, 'a': 1})
|
Counter({'b': 4, 'c': 2, 'a': 1})
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __isub__(self, other: SupportsItems[_T, int]) -> Self:
|
def __isub__(self, other: SupportsItems[_T, int]) -> Self:
|
||||||
|
@ -564,6 +577,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
>>> c -= Counter('bccd')
|
>>> c -= Counter('bccd')
|
||||||
>>> c
|
>>> c
|
||||||
Counter({'b': 2, 'a': 1})
|
Counter({'b': 2, 'a': 1})
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __iand__(self, other: SupportsItems[_T, int]) -> Self:
|
def __iand__(self, other: SupportsItems[_T, int]) -> Self:
|
||||||
|
@ -573,6 +587,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
>>> c &= Counter('bcc')
|
>>> c &= Counter('bcc')
|
||||||
>>> c
|
>>> c
|
||||||
Counter({'b': 1})
|
Counter({'b': 1})
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __ior__(self, other: SupportsItems[_T, int]) -> Self: # type: ignore[override,misc]
|
def __ior__(self, other: SupportsItems[_T, int]) -> Self: # type: ignore[override,misc]
|
||||||
|
@ -582,6 +597,7 @@ class Counter(dict[_T, int], Generic[_T]):
|
||||||
>>> c |= Counter('bcc')
|
>>> c |= Counter('bcc')
|
||||||
>>> c
|
>>> c
|
||||||
Counter({'b': 3, 'c': 2, 'a': 1})
|
Counter({'b': 3, 'c': 2, 'a': 1})
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if sys.version_info >= (3, 10):
|
if sys.version_info >= (3, 10):
|
||||||
def total(self) -> int:
|
def total(self) -> int:
|
||||||
|
@ -779,12 +795,14 @@ class ChainMap(MutableMapping[_KT, _VT]):
|
||||||
Lookups search the underlying mappings successively until a key is found.
|
Lookups search the underlying mappings successively until a key is found.
|
||||||
In contrast, writes, updates, and deletions only operate on the first
|
In contrast, writes, updates, and deletions only operate on the first
|
||||||
mapping.
|
mapping.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
maps: list[MutableMapping[_KT, _VT]]
|
maps: list[MutableMapping[_KT, _VT]]
|
||||||
def __init__(self, *maps: MutableMapping[_KT, _VT]) -> None:
|
def __init__(self, *maps: MutableMapping[_KT, _VT]) -> None:
|
||||||
"""Initialize a ChainMap by setting *maps* to the given mappings.
|
"""Initialize a ChainMap by setting *maps* to the given mappings.
|
||||||
If no mappings are provided, a single empty dictionary is used.
|
If no mappings are provided, a single empty dictionary is used.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def new_child(self, m: MutableMapping[_KT, _VT] | None = None) -> Self:
|
def new_child(self, m: MutableMapping[_KT, _VT] | None = None) -> Self:
|
||||||
|
|
|
@ -14,10 +14,11 @@ See module py_compile for details of the actual byte-compilation.
|
||||||
import sys
|
import sys
|
||||||
from _typeshed import StrPath
|
from _typeshed import StrPath
|
||||||
from py_compile import PycInvalidationMode
|
from py_compile import PycInvalidationMode
|
||||||
from typing import Any, Protocol
|
from typing import Any, Protocol, type_check_only
|
||||||
|
|
||||||
__all__ = ["compile_dir", "compile_file", "compile_path"]
|
__all__ = ["compile_dir", "compile_file", "compile_path"]
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _SupportsSearch(Protocol):
|
class _SupportsSearch(Protocol):
|
||||||
def search(self, string: str, /) -> Any: ...
|
def search(self, string: str, /) -> Any: ...
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ from .thread import ThreadPoolExecutor as ThreadPoolExecutor
|
||||||
if sys.version_info >= (3, 14):
|
if sys.version_info >= (3, 14):
|
||||||
from .interpreter import InterpreterPoolExecutor as InterpreterPoolExecutor
|
from .interpreter import InterpreterPoolExecutor as InterpreterPoolExecutor
|
||||||
|
|
||||||
__all__ = (
|
__all__ = [
|
||||||
"FIRST_COMPLETED",
|
"FIRST_COMPLETED",
|
||||||
"FIRST_EXCEPTION",
|
"FIRST_EXCEPTION",
|
||||||
"ALL_COMPLETED",
|
"ALL_COMPLETED",
|
||||||
|
@ -36,7 +36,7 @@ if sys.version_info >= (3, 14):
|
||||||
"ProcessPoolExecutor",
|
"ProcessPoolExecutor",
|
||||||
"ThreadPoolExecutor",
|
"ThreadPoolExecutor",
|
||||||
"InterpreterPoolExecutor",
|
"InterpreterPoolExecutor",
|
||||||
)
|
]
|
||||||
|
|
||||||
elif sys.version_info >= (3, 13):
|
elif sys.version_info >= (3, 13):
|
||||||
__all__ = (
|
__all__ = (
|
||||||
|
|
|
@ -35,7 +35,9 @@ class InvalidStateError(Error):
|
||||||
"""The operation is not allowed in this state."""
|
"""The operation is not allowed in this state."""
|
||||||
|
|
||||||
class BrokenExecutor(RuntimeError):
|
class BrokenExecutor(RuntimeError):
|
||||||
"""Raised when a executor has become non-functional after a severe failure."""
|
"""
|
||||||
|
Raised when a executor has become non-functional after a severe failure.
|
||||||
|
"""
|
||||||
|
|
||||||
_T = TypeVar("_T")
|
_T = TypeVar("_T")
|
||||||
_T_co = TypeVar("_T_co", covariant=True)
|
_T_co = TypeVar("_T_co", covariant=True)
|
||||||
|
|
|
@ -58,7 +58,9 @@ if sys.version_info >= (3, 14):
|
||||||
def run(self, task: _Task) -> None: ... # type: ignore[override]
|
def run(self, task: _Task) -> None: ... # type: ignore[override]
|
||||||
|
|
||||||
class BrokenInterpreterPool(BrokenThreadPool):
|
class BrokenInterpreterPool(BrokenThreadPool):
|
||||||
"""Raised when a worker thread in an InterpreterPoolExecutor failed initializing."""
|
"""
|
||||||
|
Raised when a worker thread in an InterpreterPoolExecutor failed initializing.
|
||||||
|
"""
|
||||||
|
|
||||||
class InterpreterPoolExecutor(ThreadPoolExecutor):
|
class InterpreterPoolExecutor(ThreadPoolExecutor):
|
||||||
BROKEN: type[BrokenInterpreterPool]
|
BROKEN: type[BrokenInterpreterPool]
|
||||||
|
|
|
@ -151,6 +151,7 @@ def _process_chunk(fn: Callable[..., _T], chunk: Iterable[tuple[Any, ...]]) -> l
|
||||||
iterable passed to map.
|
iterable passed to map.
|
||||||
|
|
||||||
This function is run in a separate process.
|
This function is run in a separate process.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
|
@ -247,13 +248,15 @@ _system_limited: bool | None
|
||||||
|
|
||||||
def _check_system_limits() -> None: ...
|
def _check_system_limits() -> None: ...
|
||||||
def _chain_from_iterable_of_lists(iterable: Iterable[MutableSequence[Any]]) -> Any:
|
def _chain_from_iterable_of_lists(iterable: Iterable[MutableSequence[Any]]) -> Any:
|
||||||
"""Specialized implementation of itertools.chain.from_iterable.
|
"""
|
||||||
|
Specialized implementation of itertools.chain.from_iterable.
|
||||||
Each item in *iterable* should be a list. This function is
|
Each item in *iterable* should be a list. This function is
|
||||||
careful not to keep references to yielded objects.
|
careful not to keep references to yielded objects.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class BrokenProcessPool(BrokenExecutor):
|
class BrokenProcessPool(BrokenExecutor):
|
||||||
"""Raised when a process in a ProcessPoolExecutor terminated abruptly
|
"""
|
||||||
|
Raised when a process in a ProcessPoolExecutor terminated abruptly
|
||||||
while a future was in the running state.
|
while a future was in the running state.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,9 @@ else:
|
||||||
) -> None: ...
|
) -> None: ...
|
||||||
|
|
||||||
class BrokenThreadPool(BrokenExecutor):
|
class BrokenThreadPool(BrokenExecutor):
|
||||||
"""Raised when a worker thread in a ThreadPoolExecutor failed initializing."""
|
"""
|
||||||
|
Raised when a worker thread in a ThreadPoolExecutor failed initializing.
|
||||||
|
"""
|
||||||
|
|
||||||
class ThreadPoolExecutor(Executor):
|
class ThreadPoolExecutor(Executor):
|
||||||
if sys.version_info >= (3, 14):
|
if sys.version_info >= (3, 14):
|
||||||
|
|
142
crates/ty_vendored/vendor/typeshed/stdlib/concurrent/interpreters/__init__.pyi
vendored
Normal file
142
crates/ty_vendored/vendor/typeshed/stdlib/concurrent/interpreters/__init__.pyi
vendored
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
"""Subinterpreters High Level Module."""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import threading
|
||||||
|
import types
|
||||||
|
from collections.abc import Callable
|
||||||
|
from typing import Any, Literal, TypeVar
|
||||||
|
from typing_extensions import ParamSpec, Self
|
||||||
|
|
||||||
|
if sys.version_info >= (3, 13): # needed to satisfy pyright checks for Python <3.13
|
||||||
|
from _interpreters import (
|
||||||
|
InterpreterError as InterpreterError,
|
||||||
|
InterpreterNotFoundError as InterpreterNotFoundError,
|
||||||
|
NotShareableError as NotShareableError,
|
||||||
|
_SharedDict,
|
||||||
|
_Whence,
|
||||||
|
is_shareable as is_shareable,
|
||||||
|
)
|
||||||
|
|
||||||
|
from ._queues import Queue as Queue, QueueEmpty as QueueEmpty, QueueFull as QueueFull, create as create_queue
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"ExecutionFailed",
|
||||||
|
"Interpreter",
|
||||||
|
"InterpreterError",
|
||||||
|
"InterpreterNotFoundError",
|
||||||
|
"NotShareableError",
|
||||||
|
"Queue",
|
||||||
|
"QueueEmpty",
|
||||||
|
"QueueFull",
|
||||||
|
"create",
|
||||||
|
"create_queue",
|
||||||
|
"get_current",
|
||||||
|
"get_main",
|
||||||
|
"is_shareable",
|
||||||
|
"list_all",
|
||||||
|
]
|
||||||
|
|
||||||
|
_R = TypeVar("_R")
|
||||||
|
_P = ParamSpec("_P")
|
||||||
|
|
||||||
|
class ExecutionFailed(InterpreterError):
|
||||||
|
"""An unhandled exception happened during execution.
|
||||||
|
|
||||||
|
This is raised from Interpreter.exec() and Interpreter.call().
|
||||||
|
"""
|
||||||
|
|
||||||
|
excinfo: types.SimpleNamespace
|
||||||
|
|
||||||
|
def __init__(self, excinfo: types.SimpleNamespace) -> None: ...
|
||||||
|
|
||||||
|
def create() -> Interpreter:
|
||||||
|
"""Return a new (idle) Python interpreter."""
|
||||||
|
|
||||||
|
def list_all() -> list[Interpreter]:
|
||||||
|
"""Return all existing interpreters."""
|
||||||
|
|
||||||
|
def get_current() -> Interpreter:
|
||||||
|
"""Return the currently running interpreter."""
|
||||||
|
|
||||||
|
def get_main() -> Interpreter:
|
||||||
|
"""Return the main interpreter."""
|
||||||
|
|
||||||
|
class Interpreter:
|
||||||
|
"""A single Python interpreter.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
|
||||||
|
"id" - the unique process-global ID number for the interpreter
|
||||||
|
"whence" - indicates where the interpreter was created
|
||||||
|
|
||||||
|
If the interpreter wasn't created by this module
|
||||||
|
then any method that modifies the interpreter will fail,
|
||||||
|
i.e. .close(), .prepare_main(), .exec(), and .call()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __new__(cls, id: int, /, _whence: _Whence | None = None, _ownsref: bool | None = None) -> Self: ...
|
||||||
|
def __reduce__(self) -> tuple[type[Self], int]: ...
|
||||||
|
def __hash__(self) -> int: ...
|
||||||
|
def __del__(self) -> None: ...
|
||||||
|
@property
|
||||||
|
def id(self) -> int: ...
|
||||||
|
@property
|
||||||
|
def whence(
|
||||||
|
self,
|
||||||
|
) -> Literal["unknown", "runtime init", "legacy C-API", "C-API", "cross-interpreter C-API", "_interpreters module"]: ...
|
||||||
|
def is_running(self) -> bool:
|
||||||
|
"""Return whether or not the identified interpreter is running."""
|
||||||
|
|
||||||
|
def close(self) -> None:
|
||||||
|
"""Finalize and destroy the interpreter.
|
||||||
|
|
||||||
|
Attempting to destroy the current interpreter results
|
||||||
|
in an InterpreterError.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def prepare_main(
|
||||||
|
self, ns: _SharedDict | None = None, /, **kwargs: Any
|
||||||
|
) -> None: # kwargs has same value restrictions as _SharedDict
|
||||||
|
"""Bind the given values into the interpreter's __main__.
|
||||||
|
|
||||||
|
The values must be shareable.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def exec(self, code: str | types.CodeType | Callable[[], object], /) -> None:
|
||||||
|
"""Run the given source code in the interpreter.
|
||||||
|
|
||||||
|
This is essentially the same as calling the builtin "exec"
|
||||||
|
with this interpreter, using the __dict__ of its __main__
|
||||||
|
module as both globals and locals.
|
||||||
|
|
||||||
|
There is no return value.
|
||||||
|
|
||||||
|
If the code raises an unhandled exception then an ExecutionFailed
|
||||||
|
exception is raised, which summarizes the unhandled exception.
|
||||||
|
The actual exception is discarded because objects cannot be
|
||||||
|
shared between interpreters.
|
||||||
|
|
||||||
|
This blocks the current Python thread until done. During
|
||||||
|
that time, the previous interpreter is allowed to run
|
||||||
|
in other threads.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def call(self, callable: Callable[_P, _R], /, *args: _P.args, **kwargs: _P.kwargs) -> _R:
|
||||||
|
"""Call the object in the interpreter with given args/kwargs.
|
||||||
|
|
||||||
|
Nearly all callables, args, kwargs, and return values are
|
||||||
|
supported. All "shareable" objects are supported, as are
|
||||||
|
"stateless" functions (meaning non-closures that do not use
|
||||||
|
any globals). This method will fall back to pickle.
|
||||||
|
|
||||||
|
If the callable raises an exception then the error display
|
||||||
|
(including full traceback) is sent back between the interpreters
|
||||||
|
and an ExecutionFailed exception is raised, much like what
|
||||||
|
happens with Interpreter.exec().
|
||||||
|
"""
|
||||||
|
|
||||||
|
def call_in_thread(self, callable: Callable[_P, object], /, *args: _P.args, **kwargs: _P.kwargs) -> threading.Thread:
|
||||||
|
"""Return a new thread that calls the object in the interpreter.
|
||||||
|
|
||||||
|
The return value and any raised exception are discarded.
|
||||||
|
"""
|
44
crates/ty_vendored/vendor/typeshed/stdlib/concurrent/interpreters/_crossinterp.pyi
vendored
Normal file
44
crates/ty_vendored/vendor/typeshed/stdlib/concurrent/interpreters/_crossinterp.pyi
vendored
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
"""Common code between queues and channels."""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from collections.abc import Callable
|
||||||
|
from typing import Final, NewType
|
||||||
|
from typing_extensions import Never, Self, TypeAlias
|
||||||
|
|
||||||
|
if sys.version_info >= (3, 13): # needed to satisfy pyright checks for Python <3.13
|
||||||
|
from _interpqueues import _UnboundOp
|
||||||
|
|
||||||
|
class ItemInterpreterDestroyed(Exception):
|
||||||
|
"""Raised when trying to get an item whose interpreter was destroyed."""
|
||||||
|
|
||||||
|
# Actually a descriptor that behaves similarly to classmethod but prevents
|
||||||
|
# access from instances.
|
||||||
|
classonly = classmethod
|
||||||
|
|
||||||
|
class UnboundItem:
|
||||||
|
"""Represents a cross-interpreter item no longer bound to an interpreter.
|
||||||
|
|
||||||
|
An item is unbound when the interpreter that added it to the
|
||||||
|
cross-interpreter container is destroyed.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __new__(cls) -> Never: ...
|
||||||
|
@classonly
|
||||||
|
def singleton(cls, kind: str, module: str, name: str = "UNBOUND") -> Self:
|
||||||
|
"""A non-data descriptor that makes a value only visible on the class.
|
||||||
|
|
||||||
|
This is like the "classmethod" builtin, but does not show up on
|
||||||
|
instances of the class. It may be used as a decorator.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Sentinel types and alias that don't exist at runtime.
|
||||||
|
_UnboundErrorType = NewType("_UnboundErrorType", object)
|
||||||
|
_UnboundRemoveType = NewType("_UnboundRemoveType", object)
|
||||||
|
_AnyUnbound: TypeAlias = _UnboundErrorType | _UnboundRemoveType | UnboundItem
|
||||||
|
|
||||||
|
UNBOUND_ERROR: Final[_UnboundErrorType]
|
||||||
|
UNBOUND_REMOVE: Final[_UnboundRemoveType]
|
||||||
|
UNBOUND: Final[UnboundItem] # analogous to UNBOUND_REPLACE in C
|
||||||
|
|
||||||
|
def serialize_unbound(unbound: _AnyUnbound) -> tuple[_UnboundOp]: ...
|
||||||
|
def resolve_unbound(flag: _UnboundOp, exctype_destroyed: Callable[[str], BaseException]) -> UnboundItem: ...
|
134
crates/ty_vendored/vendor/typeshed/stdlib/concurrent/interpreters/_queues.pyi
vendored
Normal file
134
crates/ty_vendored/vendor/typeshed/stdlib/concurrent/interpreters/_queues.pyi
vendored
Normal file
|
@ -0,0 +1,134 @@
|
||||||
|
"""Cross-interpreter Queues High Level Module."""
|
||||||
|
|
||||||
|
import queue
|
||||||
|
import sys
|
||||||
|
from typing import Final, SupportsIndex
|
||||||
|
from typing_extensions import Self
|
||||||
|
|
||||||
|
if sys.version_info >= (3, 13): # needed to satisfy pyright checks for Python <3.13
|
||||||
|
from _interpqueues import QueueError as QueueError, QueueNotFoundError as QueueNotFoundError
|
||||||
|
|
||||||
|
from . import _crossinterp
|
||||||
|
from ._crossinterp import UNBOUND_ERROR as UNBOUND_ERROR, UNBOUND_REMOVE as UNBOUND_REMOVE, UnboundItem, _AnyUnbound
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"UNBOUND",
|
||||||
|
"UNBOUND_ERROR",
|
||||||
|
"UNBOUND_REMOVE",
|
||||||
|
"ItemInterpreterDestroyed",
|
||||||
|
"Queue",
|
||||||
|
"QueueEmpty",
|
||||||
|
"QueueError",
|
||||||
|
"QueueFull",
|
||||||
|
"QueueNotFoundError",
|
||||||
|
"create",
|
||||||
|
"list_all",
|
||||||
|
]
|
||||||
|
|
||||||
|
class QueueEmpty(QueueError, queue.Empty):
|
||||||
|
"""Raised from get_nowait() when the queue is empty.
|
||||||
|
|
||||||
|
It is also raised from get() if it times out.
|
||||||
|
"""
|
||||||
|
|
||||||
|
class QueueFull(QueueError, queue.Full):
|
||||||
|
"""Raised from put_nowait() when the queue is full.
|
||||||
|
|
||||||
|
It is also raised from put() if it times out.
|
||||||
|
"""
|
||||||
|
|
||||||
|
class ItemInterpreterDestroyed(QueueError, _crossinterp.ItemInterpreterDestroyed):
|
||||||
|
"""Raised from get() and get_nowait()."""
|
||||||
|
|
||||||
|
UNBOUND: Final[UnboundItem]
|
||||||
|
|
||||||
|
def create(maxsize: int = 0, *, unbounditems: _AnyUnbound = ...) -> Queue:
|
||||||
|
"""Return a new cross-interpreter queue.
|
||||||
|
|
||||||
|
The queue may be used to pass data safely between interpreters.
|
||||||
|
|
||||||
|
"unbounditems" sets the default for Queue.put(); see that method for
|
||||||
|
supported values. The default value is UNBOUND, which replaces
|
||||||
|
the unbound item.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def list_all() -> list[Queue]:
|
||||||
|
"""Return a list of all open queues."""
|
||||||
|
|
||||||
|
class Queue:
|
||||||
|
"""A cross-interpreter queue."""
|
||||||
|
|
||||||
|
def __new__(cls, id: int, /) -> Self: ...
|
||||||
|
def __del__(self) -> None: ...
|
||||||
|
def __hash__(self) -> int: ...
|
||||||
|
def __reduce__(self) -> tuple[type[Self], int]: ...
|
||||||
|
@property
|
||||||
|
def id(self) -> int: ...
|
||||||
|
@property
|
||||||
|
def unbounditems(self) -> _AnyUnbound: ...
|
||||||
|
@property
|
||||||
|
def maxsize(self) -> int: ...
|
||||||
|
def empty(self) -> bool: ...
|
||||||
|
def full(self) -> bool: ...
|
||||||
|
def qsize(self) -> int: ...
|
||||||
|
def put(
|
||||||
|
self,
|
||||||
|
obj: object,
|
||||||
|
timeout: SupportsIndex | None = None,
|
||||||
|
*,
|
||||||
|
unbounditems: _AnyUnbound | None = None,
|
||||||
|
_delay: float = ...,
|
||||||
|
) -> None:
|
||||||
|
"""Add the object to the queue.
|
||||||
|
|
||||||
|
This blocks while the queue is full.
|
||||||
|
|
||||||
|
For most objects, the object received through Queue.get() will
|
||||||
|
be a new one, equivalent to the original and not sharing any
|
||||||
|
actual underlying data. The notable exceptions include
|
||||||
|
cross-interpreter types (like Queue) and memoryview, where the
|
||||||
|
underlying data is actually shared. Furthermore, some types
|
||||||
|
can be sent through a queue more efficiently than others. This
|
||||||
|
group includes various immutable types like int, str, bytes, and
|
||||||
|
tuple (if the items are likewise efficiently shareable). See interpreters.is_shareable().
|
||||||
|
|
||||||
|
"unbounditems" controls the behavior of Queue.get() for the given
|
||||||
|
object if the current interpreter (calling put()) is later
|
||||||
|
destroyed.
|
||||||
|
|
||||||
|
If "unbounditems" is None (the default) then it uses the
|
||||||
|
queue's default, set with create_queue(),
|
||||||
|
which is usually UNBOUND.
|
||||||
|
|
||||||
|
If "unbounditems" is UNBOUND_ERROR then get() will raise an
|
||||||
|
ItemInterpreterDestroyed exception if the original interpreter
|
||||||
|
has been destroyed. This does not otherwise affect the queue;
|
||||||
|
the next call to put() will work like normal, returning the next
|
||||||
|
item in the queue.
|
||||||
|
|
||||||
|
If "unbounditems" is UNBOUND_REMOVE then the item will be removed
|
||||||
|
from the queue as soon as the original interpreter is destroyed.
|
||||||
|
Be aware that this will introduce an imbalance between put()
|
||||||
|
and get() calls.
|
||||||
|
|
||||||
|
If "unbounditems" is UNBOUND then it is returned by get() in place
|
||||||
|
of the unbound item.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def put_nowait(self, obj: object, *, unbounditems: _AnyUnbound | None = None) -> None: ...
|
||||||
|
def get(self, timeout: SupportsIndex | None = None, *, _delay: float = ...) -> object:
|
||||||
|
"""Return the next object from the queue.
|
||||||
|
|
||||||
|
This blocks while the queue is empty.
|
||||||
|
|
||||||
|
If the next item's original interpreter has been destroyed
|
||||||
|
then the "next object" is determined by the value of the
|
||||||
|
"unbounditems" argument to put().
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get_nowait(self) -> object:
|
||||||
|
"""Return the next object from the channel.
|
||||||
|
|
||||||
|
If the queue is empty then raise QueueEmpty. Otherwise this
|
||||||
|
is the same as get().
|
||||||
|
"""
|
|
@ -648,6 +648,7 @@ class SectionProxy(MutableMapping[str, str]):
|
||||||
|
|
||||||
Unless `fallback` is provided, `None` will be returned if the option
|
Unless `fallback` is provided, `None` will be returned if the option
|
||||||
is not found.
|
is not found.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -664,17 +665,17 @@ class SectionProxy(MutableMapping[str, str]):
|
||||||
# These are partially-applied version of the methods with the same names in
|
# These are partially-applied version of the methods with the same names in
|
||||||
# RawConfigParser; the stubs should be kept updated together
|
# RawConfigParser; the stubs should be kept updated together
|
||||||
@overload
|
@overload
|
||||||
def getint(self, option: str, *, raw: bool = ..., vars: _Section | None = ...) -> int | None: ...
|
def getint(self, option: str, *, raw: bool = False, vars: _Section | None = None) -> int | None: ...
|
||||||
@overload
|
@overload
|
||||||
def getint(self, option: str, fallback: _T = ..., *, raw: bool = ..., vars: _Section | None = ...) -> int | _T: ...
|
def getint(self, option: str, fallback: _T = ..., *, raw: bool = False, vars: _Section | None = None) -> int | _T: ...
|
||||||
@overload
|
@overload
|
||||||
def getfloat(self, option: str, *, raw: bool = ..., vars: _Section | None = ...) -> float | None: ...
|
def getfloat(self, option: str, *, raw: bool = False, vars: _Section | None = None) -> float | None: ...
|
||||||
@overload
|
@overload
|
||||||
def getfloat(self, option: str, fallback: _T = ..., *, raw: bool = ..., vars: _Section | None = ...) -> float | _T: ...
|
def getfloat(self, option: str, fallback: _T = ..., *, raw: bool = False, vars: _Section | None = None) -> float | _T: ...
|
||||||
@overload
|
@overload
|
||||||
def getboolean(self, option: str, *, raw: bool = ..., vars: _Section | None = ...) -> bool | None: ...
|
def getboolean(self, option: str, *, raw: bool = False, vars: _Section | None = None) -> bool | None: ...
|
||||||
@overload
|
@overload
|
||||||
def getboolean(self, option: str, fallback: _T = ..., *, raw: bool = ..., vars: _Section | None = ...) -> bool | _T: ...
|
def getboolean(self, option: str, fallback: _T = ..., *, raw: bool = False, vars: _Section | None = None) -> bool | _T: ...
|
||||||
# SectionProxy can have arbitrary attributes when custom converters are used
|
# SectionProxy can have arbitrary attributes when custom converters are used
|
||||||
def __getattr__(self, key: str) -> Callable[..., Any]: ...
|
def __getattr__(self, key: str) -> Callable[..., Any]: ...
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ from _typeshed import FileDescriptorOrPath, Unused
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from collections.abc import AsyncGenerator, AsyncIterator, Awaitable, Callable, Generator, Iterator
|
from collections.abc import AsyncGenerator, AsyncIterator, Awaitable, Callable, Generator, Iterator
|
||||||
from types import TracebackType
|
from types import TracebackType
|
||||||
from typing import IO, Any, Generic, Protocol, TypeVar, overload, runtime_checkable
|
from typing import IO, Any, Generic, Protocol, TypeVar, overload, runtime_checkable, type_check_only
|
||||||
from typing_extensions import ParamSpec, Self, TypeAlias
|
from typing_extensions import ParamSpec, Self, TypeAlias
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
@ -201,6 +201,7 @@ def asynccontextmanager(func: Callable[_P, AsyncIterator[_T_co]]) -> Callable[_P
|
||||||
<cleanup>
|
<cleanup>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _SupportsClose(Protocol):
|
class _SupportsClose(Protocol):
|
||||||
def close(self) -> object: ...
|
def close(self) -> object: ...
|
||||||
|
|
||||||
|
@ -221,12 +222,14 @@ class closing(AbstractContextManager[_SupportsCloseT, None]):
|
||||||
<block>
|
<block>
|
||||||
finally:
|
finally:
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, thing: _SupportsCloseT) -> None: ...
|
def __init__(self, thing: _SupportsCloseT) -> None: ...
|
||||||
def __exit__(self, *exc_info: Unused) -> None: ...
|
def __exit__(self, *exc_info: Unused) -> None: ...
|
||||||
|
|
||||||
if sys.version_info >= (3, 10):
|
if sys.version_info >= (3, 10):
|
||||||
|
@type_check_only
|
||||||
class _SupportsAclose(Protocol):
|
class _SupportsAclose(Protocol):
|
||||||
def aclose(self) -> Awaitable[object]: ...
|
def aclose(self) -> Awaitable[object]: ...
|
||||||
|
|
||||||
|
@ -248,6 +251,7 @@ if sys.version_info >= (3, 10):
|
||||||
<block>
|
<block>
|
||||||
finally:
|
finally:
|
||||||
await agen.aclose()
|
await agen.aclose()
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, thing: _SupportsAcloseT) -> None: ...
|
def __init__(self, thing: _SupportsAcloseT) -> None: ...
|
||||||
|
|
|
@ -50,7 +50,7 @@ __getstate__() and __setstate__(). See the documentation for module
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from typing import Any, Protocol, TypeVar
|
from typing import Any, Protocol, TypeVar, type_check_only
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
|
|
||||||
__all__ = ["Error", "copy", "deepcopy"]
|
__all__ = ["Error", "copy", "deepcopy"]
|
||||||
|
@ -58,6 +58,7 @@ __all__ = ["Error", "copy", "deepcopy"]
|
||||||
_T = TypeVar("_T")
|
_T = TypeVar("_T")
|
||||||
_SR = TypeVar("_SR", bound=_SupportsReplace)
|
_SR = TypeVar("_SR", bound=_SupportsReplace)
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _SupportsReplace(Protocol):
|
class _SupportsReplace(Protocol):
|
||||||
# In reality doesn't support args, but there's no other great way to express this.
|
# In reality doesn't support args, but there's no other great way to express this.
|
||||||
def __replace__(self, *args: Any, **kwargs: Any) -> Self: ...
|
def __replace__(self, *args: Any, **kwargs: Any) -> Self: ...
|
||||||
|
|
|
@ -26,6 +26,7 @@ if sys.platform != "win32":
|
||||||
"""Generate a salt for the specified method.
|
"""Generate a salt for the specified method.
|
||||||
|
|
||||||
If not specified, the strongest available method will be used.
|
If not specified, the strongest available method will be used.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def crypt(word: str, salt: str | _Method | None = None) -> str:
|
def crypt(word: str, salt: str | _Method | None = None) -> str:
|
||||||
|
@ -36,4 +37,5 @@ if sys.platform != "win32":
|
||||||
available method will be selected and a salt generated. Otherwise,
|
available method will be selected and a salt generated. Otherwise,
|
||||||
``salt`` may be one of the ``crypt.METHOD_*`` values, or a string as
|
``salt`` may be one of the ``crypt.METHOD_*`` values, or a string as
|
||||||
returned by ``crypt.mksalt()``.
|
returned by ``crypt.mksalt()``.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -128,6 +128,7 @@ class Dialect:
|
||||||
This must be subclassed (see csv.excel). Valid attributes are:
|
This must be subclassed (see csv.excel). Valid attributes are:
|
||||||
delimiter, quotechar, escapechar, doublequote, skipinitialspace,
|
delimiter, quotechar, escapechar, doublequote, skipinitialspace,
|
||||||
lineterminator, quoting.
|
lineterminator, quoting.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
delimiter: str
|
delimiter: str
|
||||||
|
@ -234,12 +235,15 @@ class DictWriter(Generic[_T]):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Sniffer:
|
class Sniffer:
|
||||||
""" "Sniffs" the format of a CSV file (i.e. delimiter, quotechar)
|
"""
|
||||||
|
"Sniffs" the format of a CSV file (i.e. delimiter, quotechar)
|
||||||
Returns a Dialect object.
|
Returns a Dialect object.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
preferred: list[str]
|
preferred: list[str]
|
||||||
def sniff(self, sample: str, delimiters: str | None = None) -> type[Dialect]:
|
def sniff(self, sample: str, delimiters: str | None = None) -> type[Dialect]:
|
||||||
"""Returns a dialect (or None) corresponding to the sample"""
|
"""
|
||||||
|
Returns a dialect (or None) corresponding to the sample
|
||||||
|
"""
|
||||||
|
|
||||||
def has_header(self, sample: str) -> bool: ...
|
def has_header(self, sample: str) -> bool: ...
|
||||||
|
|
|
@ -13,6 +13,7 @@ from _ctypes import (
|
||||||
_CData as _CData,
|
_CData as _CData,
|
||||||
_CDataType as _CDataType,
|
_CDataType as _CDataType,
|
||||||
_CField as _CField,
|
_CField as _CField,
|
||||||
|
_CTypeBaseType,
|
||||||
_Pointer as _Pointer,
|
_Pointer as _Pointer,
|
||||||
_PointerLike as _PointerLike,
|
_PointerLike as _PointerLike,
|
||||||
_SimpleCData as _SimpleCData,
|
_SimpleCData as _SimpleCData,
|
||||||
|
@ -231,7 +232,7 @@ def create_unicode_buffer(init: int | str, size: int | None = None) -> Array[c_w
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@deprecated("Deprecated in Python 3.13; removal scheduled for Python 3.15")
|
@deprecated("Deprecated in Python 3.13; removal scheduled for Python 3.15")
|
||||||
def SetPointerType(pointer: type[_Pointer[Any]], cls: Any) -> None: ...
|
def SetPointerType(pointer: type[_Pointer[Any]], cls: _CTypeBaseType) -> None: ...
|
||||||
def ARRAY(typ: _CT, len: int) -> Array[_CT]: ... # Soft Deprecated, no plans to remove
|
def ARRAY(typ: _CT, len: int) -> Array[_CT]: ... # Soft Deprecated, no plans to remove
|
||||||
|
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
|
|
|
@ -9,10 +9,13 @@ from ctypes.macholib.framework import framework_info as framework_info
|
||||||
__all__ = ["dyld_find", "framework_find", "framework_info", "dylib_info"]
|
__all__ = ["dyld_find", "framework_find", "framework_info", "dylib_info"]
|
||||||
|
|
||||||
def dyld_find(name: str, executable_path: str | None = None, env: Mapping[str, str] | None = None) -> str:
|
def dyld_find(name: str, executable_path: str | None = None, env: Mapping[str, str] | None = None) -> str:
|
||||||
"""Find a library or framework using dyld semantics"""
|
"""
|
||||||
|
Find a library or framework using dyld semantics
|
||||||
|
"""
|
||||||
|
|
||||||
def framework_find(fn: str, executable_path: str | None = None, env: Mapping[str, str] | None = None) -> str:
|
def framework_find(fn: str, executable_path: str | None = None, env: Mapping[str, str] | None = None) -> str:
|
||||||
"""Find a framework using dyld semantics in a very loose manner.
|
"""
|
||||||
|
Find a framework using dyld semantics in a very loose manner.
|
||||||
|
|
||||||
Will take input such as:
|
Will take input such as:
|
||||||
Python
|
Python
|
||||||
|
|
|
@ -16,7 +16,8 @@ class _DylibInfo(TypedDict):
|
||||||
suffix: str | None
|
suffix: str | None
|
||||||
|
|
||||||
def dylib_info(filename: str) -> _DylibInfo | None:
|
def dylib_info(filename: str) -> _DylibInfo | None:
|
||||||
"""A dylib name can take one of the following four forms:
|
"""
|
||||||
|
A dylib name can take one of the following four forms:
|
||||||
Location/Name.SomeVersion_Suffix.dylib
|
Location/Name.SomeVersion_Suffix.dylib
|
||||||
Location/Name.SomeVersion.dylib
|
Location/Name.SomeVersion.dylib
|
||||||
Location/Name_Suffix.dylib
|
Location/Name_Suffix.dylib
|
||||||
|
|
|
@ -16,7 +16,8 @@ class _FrameworkInfo(TypedDict):
|
||||||
suffix: str | None
|
suffix: str | None
|
||||||
|
|
||||||
def framework_info(filename: str) -> _FrameworkInfo | None:
|
def framework_info(filename: str) -> _FrameworkInfo | None:
|
||||||
"""A framework name can take one of the following four forms:
|
"""
|
||||||
|
A framework name can take one of the following four forms:
|
||||||
Location/Name.framework/Versions/SomeVersion/Name_Suffix
|
Location/Name.framework/Versions/SomeVersion/Name_Suffix
|
||||||
Location/Name.framework/Versions/SomeVersion/Name
|
Location/Name.framework/Versions/SomeVersion/Name
|
||||||
Location/Name.framework/Name_Suffix
|
Location/Name.framework/Name_Suffix
|
||||||
|
|
|
@ -193,13 +193,13 @@ class time:
|
||||||
resolution: ClassVar[timedelta]
|
resolution: ClassVar[timedelta]
|
||||||
def __new__(
|
def __new__(
|
||||||
cls,
|
cls,
|
||||||
hour: SupportsIndex = ...,
|
hour: SupportsIndex = 0,
|
||||||
minute: SupportsIndex = ...,
|
minute: SupportsIndex = 0,
|
||||||
second: SupportsIndex = ...,
|
second: SupportsIndex = 0,
|
||||||
microsecond: SupportsIndex = ...,
|
microsecond: SupportsIndex = 0,
|
||||||
tzinfo: _TzInfo | None = ...,
|
tzinfo: _TzInfo | None = None,
|
||||||
*,
|
*,
|
||||||
fold: int = ...,
|
fold: int = 0,
|
||||||
) -> Self: ...
|
) -> Self: ...
|
||||||
@property
|
@property
|
||||||
def hour(self) -> int: ...
|
def hour(self) -> int: ...
|
||||||
|
@ -219,7 +219,7 @@ class time:
|
||||||
def __gt__(self, value: time, /) -> bool: ...
|
def __gt__(self, value: time, /) -> bool: ...
|
||||||
def __eq__(self, value: object, /) -> bool: ...
|
def __eq__(self, value: object, /) -> bool: ...
|
||||||
def __hash__(self) -> int: ...
|
def __hash__(self) -> int: ...
|
||||||
def isoformat(self, timespec: str = ...) -> str:
|
def isoformat(self, timespec: str = "auto") -> str:
|
||||||
"""Return string in ISO 8601 format, [HH[:MM[:SS[.mmm[uuu]]]]][+HH:MM].
|
"""Return string in ISO 8601 format, [HH[:MM[:SS[.mmm[uuu]]]]][+HH:MM].
|
||||||
|
|
||||||
The optional argument timespec specifies the number of additional terms
|
The optional argument timespec specifies the number of additional terms
|
||||||
|
@ -298,13 +298,13 @@ class timedelta:
|
||||||
resolution: ClassVar[timedelta]
|
resolution: ClassVar[timedelta]
|
||||||
def __new__(
|
def __new__(
|
||||||
cls,
|
cls,
|
||||||
days: float = ...,
|
days: float = 0,
|
||||||
seconds: float = ...,
|
seconds: float = 0,
|
||||||
microseconds: float = ...,
|
microseconds: float = 0,
|
||||||
milliseconds: float = ...,
|
milliseconds: float = 0,
|
||||||
minutes: float = ...,
|
minutes: float = 0,
|
||||||
hours: float = ...,
|
hours: float = 0,
|
||||||
weeks: float = ...,
|
weeks: float = 0,
|
||||||
) -> Self: ...
|
) -> Self: ...
|
||||||
@property
|
@property
|
||||||
def days(self) -> int:
|
def days(self) -> int:
|
||||||
|
@ -390,13 +390,13 @@ class datetime(date):
|
||||||
year: SupportsIndex,
|
year: SupportsIndex,
|
||||||
month: SupportsIndex,
|
month: SupportsIndex,
|
||||||
day: SupportsIndex,
|
day: SupportsIndex,
|
||||||
hour: SupportsIndex = ...,
|
hour: SupportsIndex = 0,
|
||||||
minute: SupportsIndex = ...,
|
minute: SupportsIndex = 0,
|
||||||
second: SupportsIndex = ...,
|
second: SupportsIndex = 0,
|
||||||
microsecond: SupportsIndex = ...,
|
microsecond: SupportsIndex = 0,
|
||||||
tzinfo: _TzInfo | None = ...,
|
tzinfo: _TzInfo | None = None,
|
||||||
*,
|
*,
|
||||||
fold: int = ...,
|
fold: int = 0,
|
||||||
) -> Self: ...
|
) -> Self: ...
|
||||||
@property
|
@property
|
||||||
def hour(self) -> int: ...
|
def hour(self) -> int: ...
|
||||||
|
@ -415,11 +415,11 @@ class datetime(date):
|
||||||
# meaning it is only *safe* to pass it as a keyword argument on 3.12+
|
# meaning it is only *safe* to pass it as a keyword argument on 3.12+
|
||||||
if sys.version_info >= (3, 12):
|
if sys.version_info >= (3, 12):
|
||||||
@classmethod
|
@classmethod
|
||||||
def fromtimestamp(cls, timestamp: float, tz: _TzInfo | None = ...) -> Self:
|
def fromtimestamp(cls, timestamp: float, tz: _TzInfo | None = None) -> Self:
|
||||||
"""timestamp[, tz] -> tz's local time from POSIX timestamp."""
|
"""timestamp[, tz] -> tz's local time from POSIX timestamp."""
|
||||||
else:
|
else:
|
||||||
@classmethod
|
@classmethod
|
||||||
def fromtimestamp(cls, timestamp: float, /, tz: _TzInfo | None = ...) -> Self:
|
def fromtimestamp(cls, timestamp: float, /, tz: _TzInfo | None = None) -> Self:
|
||||||
"""timestamp[, tz] -> tz's local time from POSIX timestamp."""
|
"""timestamp[, tz] -> tz's local time from POSIX timestamp."""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -492,10 +492,10 @@ class datetime(date):
|
||||||
) -> Self:
|
) -> Self:
|
||||||
"""Return datetime with new specified fields."""
|
"""Return datetime with new specified fields."""
|
||||||
|
|
||||||
def astimezone(self, tz: _TzInfo | None = ...) -> Self:
|
def astimezone(self, tz: _TzInfo | None = None) -> Self:
|
||||||
"""tz -> convert to local time in new timezone tz"""
|
"""tz -> convert to local time in new timezone tz"""
|
||||||
|
|
||||||
def isoformat(self, sep: str = ..., timespec: str = ...) -> str:
|
def isoformat(self, sep: str = "T", timespec: str = "auto") -> str:
|
||||||
"""[sep] -> string in ISO 8601 format, YYYY-MM-DDT[HH[:MM[:SS[.mmm[uuu]]]]][+HH:MM].
|
"""[sep] -> string in ISO 8601 format, YYYY-MM-DDT[HH[:MM[:SS[.mmm[uuu]]]]][+HH:MM].
|
||||||
sep is used to separate the year from the time, and defaults to 'T'.
|
sep is used to separate the year from the time, and defaults to 'T'.
|
||||||
The optional argument timespec specifies the number of additional terms
|
The optional argument timespec specifies the number of additional terms
|
||||||
|
|
|
@ -66,6 +66,7 @@ if sys.version_info >= (3, 11):
|
||||||
The optional mode argument is the UNIX mode of the file, used only when
|
The optional mode argument is the UNIX mode of the file, used only when
|
||||||
the database has to be created. It defaults to octal code 0o666 (and
|
the database has to be created. It defaults to octal code 0o666 (and
|
||||||
will be modified by the prevailing umask).
|
will be modified by the prevailing umask).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -81,4 +82,5 @@ else:
|
||||||
The optional mode argument is the UNIX mode of the file, used only when
|
The optional mode argument is the UNIX mode of the file, used only when
|
||||||
the database has to be created. It defaults to octal code 0o666 (and
|
the database has to be created. It defaults to octal code 0o666 (and
|
||||||
will be modified by the prevailing umask).
|
will be modified by the prevailing umask).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -175,6 +175,7 @@ class Decimal:
|
||||||
or another Decimal object. If no value is given, return Decimal('0'). The
|
or another Decimal object. If no value is given, return Decimal('0'). The
|
||||||
context does not affect the conversion and is only passed to determine if
|
context does not affect the conversion and is only passed to determine if
|
||||||
the InvalidOperation trap is active.
|
the InvalidOperation trap is active.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __new__(cls, value: _DecimalNew = "0", context: Context | None = None) -> Self: ...
|
def __new__(cls, value: _DecimalNew = "0", context: Context | None = None) -> Self: ...
|
||||||
|
@ -189,6 +190,8 @@ class Decimal:
|
||||||
Decimal('0.1000000000000000055511151231257827021181583404541015625')
|
Decimal('0.1000000000000000055511151231257827021181583404541015625')
|
||||||
>>> Decimal.from_number(Decimal('3.14')) # another decimal instance
|
>>> Decimal.from_number(Decimal('3.14')) # another decimal instance
|
||||||
Decimal('3.14')
|
Decimal('3.14')
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -205,6 +208,8 @@ class Decimal:
|
||||||
Decimal('Infinity')
|
Decimal('Infinity')
|
||||||
>>> Decimal.from_float(float('-inf'))
|
>>> Decimal.from_float(float('-inf'))
|
||||||
Decimal('-Infinity')
|
Decimal('-Infinity')
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __bool__(self) -> bool:
|
def __bool__(self) -> bool:
|
||||||
|
@ -217,6 +222,7 @@ class Decimal:
|
||||||
a < b ==> Decimal('-1')
|
a < b ==> Decimal('-1')
|
||||||
a == b ==> Decimal('0')
|
a == b ==> Decimal('0')
|
||||||
a > b ==> Decimal('1')
|
a > b ==> Decimal('1')
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __hash__(self) -> int: ...
|
def __hash__(self) -> int: ...
|
||||||
|
@ -229,6 +235,7 @@ class Decimal:
|
||||||
Return a pair of integers, whose ratio is exactly equal to the original
|
Return a pair of integers, whose ratio is exactly equal to the original
|
||||||
Decimal and with a positive denominator. The ratio is in lowest terms.
|
Decimal and with a positive denominator. The ratio is in lowest terms.
|
||||||
Raise OverflowError on infinities and a ValueError on NaNs.
|
Raise OverflowError on infinities and a ValueError on NaNs.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def to_eng_string(self, context: Context | None = None) -> str:
|
def to_eng_string(self, context: Context | None = None) -> str:
|
||||||
|
@ -238,6 +245,7 @@ class Decimal:
|
||||||
|
|
||||||
The value of context.capitals determines whether the exponent sign is lower
|
The value of context.capitals determines whether the exponent sign is lower
|
||||||
or upper case. Otherwise, the context does not affect the operation.
|
or upper case. Otherwise, the context does not affect the operation.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __abs__(self) -> Decimal:
|
def __abs__(self) -> Decimal:
|
||||||
|
@ -307,6 +315,7 @@ class Decimal:
|
||||||
if two integers are equally near then the even one is chosen.
|
if two integers are equally near then the even one is chosen.
|
||||||
|
|
||||||
If the result is zero then its sign will be the sign of self.
|
If the result is zero then its sign will be the sign of self.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __float__(self) -> float:
|
def __float__(self) -> float:
|
||||||
|
@ -336,6 +345,8 @@ class Decimal:
|
||||||
|
|
||||||
>>> Decimal(2).fma(3, 5)
|
>>> Decimal(2).fma(3, 5)
|
||||||
Decimal('11')
|
Decimal('11')
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __rpow__(self, value: _Decimal, mod: Context | None = None, /) -> Decimal:
|
def __rpow__(self, value: _Decimal, mod: Context | None = None, /) -> Decimal:
|
||||||
|
@ -347,6 +358,7 @@ class Decimal:
|
||||||
for producing canonical values for members of an equivalence class.
|
for producing canonical values for members of an equivalence class.
|
||||||
For example, Decimal('32.100') and Decimal('0.321000e+2') both normalize
|
For example, Decimal('32.100') and Decimal('0.321000e+2') both normalize
|
||||||
to the equivalent value Decimal('32.1').
|
to the equivalent value Decimal('32.1').
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def quantize(self, exp: _Decimal, rounding: str | None = None, context: Context | None = None) -> Decimal:
|
def quantize(self, exp: _Decimal, rounding: str | None = None, context: Context | None = None) -> Decimal:
|
||||||
|
@ -368,6 +380,7 @@ class Decimal:
|
||||||
rounding may be necessary. In this case, the rounding mode is determined by the
|
rounding may be necessary. In this case, the rounding mode is determined by the
|
||||||
rounding argument if given, else by the given context argument; if neither
|
rounding argument if given, else by the given context argument; if neither
|
||||||
argument is given, the rounding mode of the current thread's context is used.
|
argument is given, the rounding mode of the current thread's context is used.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def same_quantum(self, other: _Decimal, context: Context | None = None) -> bool:
|
def same_quantum(self, other: _Decimal, context: Context | None = None) -> bool:
|
||||||
|
@ -376,6 +389,7 @@ class Decimal:
|
||||||
This operation is unaffected by context and is quiet: no flags are changed
|
This operation is unaffected by context and is quiet: no flags are changed
|
||||||
and no rounding is performed. As an exception, the C version may raise
|
and no rounding is performed. As an exception, the C version may raise
|
||||||
InvalidOperation if the second operand cannot be converted exactly.
|
InvalidOperation if the second operand cannot be converted exactly.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def to_integral_exact(self, rounding: str | None = None, context: Context | None = None) -> Decimal:
|
def to_integral_exact(self, rounding: str | None = None, context: Context | None = None) -> Decimal:
|
||||||
|
@ -383,6 +397,7 @@ class Decimal:
|
||||||
rounding occurs. The rounding mode is determined by the rounding parameter
|
rounding occurs. The rounding mode is determined by the rounding parameter
|
||||||
if given, else by the given context. If neither parameter is given, then the
|
if given, else by the given context. If neither parameter is given, then the
|
||||||
rounding mode of the current default context is used.
|
rounding mode of the current default context is used.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def to_integral_value(self, rounding: str | None = None, context: Context | None = None) -> Decimal:
|
def to_integral_value(self, rounding: str | None = None, context: Context | None = None) -> Decimal:
|
||||||
|
@ -390,26 +405,31 @@ class Decimal:
|
||||||
rounding mode is determined by the rounding parameter if given, else by
|
rounding mode is determined by the rounding parameter if given, else by
|
||||||
the given context. If neither parameter is given, then the rounding mode
|
the given context. If neither parameter is given, then the rounding mode
|
||||||
of the current default context is used.
|
of the current default context is used.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def to_integral(self, rounding: str | None = None, context: Context | None = None) -> Decimal:
|
def to_integral(self, rounding: str | None = None, context: Context | None = None) -> Decimal:
|
||||||
"""Identical to the to_integral_value() method. The to_integral() name has been
|
"""Identical to the to_integral_value() method. The to_integral() name has been
|
||||||
kept for compatibility with older versions.
|
kept for compatibility with older versions.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def sqrt(self, context: Context | None = None) -> Decimal:
|
def sqrt(self, context: Context | None = None) -> Decimal:
|
||||||
"""Return the square root of the argument to full precision. The result is
|
"""Return the square root of the argument to full precision. The result is
|
||||||
correctly rounded using the ROUND_HALF_EVEN rounding mode.
|
correctly rounded using the ROUND_HALF_EVEN rounding mode.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def max(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
def max(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
||||||
"""Maximum of self and other. If one operand is a quiet NaN and the other is
|
"""Maximum of self and other. If one operand is a quiet NaN and the other is
|
||||||
numeric, the numeric operand is returned.
|
numeric, the numeric operand is returned.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def min(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
def min(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
||||||
"""Minimum of self and other. If one operand is a quiet NaN and the other is
|
"""Minimum of self and other. If one operand is a quiet NaN and the other is
|
||||||
numeric, the numeric operand is returned.
|
numeric, the numeric operand is returned.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def adjusted(self) -> int:
|
def adjusted(self) -> int:
|
||||||
|
@ -419,6 +439,7 @@ class Decimal:
|
||||||
"""Return the canonical encoding of the argument. Currently, the encoding
|
"""Return the canonical encoding of the argument. Currently, the encoding
|
||||||
of a Decimal instance is always canonical, so this operation returns its
|
of a Decimal instance is always canonical, so this operation returns its
|
||||||
argument unchanged.
|
argument unchanged.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def compare_signal(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
def compare_signal(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
||||||
|
@ -443,6 +464,7 @@ class Decimal:
|
||||||
This operation is unaffected by context and is quiet: no flags are changed
|
This operation is unaffected by context and is quiet: no flags are changed
|
||||||
and no rounding is performed. As an exception, the C version may raise
|
and no rounding is performed. As an exception, the C version may raise
|
||||||
InvalidOperation if the second operand cannot be converted exactly.
|
InvalidOperation if the second operand cannot be converted exactly.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def compare_total_mag(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
def compare_total_mag(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
||||||
|
@ -454,16 +476,19 @@ class Decimal:
|
||||||
This operation is unaffected by context and is quiet: no flags are changed
|
This operation is unaffected by context and is quiet: no flags are changed
|
||||||
and no rounding is performed. As an exception, the C version may raise
|
and no rounding is performed. As an exception, the C version may raise
|
||||||
InvalidOperation if the second operand cannot be converted exactly.
|
InvalidOperation if the second operand cannot be converted exactly.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def copy_abs(self) -> Decimal:
|
def copy_abs(self) -> Decimal:
|
||||||
"""Return the absolute value of the argument. This operation is unaffected by
|
"""Return the absolute value of the argument. This operation is unaffected by
|
||||||
context and is quiet: no flags are changed and no rounding is performed.
|
context and is quiet: no flags are changed and no rounding is performed.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def copy_negate(self) -> Decimal:
|
def copy_negate(self) -> Decimal:
|
||||||
"""Return the negation of the argument. This operation is unaffected by context
|
"""Return the negation of the argument. This operation is unaffected by context
|
||||||
and is quiet: no flags are changed and no rounding is performed.
|
and is quiet: no flags are changed and no rounding is performed.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def copy_sign(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
def copy_sign(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
||||||
|
@ -476,39 +501,46 @@ class Decimal:
|
||||||
This operation is unaffected by context and is quiet: no flags are changed
|
This operation is unaffected by context and is quiet: no flags are changed
|
||||||
and no rounding is performed. As an exception, the C version may raise
|
and no rounding is performed. As an exception, the C version may raise
|
||||||
InvalidOperation if the second operand cannot be converted exactly.
|
InvalidOperation if the second operand cannot be converted exactly.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def exp(self, context: Context | None = None) -> Decimal:
|
def exp(self, context: Context | None = None) -> Decimal:
|
||||||
"""Return the value of the (natural) exponential function e**x at the given
|
"""Return the value of the (natural) exponential function e**x at the given
|
||||||
number. The function always uses the ROUND_HALF_EVEN mode and the result
|
number. The function always uses the ROUND_HALF_EVEN mode and the result
|
||||||
is correctly rounded.
|
is correctly rounded.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def is_canonical(self) -> bool:
|
def is_canonical(self) -> bool:
|
||||||
"""Return True if the argument is canonical and False otherwise. Currently,
|
"""Return True if the argument is canonical and False otherwise. Currently,
|
||||||
a Decimal instance is always canonical, so this operation always returns
|
a Decimal instance is always canonical, so this operation always returns
|
||||||
True.
|
True.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def is_finite(self) -> bool:
|
def is_finite(self) -> bool:
|
||||||
"""Return True if the argument is a finite number, and False if the argument
|
"""Return True if the argument is a finite number, and False if the argument
|
||||||
is infinite or a NaN.
|
is infinite or a NaN.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def is_infinite(self) -> bool:
|
def is_infinite(self) -> bool:
|
||||||
"""Return True if the argument is either positive or negative infinity and
|
"""Return True if the argument is either positive or negative infinity and
|
||||||
False otherwise.
|
False otherwise.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def is_nan(self) -> bool:
|
def is_nan(self) -> bool:
|
||||||
"""Return True if the argument is a (quiet or signaling) NaN and False
|
"""Return True if the argument is a (quiet or signaling) NaN and False
|
||||||
otherwise.
|
otherwise.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def is_normal(self, context: Context | None = None) -> bool:
|
def is_normal(self, context: Context | None = None) -> bool:
|
||||||
"""Return True if the argument is a normal finite non-zero number with an
|
"""Return True if the argument is a normal finite non-zero number with an
|
||||||
adjusted exponent greater than or equal to Emin. Return False if the
|
adjusted exponent greater than or equal to Emin. Return False if the
|
||||||
argument is zero, subnormal, infinite or a NaN.
|
argument is zero, subnormal, infinite or a NaN.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def is_qnan(self) -> bool:
|
def is_qnan(self) -> bool:
|
||||||
|
@ -517,6 +549,7 @@ class Decimal:
|
||||||
def is_signed(self) -> bool:
|
def is_signed(self) -> bool:
|
||||||
"""Return True if the argument has a negative sign and False otherwise.
|
"""Return True if the argument has a negative sign and False otherwise.
|
||||||
Note that both zeros and NaNs can carry signs.
|
Note that both zeros and NaNs can carry signs.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def is_snan(self) -> bool:
|
def is_snan(self) -> bool:
|
||||||
|
@ -526,21 +559,25 @@ class Decimal:
|
||||||
"""Return True if the argument is subnormal, and False otherwise. A number is
|
"""Return True if the argument is subnormal, and False otherwise. A number is
|
||||||
subnormal if it is non-zero, finite, and has an adjusted exponent less
|
subnormal if it is non-zero, finite, and has an adjusted exponent less
|
||||||
than Emin.
|
than Emin.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def is_zero(self) -> bool:
|
def is_zero(self) -> bool:
|
||||||
"""Return True if the argument is a (positive or negative) zero and False
|
"""Return True if the argument is a (positive or negative) zero and False
|
||||||
otherwise.
|
otherwise.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def ln(self, context: Context | None = None) -> Decimal:
|
def ln(self, context: Context | None = None) -> Decimal:
|
||||||
"""Return the natural (base e) logarithm of the operand. The function always
|
"""Return the natural (base e) logarithm of the operand. The function always
|
||||||
uses the ROUND_HALF_EVEN mode and the result is correctly rounded.
|
uses the ROUND_HALF_EVEN mode and the result is correctly rounded.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def log10(self, context: Context | None = None) -> Decimal:
|
def log10(self, context: Context | None = None) -> Decimal:
|
||||||
"""Return the base ten logarithm of the operand. The function always uses the
|
"""Return the base ten logarithm of the operand. The function always uses the
|
||||||
ROUND_HALF_EVEN mode and the result is correctly rounded.
|
ROUND_HALF_EVEN mode and the result is correctly rounded.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def logb(self, context: Context | None = None) -> Decimal:
|
def logb(self, context: Context | None = None) -> Decimal:
|
||||||
|
@ -548,6 +585,7 @@ class Decimal:
|
||||||
Decimal instance. If the operand is a zero, then Decimal('-Infinity') is
|
Decimal instance. If the operand is a zero, then Decimal('-Infinity') is
|
||||||
returned and the DivisionByZero condition is raised. If the operand is
|
returned and the DivisionByZero condition is raised. If the operand is
|
||||||
an infinity then Decimal('Infinity') is returned.
|
an infinity then Decimal('Infinity') is returned.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def logical_and(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
def logical_and(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
||||||
|
@ -565,23 +603,27 @@ class Decimal:
|
||||||
def max_mag(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
def max_mag(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
||||||
"""Similar to the max() method, but the comparison is done using the absolute
|
"""Similar to the max() method, but the comparison is done using the absolute
|
||||||
values of the operands.
|
values of the operands.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def min_mag(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
def min_mag(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
||||||
"""Similar to the min() method, but the comparison is done using the absolute
|
"""Similar to the min() method, but the comparison is done using the absolute
|
||||||
values of the operands.
|
values of the operands.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def next_minus(self, context: Context | None = None) -> Decimal:
|
def next_minus(self, context: Context | None = None) -> Decimal:
|
||||||
"""Return the largest number representable in the given context (or in the
|
"""Return the largest number representable in the given context (or in the
|
||||||
current default context if no context is given) that is smaller than the
|
current default context if no context is given) that is smaller than the
|
||||||
given operand.
|
given operand.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def next_plus(self, context: Context | None = None) -> Decimal:
|
def next_plus(self, context: Context | None = None) -> Decimal:
|
||||||
"""Return the smallest number representable in the given context (or in the
|
"""Return the smallest number representable in the given context (or in the
|
||||||
current default context if no context is given) that is larger than the
|
current default context if no context is given) that is larger than the
|
||||||
given operand.
|
given operand.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def next_toward(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
def next_toward(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
||||||
|
@ -589,6 +631,7 @@ class Decimal:
|
||||||
operand in the direction of the second operand. If both operands are
|
operand in the direction of the second operand. If both operands are
|
||||||
numerically equal, return a copy of the first operand with the sign set
|
numerically equal, return a copy of the first operand with the sign set
|
||||||
to be the same as the sign of the second operand.
|
to be the same as the sign of the second operand.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def number_class(self, context: Context | None = None) -> str:
|
def number_class(self, context: Context | None = None) -> str:
|
||||||
|
@ -605,11 +648,14 @@ class Decimal:
|
||||||
* '+Infinity', indicating that the operand is positive infinity.
|
* '+Infinity', indicating that the operand is positive infinity.
|
||||||
* 'NaN', indicating that the operand is a quiet NaN (Not a Number).
|
* 'NaN', indicating that the operand is a quiet NaN (Not a Number).
|
||||||
* 'sNaN', indicating that the operand is a signaling NaN.
|
* 'sNaN', indicating that the operand is a signaling NaN.
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def radix(self) -> Decimal:
|
def radix(self) -> Decimal:
|
||||||
"""Return Decimal(10), the radix (base) in which the Decimal class does
|
"""Return Decimal(10), the radix (base) in which the Decimal class does
|
||||||
all its arithmetic. Included for compatibility with the specification.
|
all its arithmetic. Included for compatibility with the specification.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def rotate(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
def rotate(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
||||||
|
@ -621,12 +667,14 @@ class Decimal:
|
||||||
The coefficient of the first operand is padded on the left with zeros to
|
The coefficient of the first operand is padded on the left with zeros to
|
||||||
length precision if necessary. The sign and exponent of the first operand are
|
length precision if necessary. The sign and exponent of the first operand are
|
||||||
unchanged.
|
unchanged.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def scaleb(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
def scaleb(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
||||||
"""Return the first operand with the exponent adjusted the second. Equivalently,
|
"""Return the first operand with the exponent adjusted the second. Equivalently,
|
||||||
return the first operand multiplied by 10**other. The second operand must be
|
return the first operand multiplied by 10**other. The second operand must be
|
||||||
an integer.
|
an integer.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def shift(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
def shift(self, other: _Decimal, context: Context | None = None) -> Decimal:
|
||||||
|
@ -637,6 +685,7 @@ class Decimal:
|
||||||
positive, then the shift is to the left; otherwise the shift is to the
|
positive, then the shift is to the left; otherwise the shift is to the
|
||||||
right. Digits shifted into the coefficient are zeros. The sign and exponent
|
right. Digits shifted into the coefficient are zeros. The sign and exponent
|
||||||
of the first operand are unchanged.
|
of the first operand are unchanged.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __reduce__(self) -> tuple[type[Self], tuple[str]]: ...
|
def __reduce__(self) -> tuple[type[Self], tuple[str]]: ...
|
||||||
|
@ -654,6 +703,8 @@ class Context:
|
||||||
... traps=[InvalidOperation, DivisionByZero, Overflow],
|
... traps=[InvalidOperation, DivisionByZero, Overflow],
|
||||||
... flags=[])
|
... flags=[])
|
||||||
>>>
|
>>>
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# TODO: Context doesn't allow you to delete *any* attributes from instances of the class at runtime,
|
# TODO: Context doesn't allow you to delete *any* attributes from instances of the class at runtime,
|
||||||
|
@ -696,22 +747,26 @@ class Context:
|
||||||
def Etiny(self) -> int:
|
def Etiny(self) -> int:
|
||||||
"""Return a value equal to Emin - prec + 1, which is the minimum exponent value
|
"""Return a value equal to Emin - prec + 1, which is the minimum exponent value
|
||||||
for subnormal results. When underflow occurs, the exponent is set to Etiny.
|
for subnormal results. When underflow occurs, the exponent is set to Etiny.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def Etop(self) -> int:
|
def Etop(self) -> int:
|
||||||
"""Return a value equal to Emax - prec + 1. This is the maximum exponent
|
"""Return a value equal to Emax - prec + 1. This is the maximum exponent
|
||||||
if the _clamp field of the context is set to 1 (IEEE clamp mode). Etop()
|
if the _clamp field of the context is set to 1 (IEEE clamp mode). Etop()
|
||||||
must not be negative.
|
must not be negative.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def create_decimal(self, num: _DecimalNew = "0", /) -> Decimal:
|
def create_decimal(self, num: _DecimalNew = "0", /) -> Decimal:
|
||||||
"""Create a new Decimal instance from num, using self as the context. Unlike the
|
"""Create a new Decimal instance from num, using self as the context. Unlike the
|
||||||
Decimal constructor, this function observes the context limits.
|
Decimal constructor, this function observes the context limits.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def create_decimal_from_float(self, f: float, /) -> Decimal:
|
def create_decimal_from_float(self, f: float, /) -> Decimal:
|
||||||
"""Create a new Decimal instance from float f. Unlike the Decimal.from_float()
|
"""Create a new Decimal instance from float f. Unlike the Decimal.from_float()
|
||||||
class method, this function observes the context limits.
|
class method, this function observes the context limits.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def abs(self, x: _Decimal, /) -> Decimal:
|
def abs(self, x: _Decimal, /) -> Decimal:
|
||||||
|
@ -828,6 +883,7 @@ class Context:
|
||||||
def minus(self, x: _Decimal, /) -> Decimal:
|
def minus(self, x: _Decimal, /) -> Decimal:
|
||||||
"""Minus corresponds to the unary prefix minus operator in Python, but applies
|
"""Minus corresponds to the unary prefix minus operator in Python, but applies
|
||||||
the context to the result.
|
the context to the result.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def multiply(self, x: _Decimal, y: _Decimal, /) -> Decimal:
|
def multiply(self, x: _Decimal, y: _Decimal, /) -> Decimal:
|
||||||
|
@ -851,6 +907,7 @@ class Context:
|
||||||
def plus(self, x: _Decimal, /) -> Decimal:
|
def plus(self, x: _Decimal, /) -> Decimal:
|
||||||
"""Plus corresponds to the unary prefix plus operator in Python, but applies
|
"""Plus corresponds to the unary prefix plus operator in Python, but applies
|
||||||
the context to the result.
|
the context to the result.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def power(self, a: _Decimal, b: _Decimal, modulo: _Decimal | None = None) -> Decimal:
|
def power(self, a: _Decimal, b: _Decimal, modulo: _Decimal | None = None) -> Decimal:
|
||||||
|
@ -867,6 +924,8 @@ class Context:
|
||||||
* 'b' must be nonnegative
|
* 'b' must be nonnegative
|
||||||
* at least one of 'a' or 'b' must be nonzero
|
* at least one of 'a' or 'b' must be nonzero
|
||||||
* modulo must be nonzero and less than 10**prec in absolute value
|
* modulo must be nonzero and less than 10**prec in absolute value
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def quantize(self, x: _Decimal, y: _Decimal, /) -> Decimal:
|
def quantize(self, x: _Decimal, y: _Decimal, /) -> Decimal:
|
||||||
|
@ -878,11 +937,13 @@ class Context:
|
||||||
def remainder(self, x: _Decimal, y: _Decimal, /) -> Decimal:
|
def remainder(self, x: _Decimal, y: _Decimal, /) -> Decimal:
|
||||||
"""Return the remainder from integer division. The sign of the result,
|
"""Return the remainder from integer division. The sign of the result,
|
||||||
if non-zero, is the same as that of the original dividend.
|
if non-zero, is the same as that of the original dividend.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def remainder_near(self, x: _Decimal, y: _Decimal, /) -> Decimal:
|
def remainder_near(self, x: _Decimal, y: _Decimal, /) -> Decimal:
|
||||||
"""Return x - y * n, where n is the integer nearest the exact value of x / y
|
"""Return x - y * n, where n is the integer nearest the exact value of x / y
|
||||||
(if the result is 0 then its sign will be the sign of x).
|
(if the result is 0 then its sign will be the sign of x).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def rotate(self, x: _Decimal, y: _Decimal, /) -> Decimal:
|
def rotate(self, x: _Decimal, y: _Decimal, /) -> Decimal:
|
||||||
|
|
|
@ -26,6 +26,8 @@ Class HtmlDiff:
|
||||||
For producing HTML side by side comparison with change highlights.
|
For producing HTML side by side comparison with change highlights.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
from collections.abc import Callable, Iterable, Iterator, Sequence
|
from collections.abc import Callable, Iterable, Iterator, Sequence
|
||||||
from types import GenericAlias
|
from types import GenericAlias
|
||||||
from typing import Any, AnyStr, Generic, Literal, NamedTuple, TypeVar, overload
|
from typing import Any, AnyStr, Generic, Literal, NamedTuple, TypeVar, overload
|
||||||
|
@ -55,7 +57,8 @@ class Match(NamedTuple):
|
||||||
size: int
|
size: int
|
||||||
|
|
||||||
class SequenceMatcher(Generic[_T]):
|
class SequenceMatcher(Generic[_T]):
|
||||||
"""SequenceMatcher is a flexible class for comparing pairs of sequences of
|
"""
|
||||||
|
SequenceMatcher is a flexible class for comparing pairs of sequences of
|
||||||
any type, so long as the sequence elements are hashable. The basic
|
any type, so long as the sequence elements are hashable. The basic
|
||||||
algorithm predates, and is a little fancier than, an algorithm
|
algorithm predates, and is a little fancier than, an algorithm
|
||||||
published in the late 1980's by Ratcliff and Obershelp under the
|
published in the late 1980's by Ratcliff and Obershelp under the
|
||||||
|
@ -411,7 +414,8 @@ def get_close_matches(
|
||||||
) -> list[Sequence[_T]]: ...
|
) -> list[Sequence[_T]]: ...
|
||||||
|
|
||||||
class Differ:
|
class Differ:
|
||||||
"""Differ is a class for comparing sequences of lines of text, and
|
"""
|
||||||
|
Differ is a class for comparing sequences of lines of text, and
|
||||||
producing human-readable differences or deltas. Differ uses
|
producing human-readable differences or deltas. Differ uses
|
||||||
SequenceMatcher both to compare sequences of lines, and to compare
|
SequenceMatcher both to compare sequences of lines, and to compare
|
||||||
sequences of characters within similar (near-matching) lines.
|
sequences of characters within similar (near-matching) lines.
|
||||||
|
@ -496,7 +500,8 @@ class Differ:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, linejunk: Callable[[str], bool] | None = None, charjunk: Callable[[str], bool] | None = None) -> None:
|
def __init__(self, linejunk: Callable[[str], bool] | None = None, charjunk: Callable[[str], bool] | None = None) -> None:
|
||||||
"""Construct a text differencer, with optional filters.
|
"""
|
||||||
|
Construct a text differencer, with optional filters.
|
||||||
|
|
||||||
The two optional keyword parameters are for filter functions:
|
The two optional keyword parameters are for filter functions:
|
||||||
|
|
||||||
|
@ -515,7 +520,8 @@ class Differ:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def compare(self, a: Sequence[str], b: Sequence[str]) -> Iterator[str]:
|
def compare(self, a: Sequence[str], b: Sequence[str]) -> Iterator[str]:
|
||||||
"""Compare two sequences of lines; generate the resulting delta.
|
"""
|
||||||
|
Compare two sequences of lines; generate the resulting delta.
|
||||||
|
|
||||||
Each sequence must contain individual single-line strings ending with
|
Each sequence must contain individual single-line strings ending with
|
||||||
newlines. Such sequences can be obtained from the `readlines()` method
|
newlines. Such sequences can be obtained from the `readlines()` method
|
||||||
|
@ -539,8 +545,25 @@ class Differ:
|
||||||
+ emu
|
+ emu
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def IS_LINE_JUNK(line: str, pat: Any = ...) -> bool: # pat is undocumented
|
if sys.version_info >= (3, 14):
|
||||||
"""Return True for ignorable line: if `line` is blank or contains a single '#'.
|
def IS_LINE_JUNK(line: str, pat: Callable[[str], re.Match[str] | None] | None = None) -> bool:
|
||||||
|
"""
|
||||||
|
Return True for ignorable line: if `line` is blank or contains a single '#'.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
>>> IS_LINE_JUNK('\\n')
|
||||||
|
True
|
||||||
|
>>> IS_LINE_JUNK(' # \\n')
|
||||||
|
True
|
||||||
|
>>> IS_LINE_JUNK('hello\\n')
|
||||||
|
False
|
||||||
|
"""
|
||||||
|
|
||||||
|
else:
|
||||||
|
def IS_LINE_JUNK(line: str, pat: Callable[[str], re.Match[str] | None] = ...) -> bool:
|
||||||
|
"""
|
||||||
|
Return True for ignorable line: iff `line` is blank or contains a single '#'.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
|
@ -553,7 +576,8 @@ def IS_LINE_JUNK(line: str, pat: Any = ...) -> bool: # pat is undocumented
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def IS_CHARACTER_JUNK(ch: str, ws: str = " \t") -> bool: # ws is undocumented
|
def IS_CHARACTER_JUNK(ch: str, ws: str = " \t") -> bool: # ws is undocumented
|
||||||
"""Return True for ignorable character: iff `ch` is a space or tab.
|
"""
|
||||||
|
Return True for ignorable character: iff `ch` is a space or tab.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
|
@ -577,7 +601,8 @@ def unified_diff(
|
||||||
n: int = 3,
|
n: int = 3,
|
||||||
lineterm: str = "\n",
|
lineterm: str = "\n",
|
||||||
) -> Iterator[str]:
|
) -> Iterator[str]:
|
||||||
"""Compare two sequences of lines; generate the delta as a unified diff.
|
"""
|
||||||
|
Compare two sequences of lines; generate the delta as a unified diff.
|
||||||
|
|
||||||
Unified diffs are a compact way of showing line changes and a few
|
Unified diffs are a compact way of showing line changes and a few
|
||||||
lines of context. The number of context lines is set by 'n' which
|
lines of context. The number of context lines is set by 'n' which
|
||||||
|
@ -625,7 +650,8 @@ def context_diff(
|
||||||
n: int = 3,
|
n: int = 3,
|
||||||
lineterm: str = "\n",
|
lineterm: str = "\n",
|
||||||
) -> Iterator[str]:
|
) -> Iterator[str]:
|
||||||
"""Compare two sequences of lines; generate the delta as a context diff.
|
"""
|
||||||
|
Compare two sequences of lines; generate the delta as a context diff.
|
||||||
|
|
||||||
Context diffs are a compact way of showing line changes and a few
|
Context diffs are a compact way of showing line changes and a few
|
||||||
lines of context. The number of context lines is set by 'n' which
|
lines of context. The number of context lines is set by 'n' which
|
||||||
|
@ -672,7 +698,8 @@ def ndiff(
|
||||||
linejunk: Callable[[str], bool] | None = None,
|
linejunk: Callable[[str], bool] | None = None,
|
||||||
charjunk: Callable[[str], bool] | None = ...,
|
charjunk: Callable[[str], bool] | None = ...,
|
||||||
) -> Iterator[str]:
|
) -> Iterator[str]:
|
||||||
"""Compare `a` and `b` (lists of strings); return a `Differ`-style delta.
|
"""
|
||||||
|
Compare `a` and `b` (lists of strings); return a `Differ`-style delta.
|
||||||
|
|
||||||
Optional keyword parameters `linejunk` and `charjunk` are for filter
|
Optional keyword parameters `linejunk` and `charjunk` are for filter
|
||||||
functions, or can be None:
|
functions, or can be None:
|
||||||
|
@ -794,7 +821,8 @@ class HtmlDiff:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def restore(delta: Iterable[str], which: int) -> Iterator[str]:
|
def restore(delta: Iterable[str], which: int) -> Iterator[str]:
|
||||||
"""Generate one of the two sequences that generated a delta.
|
"""
|
||||||
|
Generate one of the two sequences that generated a delta.
|
||||||
|
|
||||||
Given a `delta` produced by `Differ.compare()` or `ndiff()`, extract
|
Given a `delta` produced by `Differ.compare()` or `ndiff()`, extract
|
||||||
lines originating from file 1 or 2 (parameter `which`), stripping off line
|
lines originating from file 1 or 2 (parameter `which`), stripping off line
|
||||||
|
@ -826,7 +854,8 @@ def diff_bytes(
|
||||||
n: int = 3,
|
n: int = 3,
|
||||||
lineterm: bytes | bytearray = b"\n",
|
lineterm: bytes | bytearray = b"\n",
|
||||||
) -> Iterator[bytes]:
|
) -> Iterator[bytes]:
|
||||||
"""Compare `a` and `b`, two sequences of lines represented as bytes rather
|
"""
|
||||||
|
Compare `a` and `b`, two sequences of lines represented as bytes rather
|
||||||
than str. This is a wrapper for `dfunc`, which is typically either
|
than str. This is a wrapper for `dfunc`, which is typically either
|
||||||
unified_diff() or context_diff(). Inputs are losslessly converted to
|
unified_diff() or context_diff(). Inputs are losslessly converted to
|
||||||
strings so that `dfunc` only has to worry about strings, and encoded
|
strings so that `dfunc` only has to worry about strings, and encoded
|
||||||
|
|
|
@ -255,6 +255,7 @@ def findlabels(code: _HaveCodeType) -> list[int]:
|
||||||
"""Detect all offsets in a byte code which are jump targets.
|
"""Detect all offsets in a byte code which are jump targets.
|
||||||
|
|
||||||
Return the list of offsets.
|
Return the list of offsets.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def findlinestarts(code: _HaveCodeType) -> Iterator[tuple[int, int]]:
|
def findlinestarts(code: _HaveCodeType) -> Iterator[tuple[int, int]]:
|
||||||
|
|
|
@ -52,6 +52,7 @@ class register(PyPIRCCommand):
|
||||||
1. use existing login,
|
1. use existing login,
|
||||||
2. register as a new user, or
|
2. register as a new user, or
|
||||||
3. set the password to a random string and email the user.
|
3. set the password to a random string and email the user.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def build_post_data(self, action): ...
|
def build_post_data(self, action): ...
|
||||||
|
|
|
@ -101,7 +101,8 @@ class FileList:
|
||||||
) -> bool: ...
|
) -> bool: ...
|
||||||
|
|
||||||
def findall(dir: str = ".") -> list[str]:
|
def findall(dir: str = ".") -> list[str]:
|
||||||
"""Find all files under 'dir' and return the list of full filenames.
|
"""
|
||||||
|
Find all files under 'dir' and return the list of full filenames.
|
||||||
Unless dir is '.', return full filenames with dir prepended.
|
Unless dir is '.', return full filenames with dir prepended.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@ def get_host_platform() -> str:
|
||||||
win32 (all others - specifically, sys.platform is returned)
|
win32 (all others - specifically, sys.platform is returned)
|
||||||
|
|
||||||
For other non-POSIX platforms, currently just returns 'sys.platform'.
|
For other non-POSIX platforms, currently just returns 'sys.platform'.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_platform() -> str: ...
|
def get_platform() -> str: ...
|
||||||
|
|
|
@ -123,7 +123,8 @@ BLANKLINE_MARKER: str
|
||||||
ELLIPSIS_MARKER: str
|
ELLIPSIS_MARKER: str
|
||||||
|
|
||||||
class Example:
|
class Example:
|
||||||
"""A single doctest example, consisting of source code and expected
|
"""
|
||||||
|
A single doctest example, consisting of source code and expected
|
||||||
output. `Example` defines the following attributes:
|
output. `Example` defines the following attributes:
|
||||||
|
|
||||||
- source: A single Python statement, always ending with a newline.
|
- source: A single Python statement, always ending with a newline.
|
||||||
|
@ -176,7 +177,8 @@ class Example:
|
||||||
def __eq__(self, other: object) -> bool: ...
|
def __eq__(self, other: object) -> bool: ...
|
||||||
|
|
||||||
class DocTest:
|
class DocTest:
|
||||||
"""A collection of doctest examples that should be run in a single
|
"""
|
||||||
|
A collection of doctest examples that should be run in a single
|
||||||
namespace. Each `DocTest` defines the following attributes:
|
namespace. Each `DocTest` defines the following attributes:
|
||||||
|
|
||||||
- examples: the list of examples.
|
- examples: the list of examples.
|
||||||
|
@ -214,7 +216,8 @@ class DocTest:
|
||||||
lineno: int | None,
|
lineno: int | None,
|
||||||
docstring: str | None,
|
docstring: str | None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Create a new DocTest containing the given examples. The
|
"""
|
||||||
|
Create a new DocTest containing the given examples. The
|
||||||
DocTest's globals are initialized with a copy of `globs`.
|
DocTest's globals are initialized with a copy of `globs`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -223,10 +226,13 @@ class DocTest:
|
||||||
def __eq__(self, other: object) -> bool: ...
|
def __eq__(self, other: object) -> bool: ...
|
||||||
|
|
||||||
class DocTestParser:
|
class DocTestParser:
|
||||||
"""A class used to parse strings containing doctest examples."""
|
"""
|
||||||
|
A class used to parse strings containing doctest examples.
|
||||||
|
"""
|
||||||
|
|
||||||
def parse(self, string: str, name: str = "<string>") -> list[str | Example]:
|
def parse(self, string: str, name: str = "<string>") -> list[str | Example]:
|
||||||
"""Divide the given string into examples and intervening text,
|
"""
|
||||||
|
Divide the given string into examples and intervening text,
|
||||||
and return them as a list of alternating Examples and strings.
|
and return them as a list of alternating Examples and strings.
|
||||||
Line numbers for the Examples are 0-based. The optional
|
Line numbers for the Examples are 0-based. The optional
|
||||||
argument `name` is a name identifying this string, and is only
|
argument `name` is a name identifying this string, and is only
|
||||||
|
@ -234,7 +240,8 @@ class DocTestParser:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_doctest(self, string: str, globs: dict[str, Any], name: str, filename: str | None, lineno: int | None) -> DocTest:
|
def get_doctest(self, string: str, globs: dict[str, Any], name: str, filename: str | None, lineno: int | None) -> DocTest:
|
||||||
"""Extract all doctest examples from the given string, and
|
"""
|
||||||
|
Extract all doctest examples from the given string, and
|
||||||
collect them into a `DocTest` object.
|
collect them into a `DocTest` object.
|
||||||
|
|
||||||
`globs`, `name`, `filename`, and `lineno` are attributes for
|
`globs`, `name`, `filename`, and `lineno` are attributes for
|
||||||
|
@ -243,7 +250,8 @@ class DocTestParser:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_examples(self, string: str, name: str = "<string>") -> list[Example]:
|
def get_examples(self, string: str, name: str = "<string>") -> list[Example]:
|
||||||
"""Extract all doctest examples from the given string, and return
|
"""
|
||||||
|
Extract all doctest examples from the given string, and return
|
||||||
them as a list of `Example` objects. Line numbers are
|
them as a list of `Example` objects. Line numbers are
|
||||||
0-based, because it's most common in doctests that nothing
|
0-based, because it's most common in doctests that nothing
|
||||||
interesting appears on the same line as opening triple-quote,
|
interesting appears on the same line as opening triple-quote,
|
||||||
|
@ -254,7 +262,8 @@ class DocTestParser:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class DocTestFinder:
|
class DocTestFinder:
|
||||||
"""A class used to extract the DocTests that are relevant to a given
|
"""
|
||||||
|
A class used to extract the DocTests that are relevant to a given
|
||||||
object, from its docstring and the docstrings of its contained
|
object, from its docstring and the docstrings of its contained
|
||||||
objects. Doctests can currently be extracted from the following
|
objects. Doctests can currently be extracted from the following
|
||||||
object types: modules, functions, classes, methods, staticmethods,
|
object types: modules, functions, classes, methods, staticmethods,
|
||||||
|
@ -264,7 +273,8 @@ class DocTestFinder:
|
||||||
def __init__(
|
def __init__(
|
||||||
self, verbose: bool = False, parser: DocTestParser = ..., recurse: bool = True, exclude_empty: bool = True
|
self, verbose: bool = False, parser: DocTestParser = ..., recurse: bool = True, exclude_empty: bool = True
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Create a new doctest finder.
|
"""
|
||||||
|
Create a new doctest finder.
|
||||||
|
|
||||||
The optional argument `parser` specifies a class or
|
The optional argument `parser` specifies a class or
|
||||||
function that should be used to create new DocTest objects (or
|
function that should be used to create new DocTest objects (or
|
||||||
|
@ -287,7 +297,8 @@ class DocTestFinder:
|
||||||
globs: dict[str, Any] | None = None,
|
globs: dict[str, Any] | None = None,
|
||||||
extraglobs: dict[str, Any] | None = None,
|
extraglobs: dict[str, Any] | None = None,
|
||||||
) -> list[DocTest]:
|
) -> list[DocTest]:
|
||||||
"""Return a list of the DocTests that are defined by the given
|
"""
|
||||||
|
Return a list of the DocTests that are defined by the given
|
||||||
object's docstring, or by any of its contained objects'
|
object's docstring, or by any of its contained objects'
|
||||||
docstrings.
|
docstrings.
|
||||||
|
|
||||||
|
@ -318,12 +329,14 @@ class DocTestFinder:
|
||||||
defaults to the module's `__dict__`, if specified, or {}
|
defaults to the module's `__dict__`, if specified, or {}
|
||||||
otherwise. If `extraglobs` is not specified, then it defaults
|
otherwise. If `extraglobs` is not specified, then it defaults
|
||||||
to {}.
|
to {}.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_Out: TypeAlias = Callable[[str], object]
|
_Out: TypeAlias = Callable[[str], object]
|
||||||
|
|
||||||
class DocTestRunner:
|
class DocTestRunner:
|
||||||
"""A class used to run DocTest test cases, and accumulate statistics.
|
"""
|
||||||
|
A class used to run DocTest test cases, and accumulate statistics.
|
||||||
The `run` method is used to process a single DocTest case. It
|
The `run` method is used to process a single DocTest case. It
|
||||||
returns a TestResults instance.
|
returns a TestResults instance.
|
||||||
|
|
||||||
|
@ -393,7 +406,8 @@ class DocTestRunner:
|
||||||
skips: int
|
skips: int
|
||||||
test: DocTest
|
test: DocTest
|
||||||
def __init__(self, checker: OutputChecker | None = None, verbose: bool | None = None, optionflags: int = 0) -> None:
|
def __init__(self, checker: OutputChecker | None = None, verbose: bool | None = None, optionflags: int = 0) -> None:
|
||||||
"""Create a new test runner.
|
"""
|
||||||
|
Create a new test runner.
|
||||||
|
|
||||||
Optional keyword arg `checker` is the `OutputChecker` that
|
Optional keyword arg `checker` is the `OutputChecker` that
|
||||||
should be used to compare the expected outputs and actual
|
should be used to compare the expected outputs and actual
|
||||||
|
@ -410,25 +424,32 @@ class DocTestRunner:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def report_start(self, out: _Out, test: DocTest, example: Example) -> None:
|
def report_start(self, out: _Out, test: DocTest, example: Example) -> None:
|
||||||
"""Report that the test runner is about to process the given
|
"""
|
||||||
|
Report that the test runner is about to process the given
|
||||||
example. (Only displays a message if verbose=True)
|
example. (Only displays a message if verbose=True)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def report_success(self, out: _Out, test: DocTest, example: Example, got: str) -> None:
|
def report_success(self, out: _Out, test: DocTest, example: Example, got: str) -> None:
|
||||||
"""Report that the given example ran successfully. (Only
|
"""
|
||||||
|
Report that the given example ran successfully. (Only
|
||||||
displays a message if verbose=True)
|
displays a message if verbose=True)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def report_failure(self, out: _Out, test: DocTest, example: Example, got: str) -> None:
|
def report_failure(self, out: _Out, test: DocTest, example: Example, got: str) -> None:
|
||||||
"""Report that the given example failed."""
|
"""
|
||||||
|
Report that the given example failed.
|
||||||
|
"""
|
||||||
|
|
||||||
def report_unexpected_exception(self, out: _Out, test: DocTest, example: Example, exc_info: ExcInfo) -> None:
|
def report_unexpected_exception(self, out: _Out, test: DocTest, example: Example, exc_info: ExcInfo) -> None:
|
||||||
"""Report that the given example raised an unexpected exception."""
|
"""
|
||||||
|
Report that the given example raised an unexpected exception.
|
||||||
|
"""
|
||||||
|
|
||||||
def run(
|
def run(
|
||||||
self, test: DocTest, compileflags: int | None = None, out: _Out | None = None, clear_globs: bool = True
|
self, test: DocTest, compileflags: int | None = None, out: _Out | None = None, clear_globs: bool = True
|
||||||
) -> TestResults:
|
) -> TestResults:
|
||||||
"""Run the examples in `test`, and display the results using the
|
"""
|
||||||
|
Run the examples in `test`, and display the results using the
|
||||||
writer function `out`.
|
writer function `out`.
|
||||||
|
|
||||||
The examples are run in the namespace `test.globs`. If
|
The examples are run in the namespace `test.globs`. If
|
||||||
|
@ -448,7 +469,8 @@ class DocTestRunner:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def summarize(self, verbose: bool | None = None) -> TestResults:
|
def summarize(self, verbose: bool | None = None) -> TestResults:
|
||||||
"""Print a summary of all the test cases that have been run by
|
"""
|
||||||
|
Print a summary of all the test cases that have been run by
|
||||||
this DocTestRunner, and return a TestResults instance.
|
this DocTestRunner, and return a TestResults instance.
|
||||||
|
|
||||||
The optional `verbose` argument controls how detailed the
|
The optional `verbose` argument controls how detailed the
|
||||||
|
@ -459,7 +481,8 @@ class DocTestRunner:
|
||||||
def merge(self, other: DocTestRunner) -> None: ...
|
def merge(self, other: DocTestRunner) -> None: ...
|
||||||
|
|
||||||
class OutputChecker:
|
class OutputChecker:
|
||||||
"""A class used to check whether the actual output from a doctest
|
"""
|
||||||
|
A class used to check whether the actual output from a doctest
|
||||||
example matches the expected output. `OutputChecker` defines two
|
example matches the expected output. `OutputChecker` defines two
|
||||||
methods: `check_output`, which compares a given pair of outputs,
|
methods: `check_output`, which compares a given pair of outputs,
|
||||||
and returns true if they match; and `output_difference`, which
|
and returns true if they match; and `output_difference`, which
|
||||||
|
@ -467,7 +490,8 @@ class OutputChecker:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def check_output(self, want: str, got: str, optionflags: int) -> bool:
|
def check_output(self, want: str, got: str, optionflags: int) -> bool:
|
||||||
"""Return True iff the actual output from an example (`got`)
|
"""
|
||||||
|
Return True iff the actual output from an example (`got`)
|
||||||
matches the expected output (`want`). These strings are
|
matches the expected output (`want`). These strings are
|
||||||
always considered to match if they are identical; but
|
always considered to match if they are identical; but
|
||||||
depending on what option flags the test runner is using,
|
depending on what option flags the test runner is using,
|
||||||
|
@ -477,7 +501,8 @@ class OutputChecker:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def output_difference(self, example: Example, got: str, optionflags: int) -> str:
|
def output_difference(self, example: Example, got: str, optionflags: int) -> str:
|
||||||
"""Return a string describing the differences between the
|
"""
|
||||||
|
Return a string describing the differences between the
|
||||||
expected output for a given example (`example`) and the actual
|
expected output for a given example (`example`) and the actual
|
||||||
output (`got`). `optionflags` is the set of option flags used
|
output (`got`). `optionflags` is the set of option flags used
|
||||||
to compare `want` and `got`.
|
to compare `want` and `got`.
|
||||||
|
@ -605,6 +630,7 @@ class DebugRunner(DocTestRunner):
|
||||||
|
|
||||||
>>> test.globs
|
>>> test.globs
|
||||||
{}
|
{}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
master: DocTestRunner | None
|
master: DocTestRunner | None
|
||||||
|
@ -628,8 +654,8 @@ def testmod(
|
||||||
from module m (or the current module if m is not supplied), starting
|
from module m (or the current module if m is not supplied), starting
|
||||||
with m.__doc__.
|
with m.__doc__.
|
||||||
|
|
||||||
Also test examples reachable from dict m.__test__ if it exists and is
|
Also test examples reachable from dict m.__test__ if it exists.
|
||||||
not None. m.__test__ maps names to functions, classes and strings;
|
m.__test__ maps names to functions, classes and strings;
|
||||||
function and class docstrings are tested even if the name is private;
|
function and class docstrings are tested even if the name is private;
|
||||||
strings are tested directly, as if they were docstrings.
|
strings are tested directly, as if they were docstrings.
|
||||||
|
|
||||||
|
@ -698,7 +724,8 @@ def testfile(
|
||||||
parser: DocTestParser = ...,
|
parser: DocTestParser = ...,
|
||||||
encoding: str | None = None,
|
encoding: str | None = None,
|
||||||
) -> TestResults:
|
) -> TestResults:
|
||||||
"""Test examples in the given file. Return (#failures, #tests).
|
"""
|
||||||
|
Test examples in the given file. Return (#failures, #tests).
|
||||||
|
|
||||||
Optional keyword arg "module_relative" specifies how filenames
|
Optional keyword arg "module_relative" specifies how filenames
|
||||||
should be interpreted:
|
should be interpreted:
|
||||||
|
@ -782,7 +809,8 @@ def run_docstring_examples(
|
||||||
compileflags: int | None = None,
|
compileflags: int | None = None,
|
||||||
optionflags: int = 0,
|
optionflags: int = 0,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test examples in the given object's docstring (`f`), using `globs`
|
"""
|
||||||
|
Test examples in the given object's docstring (`f`), using `globs`
|
||||||
as globals. Optional argument `name` is used in failure messages.
|
as globals. Optional argument `name` is used in failure messages.
|
||||||
If the optional argument `verbose` is true, then generate output
|
If the optional argument `verbose` is true, then generate output
|
||||||
even if there are no failures.
|
even if there are no failures.
|
||||||
|
@ -852,7 +880,8 @@ def DocTestSuite(
|
||||||
test_finder: DocTestFinder | None = None,
|
test_finder: DocTestFinder | None = None,
|
||||||
**options: Any,
|
**options: Any,
|
||||||
) -> _DocTestSuite:
|
) -> _DocTestSuite:
|
||||||
"""Convert doctest tests for a module to a unittest test suite.
|
"""
|
||||||
|
Convert doctest tests for a module to a unittest test suite.
|
||||||
|
|
||||||
This converts each documentation string in a module that
|
This converts each documentation string in a module that
|
||||||
contains doctest tests to a unittest test case. If any of the
|
contains doctest tests to a unittest test case. If any of the
|
||||||
|
|
|
@ -427,6 +427,7 @@ def get_fws(value: str) -> tuple[WhiteSpaceTerminal, str]:
|
||||||
This isn't the RFC definition. We're using fws to represent tokens where
|
This isn't the RFC definition. We're using fws to represent tokens where
|
||||||
folding can be done, but when we are parsing the *un*folding has already
|
folding can be done, but when we are parsing the *un*folding has already
|
||||||
been done so we don't need to watch out for CRLF.
|
been done so we don't need to watch out for CRLF.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_encoded_word(value: str, terminal_type: str = "vtext") -> tuple[EncodedWord, str]:
|
def get_encoded_word(value: str, terminal_type: str = "vtext") -> tuple[EncodedWord, str]:
|
||||||
|
@ -449,6 +450,7 @@ def get_unstructured(value: str) -> UnstructuredTokenList:
|
||||||
Because an 'unstructured' value must by definition constitute the entire
|
Because an 'unstructured' value must by definition constitute the entire
|
||||||
value, this 'get' routine does not return a remaining value, only the
|
value, this 'get' routine does not return a remaining value, only the
|
||||||
parsed TokenList.
|
parsed TokenList.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_qp_ctext(value: str) -> tuple[WhiteSpaceTerminal, str]:
|
def get_qp_ctext(value: str) -> tuple[WhiteSpaceTerminal, str]:
|
||||||
|
@ -461,6 +463,7 @@ def get_qp_ctext(value: str) -> tuple[WhiteSpaceTerminal, str]:
|
||||||
quoted pairs are converted to their unquoted values, what is returned is
|
quoted pairs are converted to their unquoted values, what is returned is
|
||||||
a 'ptext' token. In this case it is a WhiteSpaceTerminal, so it's value
|
a 'ptext' token. In this case it is a WhiteSpaceTerminal, so it's value
|
||||||
is ' '.
|
is ' '.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_qcontent(value: str) -> tuple[ValueTerminal, str]:
|
def get_qcontent(value: str) -> tuple[ValueTerminal, str]:
|
||||||
|
@ -471,6 +474,7 @@ def get_qcontent(value: str) -> tuple[ValueTerminal, str]:
|
||||||
added to the token's defects list. Any quoted pairs are converted to their
|
added to the token's defects list. Any quoted pairs are converted to their
|
||||||
unquoted values, so what is returned is a 'ptext' token. In this case it
|
unquoted values, so what is returned is a 'ptext' token. In this case it
|
||||||
is a ValueTerminal.
|
is a ValueTerminal.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_atext(value: str) -> tuple[ValueTerminal, str]:
|
def get_atext(value: str) -> tuple[ValueTerminal, str]:
|
||||||
|
@ -536,6 +540,7 @@ def get_word(value: str) -> tuple[Any, str]:
|
||||||
This means the 'word' level of the formal grammar is not represented in the
|
This means the 'word' level of the formal grammar is not represented in the
|
||||||
parse tree; this is because having that extra layer when manipulating the
|
parse tree; this is because having that extra layer when manipulating the
|
||||||
parse tree is more confusing than it is helpful.
|
parse tree is more confusing than it is helpful.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_phrase(value: str) -> tuple[Phrase, str]:
|
def get_phrase(value: str) -> tuple[Phrase, str]:
|
||||||
|
@ -548,6 +553,7 @@ def get_phrase(value: str) -> tuple[Phrase, str]:
|
||||||
list. We also accept a phrase that starts with CFWS followed by a dot;
|
list. We also accept a phrase that starts with CFWS followed by a dot;
|
||||||
this is registered as an InvalidHeaderDefect, since it is not supported by
|
this is registered as an InvalidHeaderDefect, since it is not supported by
|
||||||
even the obsolete grammar.
|
even the obsolete grammar.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_local_part(value: str) -> tuple[LocalPart, str]:
|
def get_local_part(value: str) -> tuple[LocalPart, str]:
|
||||||
|
@ -566,6 +572,7 @@ def get_dtext(value: str) -> tuple[ValueTerminal, str]:
|
||||||
unquoted values, so what is returned is a ptext token, in this case a
|
unquoted values, so what is returned is a ptext token, in this case a
|
||||||
ValueTerminal. If there were quoted-printables, an ObsoleteHeaderDefect is
|
ValueTerminal. If there were quoted-printables, an ObsoleteHeaderDefect is
|
||||||
added to the returned token's defect list.
|
added to the returned token's defect list.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_domain_literal(value: str) -> tuple[DomainLiteral, str]:
|
def get_domain_literal(value: str) -> tuple[DomainLiteral, str]:
|
||||||
|
@ -574,6 +581,7 @@ def get_domain_literal(value: str) -> tuple[DomainLiteral, str]:
|
||||||
def get_domain(value: str) -> tuple[Domain, str]:
|
def get_domain(value: str) -> tuple[Domain, str]:
|
||||||
"""domain = dot-atom / domain-literal / obs-domain
|
"""domain = dot-atom / domain-literal / obs-domain
|
||||||
obs-domain = atom *("." atom))
|
obs-domain = atom *("." atom))
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_addr_spec(value: str) -> tuple[AddrSpec, str]:
|
def get_addr_spec(value: str) -> tuple[AddrSpec, str]:
|
||||||
|
@ -590,6 +598,7 @@ def get_obs_route(value: str) -> tuple[ObsRoute, str]:
|
||||||
def get_angle_addr(value: str) -> tuple[AngleAddr, str]:
|
def get_angle_addr(value: str) -> tuple[AngleAddr, str]:
|
||||||
"""angle-addr = [CFWS] "<" addr-spec ">" [CFWS] / obs-angle-addr
|
"""angle-addr = [CFWS] "<" addr-spec ">" [CFWS] / obs-angle-addr
|
||||||
obs-angle-addr = [CFWS] "<" obs-route addr-spec ">" [CFWS]
|
obs-angle-addr = [CFWS] "<" obs-route addr-spec ">" [CFWS]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_display_name(value: str) -> tuple[DisplayName, str]:
|
def get_display_name(value: str) -> tuple[DisplayName, str]:
|
||||||
|
@ -598,6 +607,7 @@ def get_display_name(value: str) -> tuple[DisplayName, str]:
|
||||||
Because this is simply a name-rule, we don't return a display-name
|
Because this is simply a name-rule, we don't return a display-name
|
||||||
token containing a phrase, but rather a display-name token with
|
token containing a phrase, but rather a display-name token with
|
||||||
the content of the phrase.
|
the content of the phrase.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_name_addr(value: str) -> tuple[NameAddr, str]:
|
def get_name_addr(value: str) -> tuple[NameAddr, str]:
|
||||||
|
@ -611,6 +621,7 @@ def get_invalid_mailbox(value: str, endchars: str) -> tuple[InvalidMailbox, str]
|
||||||
|
|
||||||
This is outside the formal grammar. The InvalidMailbox TokenList that is
|
This is outside the formal grammar. The InvalidMailbox TokenList that is
|
||||||
returned acts like a Mailbox, but the data attributes are None.
|
returned acts like a Mailbox, but the data attributes are None.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_mailbox_list(value: str) -> tuple[MailboxList, str]:
|
def get_mailbox_list(value: str) -> tuple[MailboxList, str]:
|
||||||
|
@ -623,11 +634,13 @@ def get_mailbox_list(value: str) -> tuple[MailboxList, str]:
|
||||||
invalid mailboxes into InvalidMailbox tokens and continue parsing any
|
invalid mailboxes into InvalidMailbox tokens and continue parsing any
|
||||||
remaining valid mailboxes. We also allow all mailbox entries to be null,
|
remaining valid mailboxes. We also allow all mailbox entries to be null,
|
||||||
and this condition is handled appropriately at a higher level.
|
and this condition is handled appropriately at a higher level.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_group_list(value: str) -> tuple[GroupList, str]:
|
def get_group_list(value: str) -> tuple[GroupList, str]:
|
||||||
"""group-list = mailbox-list / CFWS / obs-group-list
|
"""group-list = mailbox-list / CFWS / obs-group-list
|
||||||
obs-group-list = 1*([CFWS] ",") [CFWS]
|
obs-group-list = 1*([CFWS] ",") [CFWS]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_group(value: str) -> tuple[Group, str]:
|
def get_group(value: str) -> tuple[Group, str]:
|
||||||
|
@ -641,6 +654,7 @@ def get_address(value: str) -> tuple[Address, str]:
|
||||||
a 'mailboxes' attribute which treats a single address as a list of length
|
a 'mailboxes' attribute which treats a single address as a list of length
|
||||||
one. When you need to differentiate between to two cases, extract the single
|
one. When you need to differentiate between to two cases, extract the single
|
||||||
element, which is either a mailbox or a group token.
|
element, which is either a mailbox or a group token.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_address_list(value: str) -> tuple[AddressList, str]:
|
def get_address_list(value: str) -> tuple[AddressList, str]:
|
||||||
|
@ -651,6 +665,7 @@ def get_address_list(value: str) -> tuple[AddressList, str]:
|
||||||
of the input, assuming the input to be entirely composed of an
|
of the input, assuming the input to be entirely composed of an
|
||||||
address-list. This is always true in email parsing, and allows us
|
address-list. This is always true in email parsing, and allows us
|
||||||
to skip invalid addresses to parse additional valid ones.
|
to skip invalid addresses to parse additional valid ones.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_no_fold_literal(value: str) -> tuple[NoFoldLiteral, str]:
|
def get_no_fold_literal(value: str) -> tuple[NoFoldLiteral, str]:
|
||||||
|
@ -674,6 +689,7 @@ def get_invalid_parameter(value: str) -> tuple[InvalidParameter, str]:
|
||||||
|
|
||||||
This is outside the formal grammar. The InvalidParameter TokenList that is
|
This is outside the formal grammar. The InvalidParameter TokenList that is
|
||||||
returned acts like a Parameter, but the data attributes are None.
|
returned acts like a Parameter, but the data attributes are None.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_ttext(value: str) -> tuple[ValueTerminal, str]:
|
def get_ttext(value: str) -> tuple[ValueTerminal, str]:
|
||||||
|
@ -683,6 +699,7 @@ def get_ttext(value: str) -> tuple[ValueTerminal, str]:
|
||||||
defects list if we find non-ttext characters. We also register defects for
|
defects list if we find non-ttext characters. We also register defects for
|
||||||
*any* non-printables even though the RFC doesn't exclude all of them,
|
*any* non-printables even though the RFC doesn't exclude all of them,
|
||||||
because we follow the spirit of RFC 5322.
|
because we follow the spirit of RFC 5322.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_token(value: str) -> tuple[Token, str]:
|
def get_token(value: str) -> tuple[Token, str]:
|
||||||
|
@ -692,6 +709,7 @@ def get_token(value: str) -> tuple[Token, str]:
|
||||||
tspecials. We also exclude tabs even though the RFC doesn't.
|
tspecials. We also exclude tabs even though the RFC doesn't.
|
||||||
|
|
||||||
The RFC implies the CFWS but is not explicit about it in the BNF.
|
The RFC implies the CFWS but is not explicit about it in the BNF.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_attrtext(value: str) -> tuple[ValueTerminal, str]:
|
def get_attrtext(value: str) -> tuple[ValueTerminal, str]:
|
||||||
|
@ -701,6 +719,7 @@ def get_attrtext(value: str) -> tuple[ValueTerminal, str]:
|
||||||
token's defects list if we find non-attrtext characters. We also register
|
token's defects list if we find non-attrtext characters. We also register
|
||||||
defects for *any* non-printables even though the RFC doesn't exclude all of
|
defects for *any* non-printables even though the RFC doesn't exclude all of
|
||||||
them, because we follow the spirit of RFC 5322.
|
them, because we follow the spirit of RFC 5322.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_attribute(value: str) -> tuple[Attribute, str]:
|
def get_attribute(value: str) -> tuple[Attribute, str]:
|
||||||
|
@ -710,6 +729,7 @@ def get_attribute(value: str) -> tuple[Attribute, str]:
|
||||||
value terminal for the actual run of characters. The RFC equivalent of
|
value terminal for the actual run of characters. The RFC equivalent of
|
||||||
attrtext is the token characters, with the subtraction of '*', "'", and '%'.
|
attrtext is the token characters, with the subtraction of '*', "'", and '%'.
|
||||||
We include tab in the excluded set just as we do for token.
|
We include tab in the excluded set just as we do for token.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_extended_attrtext(value: str) -> tuple[ValueTerminal, str]:
|
def get_extended_attrtext(value: str) -> tuple[ValueTerminal, str]:
|
||||||
|
@ -718,6 +738,7 @@ def get_extended_attrtext(value: str) -> tuple[ValueTerminal, str]:
|
||||||
This is a special parsing routine so that we get a value that
|
This is a special parsing routine so that we get a value that
|
||||||
includes % escapes as a single string (which we decode as a single
|
includes % escapes as a single string (which we decode as a single
|
||||||
string later).
|
string later).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_extended_attribute(value: str) -> tuple[Attribute, str]:
|
def get_extended_attribute(value: str) -> tuple[Attribute, str]:
|
||||||
|
@ -725,6 +746,7 @@ def get_extended_attribute(value: str) -> tuple[Attribute, str]:
|
||||||
|
|
||||||
This is like the non-extended version except we allow % characters, so that
|
This is like the non-extended version except we allow % characters, so that
|
||||||
we can pick up an encoded value as a single string.
|
we can pick up an encoded value as a single string.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_section(value: str) -> tuple[Section, str]:
|
def get_section(value: str) -> tuple[Section, str]:
|
||||||
|
@ -734,6 +756,7 @@ def get_section(value: str) -> tuple[Section, str]:
|
||||||
check for that and add a defect. We also assume no CFWS is allowed between
|
check for that and add a defect. We also assume no CFWS is allowed between
|
||||||
the '*' and the digits, though the RFC is not crystal clear on that.
|
the '*' and the digits, though the RFC is not crystal clear on that.
|
||||||
The caller should already have dealt with leading CFWS.
|
The caller should already have dealt with leading CFWS.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_value(value: str) -> tuple[Value, str]:
|
def get_value(value: str) -> tuple[Value, str]:
|
||||||
|
@ -759,6 +782,7 @@ def parse_mime_parameters(value: str) -> MimeParameters:
|
||||||
This is 'parse' routine because it consumes the remaining value, but it
|
This is 'parse' routine because it consumes the remaining value, but it
|
||||||
would never be called to parse a full header. Instead it is called to
|
would never be called to parse a full header. Instead it is called to
|
||||||
parse everything after the non-parameter value of a specific MIME header.
|
parse everything after the non-parameter value of a specific MIME header.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def parse_content_type_header(value: str) -> ContentType:
|
def parse_content_type_header(value: str) -> ContentType:
|
||||||
|
|
|
@ -41,6 +41,7 @@ class _PolicyBase(Generic[_MessageT_co]):
|
||||||
The repr of an instance can be used to reconstruct the object
|
The repr of an instance can be used to reconstruct the object
|
||||||
if and only if the repr of the values can be used to reconstruct
|
if and only if the repr of the values can be used to reconstruct
|
||||||
those values.
|
those values.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
max_line_length: int | None
|
max_line_length: int | None
|
||||||
|
@ -67,6 +68,7 @@ class _PolicyBase(Generic[_MessageT_co]):
|
||||||
"""Create new Policy, possibly overriding some defaults.
|
"""Create new Policy, possibly overriding some defaults.
|
||||||
|
|
||||||
See class docstring for a list of overridable attributes.
|
See class docstring for a list of overridable attributes.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def clone(
|
def clone(
|
||||||
|
@ -85,12 +87,14 @@ class _PolicyBase(Generic[_MessageT_co]):
|
||||||
|
|
||||||
The new instance has the same attribute values as the current object,
|
The new instance has the same attribute values as the current object,
|
||||||
except for the changes passed in as keyword arguments.
|
except for the changes passed in as keyword arguments.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __add__(self, other: Policy) -> Self:
|
def __add__(self, other: Policy) -> Self:
|
||||||
"""Non-default values from right operand override those from left.
|
"""Non-default values from right operand override those from left.
|
||||||
|
|
||||||
The object returned is a new instance of the subclass.
|
The object returned is a new instance of the subclass.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Policy(_PolicyBase[_MessageT_co], metaclass=ABCMeta):
|
class Policy(_PolicyBase[_MessageT_co], metaclass=ABCMeta):
|
||||||
|
@ -164,6 +168,7 @@ class Policy(_PolicyBase[_MessageT_co], metaclass=ABCMeta):
|
||||||
|
|
||||||
This method is intended to be called by parsers that discover defects.
|
This method is intended to be called by parsers that discover defects.
|
||||||
The email package parsers always call it with Defect instances.
|
The email package parsers always call it with Defect instances.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def register_defect(self, obj: Message[Any, Any], defect: MessageDefect) -> None:
|
def register_defect(self, obj: Message[Any, Any], defect: MessageDefect) -> None:
|
||||||
|
@ -175,6 +180,7 @@ class Policy(_PolicyBase[_MessageT_co], metaclass=ABCMeta):
|
||||||
the defects attribute of obj. The objects used by the email package by
|
the defects attribute of obj. The objects used by the email package by
|
||||||
default that get passed to this method will always have a defects
|
default that get passed to this method will always have a defects
|
||||||
attribute with an append method.
|
attribute with an append method.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def header_max_count(self, name: str) -> int | None:
|
def header_max_count(self, name: str) -> int | None:
|
||||||
|
@ -217,6 +223,7 @@ class Policy(_PolicyBase[_MessageT_co], metaclass=ABCMeta):
|
||||||
header. The value passed in by the email package may contain
|
header. The value passed in by the email package may contain
|
||||||
surrogateescaped binary data if the lines were parsed by a BytesParser.
|
surrogateescaped binary data if the lines were parsed by a BytesParser.
|
||||||
The returned value should not contain any surrogateescaped data.
|
The returned value should not contain any surrogateescaped data.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
|
@ -227,6 +234,7 @@ class Policy(_PolicyBase[_MessageT_co], metaclass=ABCMeta):
|
||||||
package may contain surrogateescaped binary data if the lines were
|
package may contain surrogateescaped binary data if the lines were
|
||||||
parsed by a BytesParser. The returned value should not contain any
|
parsed by a BytesParser. The returned value should not contain any
|
||||||
surrogateescaped data.
|
surrogateescaped data.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
|
@ -235,6 +243,7 @@ class Policy(_PolicyBase[_MessageT_co], metaclass=ABCMeta):
|
||||||
data containing linesep characters that implement the folding of the
|
data containing linesep characters that implement the folding of the
|
||||||
header according to the policy controls. The value passed in by the
|
header according to the policy controls. The value passed in by the
|
||||||
email package may contain surrogateescaped binary data.
|
email package may contain surrogateescaped binary data.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Compat32(Policy[_MessageT_co]):
|
class Compat32(Policy[_MessageT_co]):
|
||||||
|
@ -305,6 +314,7 @@ class Compat32(Policy[_MessageT_co]):
|
||||||
The value is determined by stripping leading whitespace off the
|
The value is determined by stripping leading whitespace off the
|
||||||
remainder of the first line joined with all subsequent lines, and
|
remainder of the first line joined with all subsequent lines, and
|
||||||
stripping any trailing carriage return or linefeed characters.
|
stripping any trailing carriage return or linefeed characters.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def header_store_parse(self, name: str, value: str) -> tuple[str, str]:
|
def header_store_parse(self, name: str, value: str) -> tuple[str, str]:
|
||||||
|
@ -336,6 +346,7 @@ class Compat32(Policy[_MessageT_co]):
|
||||||
existing line breaks in the value, and wraps each resulting line to the
|
existing line breaks in the value, and wraps each resulting line to the
|
||||||
max_line_length. Non-ASCII binary data are CTE encoded using the
|
max_line_length. Non-ASCII binary data are CTE encoded using the
|
||||||
unknown-8bit charset.
|
unknown-8bit charset.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def fold_binary(self, name: str, value: str) -> bytes:
|
def fold_binary(self, name: str, value: str) -> bytes:
|
||||||
|
@ -349,6 +360,7 @@ class Compat32(Policy[_MessageT_co]):
|
||||||
max_line_length. If cte_type is 7bit, non-ascii binary data is CTE
|
max_line_length. If cte_type is 7bit, non-ascii binary data is CTE
|
||||||
encoded using the unknown-8bit charset. Otherwise the original source
|
encoded using the unknown-8bit charset. Otherwise the original source
|
||||||
header is used, with its existing line breaks and/or binary data.
|
header is used, with its existing line breaks and/or binary data.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
compat32: Compat32[Message[str, str]]
|
compat32: Compat32[Message[str, str]]
|
||||||
|
|
|
@ -33,6 +33,7 @@ class FeedParser(Generic[_MessageT]):
|
||||||
The policy keyword specifies a policy object that controls a number of
|
The policy keyword specifies a policy object that controls a number of
|
||||||
aspects of the parser's operation. The default policy maintains
|
aspects of the parser's operation. The default policy maintains
|
||||||
backward compatibility.
|
backward compatibility.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -53,6 +54,7 @@ class BytesFeedParser(FeedParser[_MessageT]):
|
||||||
The policy keyword specifies a policy object that controls a number of
|
The policy keyword specifies a policy object that controls a number of
|
||||||
aspects of the parser's operation. The default policy maintains
|
aspects of the parser's operation. The default policy maintains
|
||||||
backward compatibility.
|
backward compatibility.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
|
|
@ -49,6 +49,7 @@ class Generator(Generic[_MessageT]):
|
||||||
aspects of the generator's operation. If no policy is specified,
|
aspects of the generator's operation. If no policy is specified,
|
||||||
the policy associated with the Message object passed to the
|
the policy associated with the Message object passed to the
|
||||||
flatten method is used.
|
flatten method is used.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -76,6 +77,7 @@ class Generator(Generic[_MessageT]):
|
||||||
the output. The default value is determined by the policy specified
|
the output. The default value is determined by the policy specified
|
||||||
when the Generator instance was created or, if none was specified,
|
when the Generator instance was created or, if none was specified,
|
||||||
from the policy associated with the msg.
|
from the policy associated with the msg.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def clone(self, fp: SupportsWrite[str]) -> Self:
|
def clone(self, fp: SupportsWrite[str]) -> Self:
|
||||||
|
@ -123,6 +125,7 @@ class BytesGenerator(Generator[_MessageT]):
|
||||||
aspects of the generator's operation. If no policy is specified,
|
aspects of the generator's operation. If no policy is specified,
|
||||||
the policy associated with the Message object passed to the
|
the policy associated with the Message object passed to the
|
||||||
flatten method is used.
|
flatten method is used.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
|
|
@ -52,6 +52,7 @@ class BaseHeader(str):
|
||||||
|
|
||||||
The subclass should also make sure that a 'max_count' attribute is defined
|
The subclass should also make sure that a 'max_count' attribute is defined
|
||||||
that is either None or 1. XXX: need to better define this API.
|
that is either None or 1. XXX: need to better define this API.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# max_count is actually more of an abstract ClassVar (not defined on the base class, but expected to be defined in subclasses)
|
# max_count is actually more of an abstract ClassVar (not defined on the base class, but expected to be defined in subclasses)
|
||||||
|
@ -76,6 +77,7 @@ class BaseHeader(str):
|
||||||
The returned value is an ASCII-only string possibly containing linesep
|
The returned value is an ASCII-only string possibly containing linesep
|
||||||
characters, and ending with a linesep character. The string includes
|
characters, and ending with a linesep character. The string includes
|
||||||
the header name and the ': ' separator.
|
the header name and the ': ' separator.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class UnstructuredHeader:
|
class UnstructuredHeader:
|
||||||
|
@ -98,6 +100,7 @@ class UnstructuredHeader:
|
||||||
Because an 'unstructured' value must by definition constitute the entire
|
Because an 'unstructured' value must by definition constitute the entire
|
||||||
value, this 'get' routine does not return a remaining value, only the
|
value, this 'get' routine does not return a remaining value, only the
|
||||||
parsed TokenList.
|
parsed TokenList.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -138,6 +141,7 @@ class DateHeader:
|
||||||
Because an 'unstructured' value must by definition constitute the entire
|
Because an 'unstructured' value must by definition constitute the entire
|
||||||
value, this 'get' routine does not return a remaining value, only the
|
value, this 'get' routine does not return a remaining value, only the
|
||||||
parsed TokenList.
|
parsed TokenList.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -268,6 +272,7 @@ class HeaderRegistry:
|
||||||
use_default_map controls whether or not the default mapping of names to
|
use_default_map controls whether or not the default mapping of names to
|
||||||
specialized classes is copied in to the registry when the factory is
|
specialized classes is copied in to the registry when the factory is
|
||||||
created. The default is True.
|
created. The default is True.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def map_to_type(self, name: str, cls: type[BaseHeader]) -> None:
|
def map_to_type(self, name: str, cls: type[BaseHeader]) -> None:
|
||||||
|
@ -282,6 +287,7 @@ class HeaderRegistry:
|
||||||
base_class with a specialized class from the registry or the
|
base_class with a specialized class from the registry or the
|
||||||
default_class, and passing the name and value to the constructed
|
default_class, and passing the name and value to the constructed
|
||||||
class's constructor.
|
class's constructor.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Address:
|
class Address:
|
||||||
|
@ -313,6 +319,7 @@ class Address:
|
||||||
attributes, all of which are read-only. The addr_spec and the string
|
attributes, all of which are read-only. The addr_spec and the string
|
||||||
value of the object are both quoted according to RFC5322 rules, but
|
value of the object are both quoted according to RFC5322 rules, but
|
||||||
without any Content Transfer Encoding.
|
without any Content Transfer Encoding.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
__hash__: ClassVar[None] # type: ignore[assignment]
|
__hash__: ClassVar[None] # type: ignore[assignment]
|
||||||
def __eq__(self, other: object) -> bool: ...
|
def __eq__(self, other: object) -> bool: ...
|
||||||
|
@ -335,6 +342,7 @@ class Group:
|
||||||
string representation of a Group whose display_name is None is the same
|
string representation of a Group whose display_name is None is the same
|
||||||
as the Address object, if there is one and only one Address object in
|
as the Address object, if there is one and only one Address object in
|
||||||
the addresses list.
|
the addresses list.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
__hash__: ClassVar[None] # type: ignore[assignment]
|
__hash__: ClassVar[None] # type: ignore[assignment]
|
||||||
def __eq__(self, other: object) -> bool: ...
|
def __eq__(self, other: object) -> bool: ...
|
||||||
|
|
|
@ -332,6 +332,7 @@ class Message(Generic[_HeaderT_co, _HeaderParamT_contra]):
|
||||||
|
|
||||||
rawparam = msg.get_param('foo')
|
rawparam = msg.get_param('foo')
|
||||||
param = email.utils.collapse_rfc2231_value(rawparam)
|
param = email.utils.collapse_rfc2231_value(rawparam)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
|
|
@ -32,6 +32,7 @@ class Parser(Generic[_MessageT]):
|
||||||
The policy keyword specifies a policy object that controls a number of
|
The policy keyword specifies a policy object that controls a number of
|
||||||
aspects of the parser's operation. The default policy maintains
|
aspects of the parser's operation. The default policy maintains
|
||||||
backward compatibility.
|
backward compatibility.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
|
|
@ -119,6 +119,7 @@ class EmailPolicy(Policy[_MessageT]):
|
||||||
it as additional arguments. The default
|
it as additional arguments. The default
|
||||||
content_manager is
|
content_manager is
|
||||||
:data:`~email.contentmanager.raw_data_manager`.
|
:data:`~email.contentmanager.raw_data_manager`.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
utf8: bool
|
utf8: bool
|
||||||
|
@ -170,6 +171,7 @@ class EmailPolicy(Policy[_MessageT]):
|
||||||
remainder of the first line joined with all subsequent lines, and
|
remainder of the first line joined with all subsequent lines, and
|
||||||
stripping any trailing carriage return or linefeed characters. (This
|
stripping any trailing carriage return or linefeed characters. (This
|
||||||
is the same as Compat32).
|
is the same as Compat32).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def header_store_parse(self, name: str, value: Any) -> tuple[str, Any]:
|
def header_store_parse(self, name: str, value: Any) -> tuple[str, Any]:
|
||||||
|
@ -181,6 +183,7 @@ class EmailPolicy(Policy[_MessageT]):
|
||||||
method, and the resulting custom header object is returned as the
|
method, and the resulting custom header object is returned as the
|
||||||
value. In this case a ValueError is raised if the input value contains
|
value. In this case a ValueError is raised if the input value contains
|
||||||
CR or LF characters.
|
CR or LF characters.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def header_fetch_parse(self, name: str, value: str) -> Any:
|
def header_fetch_parse(self, name: str, value: str) -> Any:
|
||||||
|
@ -195,6 +198,7 @@ class EmailPolicy(Policy[_MessageT]):
|
||||||
are passed to the header_factory method, and the resulting custom
|
are passed to the header_factory method, and the resulting custom
|
||||||
header object is returned. Any surrogateescaped bytes get turned
|
header object is returned. Any surrogateescaped bytes get turned
|
||||||
into the unicode unknown-character glyph.
|
into the unicode unknown-character glyph.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def fold(self, name: str, value: str) -> Any:
|
def fold(self, name: str, value: str) -> Any:
|
||||||
|
@ -220,6 +224,7 @@ class EmailPolicy(Policy[_MessageT]):
|
||||||
binary data. In that case the value is refolded regardless of the
|
binary data. In that case the value is refolded regardless of the
|
||||||
refold_source setting, which causes the binary data to be CTE encoded
|
refold_source setting, which causes the binary data to be CTE encoded
|
||||||
using the unknown-8bit charset.
|
using the unknown-8bit charset.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def fold_binary(self, name: str, value: str) -> bytes:
|
def fold_binary(self, name: str, value: str) -> bytes:
|
||||||
|
@ -238,6 +243,7 @@ class EmailPolicy(Policy[_MessageT]):
|
||||||
|
|
||||||
If utf8 is true, headers are encoded to utf8, otherwise to ascii with
|
If utf8 is true, headers are encoded to utf8, otherwise to ascii with
|
||||||
non-ASCII unicode rendered as encoded words.
|
non-ASCII unicode rendered as encoded words.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def clone(
|
def clone(
|
||||||
|
@ -260,6 +266,7 @@ class EmailPolicy(Policy[_MessageT]):
|
||||||
|
|
||||||
The new instance has the same attribute values as the current object,
|
The new instance has the same attribute values as the current object,
|
||||||
except for the changes passed in as keyword arguments.
|
except for the changes passed in as keyword arguments.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
default: EmailPolicy[EmailMessage]
|
default: EmailPolicy[EmailMessage]
|
||||||
|
|
|
@ -94,6 +94,7 @@ def body_encode(body: str, maxlinelen: int = 76, eol: str = "\n") -> str:
|
||||||
The minimum maxlinelen is 4 to have room for a quoted character ("=XX")
|
The minimum maxlinelen is 4 to have room for a quoted character ("=XX")
|
||||||
followed by a soft line break. Smaller values will generate a
|
followed by a soft line break. Smaller values will generate a
|
||||||
ValueError.
|
ValueError.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def decode(encoded: str, eol: str = "\n") -> str:
|
def decode(encoded: str, eol: str = "\n") -> str:
|
||||||
|
|
|
@ -42,7 +42,8 @@ def unquote(str: str) -> str:
|
||||||
|
|
||||||
# `strict` parameter added in Python 3.9.20, 3.10.15, 3.11.10, 3.12.5
|
# `strict` parameter added in Python 3.9.20, 3.10.15, 3.11.10, 3.12.5
|
||||||
def parseaddr(addr: str | list[str], *, strict: bool = True) -> tuple[str, str]:
|
def parseaddr(addr: str | list[str], *, strict: bool = True) -> tuple[str, str]:
|
||||||
"""Parse addr into its constituent realname and email address parts.
|
"""
|
||||||
|
Parse addr into its constituent realname and email address parts.
|
||||||
|
|
||||||
Return a tuple of realname and email address, unless the parse fails, in
|
Return a tuple of realname and email address, unless the parse fails, in
|
||||||
which case return a 2-tuple of ('', '').
|
which case return a 2-tuple of ('', '').
|
||||||
|
@ -135,6 +136,7 @@ if sys.version_info >= (3, 14):
|
||||||
argument should be a datetime instance, and it is converted to the
|
argument should be a datetime instance, and it is converted to the
|
||||||
local time zone according to the system time zone database. If *dt* is
|
local time zone according to the system time zone database. If *dt* is
|
||||||
naive (that is, dt.tzinfo is None), it is assumed to be in local time.
|
naive (that is, dt.tzinfo is None), it is assumed to be in local time.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
elif sys.version_info >= (3, 12):
|
elif sys.version_info >= (3, 12):
|
||||||
|
@ -147,6 +149,7 @@ elif sys.version_info >= (3, 12):
|
||||||
local time zone according to the system time zone database. If *dt* is
|
local time zone according to the system time zone database. If *dt* is
|
||||||
naive (that is, dt.tzinfo is None), it is assumed to be in local time.
|
naive (that is, dt.tzinfo is None), it is assumed to be in local time.
|
||||||
The isdst parameter is ignored.
|
The isdst parameter is ignored.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -166,6 +169,7 @@ else:
|
||||||
is or is not (respectively) in effect for the specified time. A
|
is or is not (respectively) in effect for the specified time. A
|
||||||
negative value for *isdst* causes the localtime() function to attempt
|
negative value for *isdst* causes the localtime() function to attempt
|
||||||
to divine whether summer time is in effect for the specified time.
|
to divine whether summer time is in effect for the specified time.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def make_msgid(idstring: str | None = None, domain: str | None = None) -> str:
|
def make_msgid(idstring: str | None = None, domain: str | None = None) -> str:
|
||||||
|
|
|
@ -41,6 +41,7 @@ def normalize_encoding(encoding: str | bytes) -> str:
|
||||||
becomes '_'. Leading and trailing underscores are removed.
|
becomes '_'. Leading and trailing underscores are removed.
|
||||||
|
|
||||||
Note that encoding names should be ASCII only.
|
Note that encoding names should be ASCII only.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def search_function(encoding: str) -> CodecInfo | None: ...
|
def search_function(encoding: str) -> CodecInfo | None: ...
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
__all__ = ["version", "bootstrap"]
|
__all__ = ["version", "bootstrap"]
|
||||||
|
|
||||||
def version() -> str:
|
def version() -> str:
|
||||||
"""Returns a string specifying the bundled version of pip."""
|
"""
|
||||||
|
Returns a string specifying the bundled version of pip.
|
||||||
|
"""
|
||||||
|
|
||||||
def bootstrap(
|
def bootstrap(
|
||||||
*,
|
*,
|
||||||
|
@ -12,7 +14,8 @@ def bootstrap(
|
||||||
default_pip: bool = False,
|
default_pip: bool = False,
|
||||||
verbosity: int = 0,
|
verbosity: int = 0,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Bootstrap pip into the current Python installation (or the given root
|
"""
|
||||||
|
Bootstrap pip into the current Python installation (or the given root
|
||||||
directory).
|
directory).
|
||||||
|
|
||||||
Note that calling this function will alter both sys.path and os.environ.
|
Note that calling this function will alter both sys.path and os.environ.
|
||||||
|
|
149
crates/ty_vendored/vendor/typeshed/stdlib/enum.pyi
vendored
149
crates/ty_vendored/vendor/typeshed/stdlib/enum.pyi
vendored
|
@ -57,19 +57,24 @@ _Signature: TypeAlias = Any # TODO: Unable to import Signature from inspect mod
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
class nonmember(Generic[_EnumMemberT]):
|
class nonmember(Generic[_EnumMemberT]):
|
||||||
"""Protects item from becoming an Enum member during class creation."""
|
"""
|
||||||
|
Protects item from becoming an Enum member during class creation.
|
||||||
|
"""
|
||||||
|
|
||||||
value: _EnumMemberT
|
value: _EnumMemberT
|
||||||
def __init__(self, value: _EnumMemberT) -> None: ...
|
def __init__(self, value: _EnumMemberT) -> None: ...
|
||||||
|
|
||||||
class member(Generic[_EnumMemberT]):
|
class member(Generic[_EnumMemberT]):
|
||||||
"""Forces item to become an Enum member during class creation."""
|
"""
|
||||||
|
Forces item to become an Enum member during class creation.
|
||||||
|
"""
|
||||||
|
|
||||||
value: _EnumMemberT
|
value: _EnumMemberT
|
||||||
def __init__(self, value: _EnumMemberT) -> None: ...
|
def __init__(self, value: _EnumMemberT) -> None: ...
|
||||||
|
|
||||||
class _EnumDict(dict[str, Any]):
|
class _EnumDict(dict[str, Any]):
|
||||||
"""Track enum member order and ensure member names are not reused.
|
"""
|
||||||
|
Track enum member order and ensure member names are not reused.
|
||||||
|
|
||||||
EnumType will use the names found in self._member_names as the
|
EnumType will use the names found in self._member_names as the
|
||||||
enumeration member names.
|
enumeration member names.
|
||||||
|
@ -81,7 +86,8 @@ class _EnumDict(dict[str, Any]):
|
||||||
def __init__(self) -> None: ...
|
def __init__(self) -> None: ...
|
||||||
|
|
||||||
def __setitem__(self, key: str, value: Any) -> None:
|
def __setitem__(self, key: str, value: Any) -> None:
|
||||||
"""Changes anything not dundered or not a descriptor.
|
"""
|
||||||
|
Changes anything not dundered or not a descriptor.
|
||||||
|
|
||||||
If an enum member name is used twice, an error is raised; duplicate
|
If an enum member name is used twice, an error is raised; duplicate
|
||||||
values are not checked for.
|
values are not checked for.
|
||||||
|
@ -107,7 +113,9 @@ if sys.version_info >= (3, 13):
|
||||||
|
|
||||||
# Structurally: Iterable[T], Reversible[T], Container[T] where T is the enum itself
|
# Structurally: Iterable[T], Reversible[T], Container[T] where T is the enum itself
|
||||||
class EnumMeta(type):
|
class EnumMeta(type):
|
||||||
"""Metaclass for Enum"""
|
"""
|
||||||
|
Metaclass for Enum
|
||||||
|
"""
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
def __new__(
|
def __new__(
|
||||||
|
@ -128,10 +136,14 @@ class EnumMeta(type):
|
||||||
@classmethod
|
@classmethod
|
||||||
def __prepare__(metacls, cls: str, bases: tuple[type, ...], **kwds: Any) -> _EnumDict: ... # type: ignore[override]
|
def __prepare__(metacls, cls: str, bases: tuple[type, ...], **kwds: Any) -> _EnumDict: ... # type: ignore[override]
|
||||||
def __iter__(self: type[_EnumMemberT]) -> Iterator[_EnumMemberT]:
|
def __iter__(self: type[_EnumMemberT]) -> Iterator[_EnumMemberT]:
|
||||||
"""Return members in definition order."""
|
"""
|
||||||
|
Return members in definition order.
|
||||||
|
"""
|
||||||
|
|
||||||
def __reversed__(self: type[_EnumMemberT]) -> Iterator[_EnumMemberT]:
|
def __reversed__(self: type[_EnumMemberT]) -> Iterator[_EnumMemberT]:
|
||||||
"""Return members in reverse definition order."""
|
"""
|
||||||
|
Return members in reverse definition order.
|
||||||
|
"""
|
||||||
if sys.version_info >= (3, 12):
|
if sys.version_info >= (3, 12):
|
||||||
def __contains__(self: type[Any], value: object) -> bool:
|
def __contains__(self: type[Any], value: object) -> bool:
|
||||||
"""Return True if `value` is in `cls`.
|
"""Return True if `value` is in `cls`.
|
||||||
|
@ -143,7 +155,8 @@ class EnumMeta(type):
|
||||||
"""
|
"""
|
||||||
elif sys.version_info >= (3, 11):
|
elif sys.version_info >= (3, 11):
|
||||||
def __contains__(self: type[Any], member: object) -> bool:
|
def __contains__(self: type[Any], member: object) -> bool:
|
||||||
"""Return True if member is a member of this enum
|
"""
|
||||||
|
Return True if member is a member of this enum
|
||||||
raises TypeError if member is not an enum member
|
raises TypeError if member is not an enum member
|
||||||
|
|
||||||
note: in 3.12 TypeError will no longer be raised, and True will also be
|
note: in 3.12 TypeError will no longer be raised, and True will also be
|
||||||
|
@ -155,28 +168,36 @@ class EnumMeta(type):
|
||||||
def __contains__(self: type[Any], member: object) -> bool: ...
|
def __contains__(self: type[Any], member: object) -> bool: ...
|
||||||
|
|
||||||
def __getitem__(self: type[_EnumMemberT], name: str) -> _EnumMemberT:
|
def __getitem__(self: type[_EnumMemberT], name: str) -> _EnumMemberT:
|
||||||
"""Return the member matching `name`."""
|
"""
|
||||||
|
Return the member matching `name`.
|
||||||
|
"""
|
||||||
|
|
||||||
@_builtins_property
|
@_builtins_property
|
||||||
def __members__(self: type[_EnumMemberT]) -> types.MappingProxyType[str, _EnumMemberT]:
|
def __members__(self: type[_EnumMemberT]) -> types.MappingProxyType[str, _EnumMemberT]:
|
||||||
"""Returns a mapping of member name->value.
|
"""
|
||||||
|
Returns a mapping of member name->value.
|
||||||
|
|
||||||
This mapping lists all enum members, including aliases. Note that this
|
This mapping lists all enum members, including aliases. Note that this
|
||||||
is a read-only view of the internal mapping.
|
is a read-only view of the internal mapping.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __len__(self) -> int:
|
def __len__(self) -> int:
|
||||||
"""Return the number of members (no aliases)"""
|
"""
|
||||||
|
Return the number of members (no aliases)
|
||||||
|
"""
|
||||||
|
|
||||||
def __bool__(self) -> Literal[True]:
|
def __bool__(self) -> Literal[True]:
|
||||||
"""classes/types should always be True."""
|
"""
|
||||||
|
classes/types should always be True.
|
||||||
|
"""
|
||||||
|
|
||||||
def __dir__(self) -> list[str]: ...
|
def __dir__(self) -> list[str]: ...
|
||||||
|
|
||||||
# Overload 1: Value lookup on an already existing enum class (simple case)
|
# Overload 1: Value lookup on an already existing enum class (simple case)
|
||||||
@overload
|
@overload
|
||||||
def __call__(cls: type[_EnumMemberT], value: Any, names: None = None) -> _EnumMemberT:
|
def __call__(cls: type[_EnumMemberT], value: Any, names: None = None) -> _EnumMemberT:
|
||||||
"""Either returns an existing member, or creates a new enum class.
|
"""
|
||||||
|
Either returns an existing member, or creates a new enum class.
|
||||||
|
|
||||||
This method is used both when an enum class is given a value to match
|
This method is used both when an enum class is given a value to match
|
||||||
to an enumeration member (i.e. Color(3)) and for the functional API
|
to an enumeration member (i.e. Color(3)) and for the functional API
|
||||||
|
@ -215,7 +236,8 @@ class EnumMeta(type):
|
||||||
start: int = 1,
|
start: int = 1,
|
||||||
boundary: FlagBoundary | None = None,
|
boundary: FlagBoundary | None = None,
|
||||||
) -> type[Enum]:
|
) -> type[Enum]:
|
||||||
"""Either returns an existing member, or creates a new enum class.
|
"""
|
||||||
|
Either returns an existing member, or creates a new enum class.
|
||||||
|
|
||||||
This method is used both when an enum class is given a value to match
|
This method is used both when an enum class is given a value to match
|
||||||
to an enumeration member (i.e. Color(3)) and for the functional API
|
to an enumeration member (i.e. Color(3)) and for the functional API
|
||||||
|
@ -252,7 +274,8 @@ class EnumMeta(type):
|
||||||
type: type | None = None,
|
type: type | None = None,
|
||||||
start: int = 1,
|
start: int = 1,
|
||||||
) -> type[Enum]:
|
) -> type[Enum]:
|
||||||
"""Either returns an existing member, or creates a new enum class.
|
"""
|
||||||
|
Either returns an existing member, or creates a new enum class.
|
||||||
|
|
||||||
This method is used both when an enum class is given a value to match
|
This method is used both when an enum class is given a value to match
|
||||||
to an enumeration member (i.e. Color(3)) and for the functional API
|
to an enumeration member (i.e. Color(3)) and for the functional API
|
||||||
|
@ -285,7 +308,8 @@ class EnumMeta(type):
|
||||||
if sys.version_info >= (3, 12):
|
if sys.version_info >= (3, 12):
|
||||||
@overload
|
@overload
|
||||||
def __call__(cls: type[_EnumMemberT], value: Any, *values: Any) -> _EnumMemberT:
|
def __call__(cls: type[_EnumMemberT], value: Any, *values: Any) -> _EnumMemberT:
|
||||||
"""Either returns an existing member, or creates a new enum class.
|
"""
|
||||||
|
Either returns an existing member, or creates a new enum class.
|
||||||
|
|
||||||
This method is used both when an enum class is given a value to match
|
This method is used both when an enum class is given a value to match
|
||||||
to an enumeration member (i.e. Color(3)) and for the functional API
|
to an enumeration member (i.e. Color(3)) and for the functional API
|
||||||
|
@ -323,7 +347,8 @@ if sys.version_info >= (3, 11):
|
||||||
EnumType = EnumMeta
|
EnumType = EnumMeta
|
||||||
|
|
||||||
class property(types.DynamicClassAttribute):
|
class property(types.DynamicClassAttribute):
|
||||||
"""This is a descriptor, used to define attributes that act differently
|
"""
|
||||||
|
This is a descriptor, used to define attributes that act differently
|
||||||
when accessed through an enum member and through an enum class.
|
when accessed through an enum member and through an enum class.
|
||||||
Instance access is the same as property(), but access to an attribute
|
Instance access is the same as property(), but access to an attribute
|
||||||
through the enum class will instead look in the class' _member_map_ for
|
through the enum class will instead look in the class' _member_map_ for
|
||||||
|
@ -340,7 +365,8 @@ else:
|
||||||
_magic_enum_attr = types.DynamicClassAttribute
|
_magic_enum_attr = types.DynamicClassAttribute
|
||||||
|
|
||||||
class Enum(metaclass=EnumMeta):
|
class Enum(metaclass=EnumMeta):
|
||||||
"""Create a collection of name/value pairs.
|
"""
|
||||||
|
Create a collection of name/value pairs.
|
||||||
|
|
||||||
Example enumeration:
|
Example enumeration:
|
||||||
|
|
||||||
|
@ -394,7 +420,8 @@ class Enum(metaclass=EnumMeta):
|
||||||
def _missing_(cls, value: object) -> Any: ...
|
def _missing_(cls, value: object) -> Any: ...
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _generate_next_value_(name: str, start: int, count: int, last_values: list[Any]) -> Any:
|
def _generate_next_value_(name: str, start: int, count: int, last_values: list[Any]) -> Any:
|
||||||
"""Generate the next value when not given.
|
"""
|
||||||
|
Generate the next value when not given.
|
||||||
|
|
||||||
name: the name of the member
|
name: the name of the member
|
||||||
start: the initial start value or None
|
start: the initial start value or None
|
||||||
|
@ -408,11 +435,15 @@ class Enum(metaclass=EnumMeta):
|
||||||
# and in practice using `object` here has the same effect as using `Any`.
|
# and in practice using `object` here has the same effect as using `Any`.
|
||||||
def __new__(cls, value: object) -> Self: ...
|
def __new__(cls, value: object) -> Self: ...
|
||||||
def __dir__(self) -> list[str]:
|
def __dir__(self) -> list[str]:
|
||||||
"""Returns public methods and other interesting attributes."""
|
"""
|
||||||
|
Returns public methods and other interesting attributes.
|
||||||
|
"""
|
||||||
|
|
||||||
def __hash__(self) -> int: ...
|
def __hash__(self) -> int: ...
|
||||||
def __format__(self, format_spec: str) -> str:
|
def __format__(self, format_spec: str) -> str:
|
||||||
"""Returns format using actual value type unless __str__ has been overridden."""
|
"""
|
||||||
|
Returns format using actual value type unless __str__ has been overridden.
|
||||||
|
"""
|
||||||
|
|
||||||
def __reduce_ex__(self, proto: Unused) -> tuple[Any, ...]: ...
|
def __reduce_ex__(self, proto: Unused) -> tuple[Any, ...]: ...
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
|
@ -429,7 +460,9 @@ class Enum(metaclass=EnumMeta):
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
class ReprEnum(Enum):
|
class ReprEnum(Enum):
|
||||||
"""Only changes the repr(), leaving str() and format() to the mixed-in type."""
|
"""
|
||||||
|
Only changes the repr(), leaving str() and format() to the mixed-in type.
|
||||||
|
"""
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
_IntEnumBase = ReprEnum
|
_IntEnumBase = ReprEnum
|
||||||
|
@ -437,7 +470,9 @@ else:
|
||||||
_IntEnumBase = Enum
|
_IntEnumBase = Enum
|
||||||
|
|
||||||
class IntEnum(int, _IntEnumBase):
|
class IntEnum(int, _IntEnumBase):
|
||||||
"""Enum where members are also (and must be) ints"""
|
"""
|
||||||
|
Enum where members are also (and must be) ints
|
||||||
|
"""
|
||||||
|
|
||||||
_value_: int
|
_value_: int
|
||||||
@_magic_enum_attr
|
@_magic_enum_attr
|
||||||
|
@ -447,12 +482,16 @@ class IntEnum(int, _IntEnumBase):
|
||||||
def __new__(cls, value: int) -> Self: ...
|
def __new__(cls, value: int) -> Self: ...
|
||||||
|
|
||||||
def unique(enumeration: _EnumerationT) -> _EnumerationT:
|
def unique(enumeration: _EnumerationT) -> _EnumerationT:
|
||||||
"""Class decorator for enumerations ensuring unique member values."""
|
"""
|
||||||
|
Class decorator for enumerations ensuring unique member values.
|
||||||
|
"""
|
||||||
|
|
||||||
_auto_null: Any
|
_auto_null: Any
|
||||||
|
|
||||||
class Flag(Enum):
|
class Flag(Enum):
|
||||||
"""Support for flags"""
|
"""
|
||||||
|
Support for flags
|
||||||
|
"""
|
||||||
|
|
||||||
_name_: str | None # type: ignore[assignment]
|
_name_: str | None # type: ignore[assignment]
|
||||||
_value_: int
|
_value_: int
|
||||||
|
@ -465,7 +504,9 @@ class Flag(Enum):
|
||||||
"""The value of the Enum member."""
|
"""The value of the Enum member."""
|
||||||
|
|
||||||
def __contains__(self, other: Self) -> bool:
|
def __contains__(self, other: Self) -> bool:
|
||||||
"""Returns True if self has at least the same flags set as other."""
|
"""
|
||||||
|
Returns True if self has at least the same flags set as other.
|
||||||
|
"""
|
||||||
|
|
||||||
def __bool__(self) -> bool: ...
|
def __bool__(self) -> bool: ...
|
||||||
def __or__(self, other: Self) -> Self: ...
|
def __or__(self, other: Self) -> Self: ...
|
||||||
|
@ -474,7 +515,9 @@ class Flag(Enum):
|
||||||
def __invert__(self) -> Self: ...
|
def __invert__(self) -> Self: ...
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
def __iter__(self) -> Iterator[Self]:
|
def __iter__(self) -> Iterator[Self]:
|
||||||
"""Returns flags in definition order."""
|
"""
|
||||||
|
Returns flags in definition order.
|
||||||
|
"""
|
||||||
|
|
||||||
def __len__(self) -> int: ...
|
def __len__(self) -> int: ...
|
||||||
__ror__ = __or__
|
__ror__ = __or__
|
||||||
|
@ -483,7 +526,9 @@ class Flag(Enum):
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
class StrEnum(str, ReprEnum):
|
class StrEnum(str, ReprEnum):
|
||||||
"""Enum where members are also (and must be) strings"""
|
"""
|
||||||
|
Enum where members are also (and must be) strings
|
||||||
|
"""
|
||||||
|
|
||||||
def __new__(cls, value: str) -> Self: ...
|
def __new__(cls, value: str) -> Self: ...
|
||||||
_value_: str
|
_value_: str
|
||||||
|
@ -493,10 +538,14 @@ if sys.version_info >= (3, 11):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _generate_next_value_(name: str, start: int, count: int, last_values: list[str]) -> str:
|
def _generate_next_value_(name: str, start: int, count: int, last_values: list[str]) -> str:
|
||||||
"""Return the lower-cased version of the member name."""
|
"""
|
||||||
|
Return the lower-cased version of the member name.
|
||||||
|
"""
|
||||||
|
|
||||||
class EnumCheck(StrEnum):
|
class EnumCheck(StrEnum):
|
||||||
"""various conditions to check an enumeration for"""
|
"""
|
||||||
|
various conditions to check an enumeration for
|
||||||
|
"""
|
||||||
|
|
||||||
CONTINUOUS = "no skipped integer values"
|
CONTINUOUS = "no skipped integer values"
|
||||||
NAMED_FLAGS = "multi-flag aliases may not contain unnamed flags"
|
NAMED_FLAGS = "multi-flag aliases may not contain unnamed flags"
|
||||||
|
@ -507,13 +556,16 @@ if sys.version_info >= (3, 11):
|
||||||
UNIQUE = EnumCheck.UNIQUE
|
UNIQUE = EnumCheck.UNIQUE
|
||||||
|
|
||||||
class verify:
|
class verify:
|
||||||
"""Check an enumeration for various constraints. (see EnumCheck)"""
|
"""
|
||||||
|
Check an enumeration for various constraints. (see EnumCheck)
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, *checks: EnumCheck) -> None: ...
|
def __init__(self, *checks: EnumCheck) -> None: ...
|
||||||
def __call__(self, enumeration: _EnumerationT) -> _EnumerationT: ...
|
def __call__(self, enumeration: _EnumerationT) -> _EnumerationT: ...
|
||||||
|
|
||||||
class FlagBoundary(StrEnum):
|
class FlagBoundary(StrEnum):
|
||||||
"""control how out of range values are handled
|
"""
|
||||||
|
control how out of range values are handled
|
||||||
"strict" -> error is raised [default for Flag]
|
"strict" -> error is raised [default for Flag]
|
||||||
"conform" -> extra bits are discarded
|
"conform" -> extra bits are discarded
|
||||||
"eject" -> lose flag status
|
"eject" -> lose flag status
|
||||||
|
@ -531,22 +583,27 @@ if sys.version_info >= (3, 11):
|
||||||
KEEP = FlagBoundary.KEEP
|
KEEP = FlagBoundary.KEEP
|
||||||
|
|
||||||
def global_str(self: Enum) -> str:
|
def global_str(self: Enum) -> str:
|
||||||
"""use enum_name instead of class.enum_name"""
|
"""
|
||||||
|
use enum_name instead of class.enum_name
|
||||||
|
"""
|
||||||
|
|
||||||
def global_enum(cls: _EnumerationT, update_str: bool = False) -> _EnumerationT:
|
def global_enum(cls: _EnumerationT, update_str: bool = False) -> _EnumerationT:
|
||||||
"""decorator that makes the repr() of an enum member reference its module
|
"""
|
||||||
|
decorator that makes the repr() of an enum member reference its module
|
||||||
instead of its class; also exports all members to the enum's module's
|
instead of its class; also exports all members to the enum's module's
|
||||||
global namespace
|
global namespace
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def global_enum_repr(self: Enum) -> str:
|
def global_enum_repr(self: Enum) -> str:
|
||||||
"""use module.enum_name instead of class.enum_name
|
"""
|
||||||
|
use module.enum_name instead of class.enum_name
|
||||||
|
|
||||||
the module is the last module in case of a multi-module name
|
the module is the last module in case of a multi-module name
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def global_flag_repr(self: Flag) -> str:
|
def global_flag_repr(self: Flag) -> str:
|
||||||
"""use module.flag_name instead of class.flag_name
|
"""
|
||||||
|
use module.flag_name instead of class.flag_name
|
||||||
|
|
||||||
the module is the last module in case of a multi-module name
|
the module is the last module in case of a multi-module name
|
||||||
"""
|
"""
|
||||||
|
@ -554,7 +611,9 @@ if sys.version_info >= (3, 11):
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
# The body of the class is the same, but the base classes are different.
|
# The body of the class is the same, but the base classes are different.
|
||||||
class IntFlag(int, ReprEnum, Flag, boundary=KEEP): # type: ignore[misc] # complaints about incompatible bases
|
class IntFlag(int, ReprEnum, Flag, boundary=KEEP): # type: ignore[misc] # complaints about incompatible bases
|
||||||
"""Support for integer-based Flags"""
|
"""
|
||||||
|
Support for integer-based Flags
|
||||||
|
"""
|
||||||
|
|
||||||
def __new__(cls, value: int) -> Self: ...
|
def __new__(cls, value: int) -> Self: ...
|
||||||
def __or__(self, other: int) -> Self: ...
|
def __or__(self, other: int) -> Self: ...
|
||||||
|
@ -567,7 +626,9 @@ if sys.version_info >= (3, 11):
|
||||||
|
|
||||||
else:
|
else:
|
||||||
class IntFlag(int, Flag): # type: ignore[misc] # complaints about incompatible bases
|
class IntFlag(int, Flag): # type: ignore[misc] # complaints about incompatible bases
|
||||||
"""Support for integer-based Flags"""
|
"""
|
||||||
|
Support for integer-based Flags
|
||||||
|
"""
|
||||||
|
|
||||||
def __new__(cls, value: int) -> Self: ...
|
def __new__(cls, value: int) -> Self: ...
|
||||||
def __or__(self, other: int) -> Self: ...
|
def __or__(self, other: int) -> Self: ...
|
||||||
|
@ -579,17 +640,13 @@ else:
|
||||||
__rxor__ = __xor__
|
__rxor__ = __xor__
|
||||||
|
|
||||||
class auto:
|
class auto:
|
||||||
"""Instances are replaced with an appropriate value in Enum class suites."""
|
"""
|
||||||
|
Instances are replaced with an appropriate value in Enum class suites.
|
||||||
|
"""
|
||||||
|
|
||||||
_value_: Any
|
_value_: Any
|
||||||
@_magic_enum_attr
|
@_magic_enum_attr
|
||||||
def value(self) -> Any:
|
def value(self) -> Any: ...
|
||||||
"""The base class of the class hierarchy.
|
|
||||||
|
|
||||||
When called, it accepts no arguments and returns a new featureless
|
|
||||||
instance that has no instance attributes and cannot be given any.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __new__(cls) -> Self: ...
|
def __new__(cls) -> Self: ...
|
||||||
|
|
||||||
# These don't exist, but auto is basically immediately replaced with
|
# These don't exist, but auto is basically immediately replaced with
|
||||||
|
|
|
@ -41,6 +41,7 @@ def cmp(f1: StrOrBytesPath, f2: StrOrBytesPath, shallow: bool | Literal[0, 1] =
|
||||||
This function uses a cache for past comparisons and the results,
|
This function uses a cache for past comparisons and the results,
|
||||||
with cache entries invalidated if their stat information
|
with cache entries invalidated if their stat information
|
||||||
changes. The cache may be cleared by calling clear_cache().
|
changes. The cache may be cleared by calling clear_cache().
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def cmpfiles(
|
def cmpfiles(
|
||||||
|
@ -56,6 +57,7 @@ def cmpfiles(
|
||||||
files that compare equal
|
files that compare equal
|
||||||
files that are different
|
files that are different
|
||||||
filenames that aren't regular files.
|
filenames that aren't regular files.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class dircmp(Generic[AnyStr]):
|
class dircmp(Generic[AnyStr]):
|
||||||
|
|
|
@ -69,7 +69,7 @@ import sys
|
||||||
from _typeshed import AnyStr_co, StrOrBytesPath
|
from _typeshed import AnyStr_co, StrOrBytesPath
|
||||||
from collections.abc import Callable, Iterable
|
from collections.abc import Callable, Iterable
|
||||||
from types import GenericAlias, TracebackType
|
from types import GenericAlias, TracebackType
|
||||||
from typing import IO, Any, AnyStr, Generic, Literal, Protocol, overload
|
from typing import IO, Any, AnyStr, Generic, Literal, Protocol, overload, type_check_only
|
||||||
from typing_extensions import Self, TypeAlias
|
from typing_extensions import Self, TypeAlias
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
@ -92,6 +92,7 @@ if sys.version_info >= (3, 11):
|
||||||
else:
|
else:
|
||||||
_TextMode: TypeAlias = Literal["r", "rU", "U"]
|
_TextMode: TypeAlias = Literal["r", "rU", "U"]
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _HasReadlineAndFileno(Protocol[AnyStr_co]):
|
class _HasReadlineAndFileno(Protocol[AnyStr_co]):
|
||||||
def readline(self) -> AnyStr_co: ...
|
def readline(self) -> AnyStr_co: ...
|
||||||
def fileno(self) -> int: ...
|
def fileno(self) -> int: ...
|
||||||
|
@ -180,7 +181,8 @@ def close() -> None:
|
||||||
"""Close the sequence."""
|
"""Close the sequence."""
|
||||||
|
|
||||||
def nextfile() -> None:
|
def nextfile() -> None:
|
||||||
"""Close the current file so that the next iteration will read the first
|
"""
|
||||||
|
Close the current file so that the next iteration will read the first
|
||||||
line from the next file (if any); lines not read from the file will
|
line from the next file (if any); lines not read from the file will
|
||||||
not count towards the cumulative line count. The filename is not
|
not count towards the cumulative line count. The filename is not
|
||||||
changed until after the first line of the next file has been read.
|
changed until after the first line of the next file has been read.
|
||||||
|
@ -190,34 +192,40 @@ def nextfile() -> None:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def filename() -> str:
|
def filename() -> str:
|
||||||
"""Return the name of the file currently being read.
|
"""
|
||||||
|
Return the name of the file currently being read.
|
||||||
Before the first line has been read, returns None.
|
Before the first line has been read, returns None.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def lineno() -> int:
|
def lineno() -> int:
|
||||||
"""Return the cumulative line number of the line that has just been read.
|
"""
|
||||||
|
Return the cumulative line number of the line that has just been read.
|
||||||
Before the first line has been read, returns 0. After the last line
|
Before the first line has been read, returns 0. After the last line
|
||||||
of the last file has been read, returns the line number of that line.
|
of the last file has been read, returns the line number of that line.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def filelineno() -> int:
|
def filelineno() -> int:
|
||||||
"""Return the line number in the current file. Before the first line
|
"""
|
||||||
|
Return the line number in the current file. Before the first line
|
||||||
has been read, returns 0. After the last line of the last file has
|
has been read, returns 0. After the last line of the last file has
|
||||||
been read, returns the line number of that line within the file.
|
been read, returns the line number of that line within the file.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def fileno() -> int:
|
def fileno() -> int:
|
||||||
"""Return the file number of the current file. When no file is currently
|
"""
|
||||||
|
Return the file number of the current file. When no file is currently
|
||||||
opened, returns -1.
|
opened, returns -1.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def isfirstline() -> bool:
|
def isfirstline() -> bool:
|
||||||
"""Returns true the line just read is the first line of its file,
|
"""
|
||||||
|
Returns true the line just read is the first line of its file,
|
||||||
otherwise returns false.
|
otherwise returns false.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def isstdin() -> bool:
|
def isstdin() -> bool:
|
||||||
"""Returns true if the last line was read from sys.stdin,
|
"""
|
||||||
|
Returns true if the last line was read from sys.stdin,
|
||||||
otherwise returns false.
|
otherwise returns false.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@ class NullFormatter:
|
||||||
|
|
||||||
Implementations should inherit from this class if implementing a writer
|
Implementations should inherit from this class if implementing a writer
|
||||||
interface but don't need to inherit any implementation.
|
interface but don't need to inherit any implementation.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
writer: NullWriter | None
|
writer: NullWriter | None
|
||||||
|
@ -62,6 +63,7 @@ class AbstractFormatter:
|
||||||
This implementation has demonstrated wide applicability to many writers,
|
This implementation has demonstrated wide applicability to many writers,
|
||||||
and may be used directly in most circumstances. It has been used to
|
and may be used directly in most circumstances. It has been used to
|
||||||
implement a full-featured World Wide Web browser.
|
implement a full-featured World Wide Web browser.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
writer: NullWriter
|
writer: NullWriter
|
||||||
|
@ -105,6 +107,7 @@ class NullWriter:
|
||||||
A writer which only provides the interface definition; no actions are
|
A writer which only provides the interface definition; no actions are
|
||||||
taken on any methods. This should be the base class for all writers
|
taken on any methods. This should be the base class for all writers
|
||||||
which do not need to inherit any implementation methods.
|
which do not need to inherit any implementation methods.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def flush(self) -> None: ...
|
def flush(self) -> None: ...
|
||||||
|
@ -125,6 +128,7 @@ class AbstractWriter(NullWriter):
|
||||||
|
|
||||||
Each method simply announces itself by printing its name and
|
Each method simply announces itself by printing its name and
|
||||||
arguments on standard output.
|
arguments on standard output.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class DumbWriter(NullWriter):
|
class DumbWriter(NullWriter):
|
||||||
|
@ -133,6 +137,7 @@ class DumbWriter(NullWriter):
|
||||||
output is simply word-wrapped to the number of columns specified by
|
output is simply word-wrapped to the number of columns specified by
|
||||||
the maxcol parameter. This class is suitable for reflowing a sequence
|
the maxcol parameter. This class is suitable for reflowing a sequence
|
||||||
of paragraphs.
|
of paragraphs.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
file: IO[str]
|
file: IO[str]
|
||||||
|
|
|
@ -4,13 +4,14 @@ import sys
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from numbers import Rational, Real
|
from numbers import Rational, Real
|
||||||
from typing import Any, Literal, Protocol, SupportsIndex, overload
|
from typing import Any, Literal, Protocol, SupportsIndex, overload, type_check_only
|
||||||
from typing_extensions import Self, TypeAlias
|
from typing_extensions import Self, TypeAlias
|
||||||
|
|
||||||
_ComparableNum: TypeAlias = int | float | Decimal | Real
|
_ComparableNum: TypeAlias = int | float | Decimal | Real
|
||||||
|
|
||||||
__all__ = ["Fraction"]
|
__all__ = ["Fraction"]
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _ConvertibleToIntegerRatio(Protocol):
|
class _ConvertibleToIntegerRatio(Protocol):
|
||||||
def as_integer_ratio(self) -> tuple[int | Rational, int | Rational]: ...
|
def as_integer_ratio(self) -> tuple[int | Rational, int | Rational]: ...
|
||||||
|
|
||||||
|
@ -32,6 +33,7 @@ class Fraction(Rational):
|
||||||
- float and Decimal instances
|
- float and Decimal instances
|
||||||
|
|
||||||
- other Rational instances (including integers)
|
- other Rational instances (including integers)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -64,6 +66,7 @@ class Fraction(Rational):
|
||||||
Fraction(9, 4)
|
Fraction(9, 4)
|
||||||
>>> Fraction(Decimal('1.47'))
|
>>> Fraction(Decimal('1.47'))
|
||||||
Fraction(147, 100)
|
Fraction(147, 100)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -100,6 +103,7 @@ class Fraction(Rational):
|
||||||
Fraction(9, 4)
|
Fraction(9, 4)
|
||||||
>>> Fraction(Decimal('1.47'))
|
>>> Fraction(Decimal('1.47'))
|
||||||
Fraction(147, 100)
|
Fraction(147, 100)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -107,6 +111,7 @@ class Fraction(Rational):
|
||||||
"""Converts a finite float to a rational number, exactly.
|
"""Converts a finite float to a rational number, exactly.
|
||||||
|
|
||||||
Beware that Fraction.from_float(0.3) != Fraction(3, 10).
|
Beware that Fraction.from_float(0.3) != Fraction(3, 10).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -122,6 +127,7 @@ class Fraction(Rational):
|
||||||
Fraction(311, 99)
|
Fraction(311, 99)
|
||||||
>>> Fraction(4321, 8765).limit_denominator(10000)
|
>>> Fraction(4321, 8765).limit_denominator(10000)
|
||||||
Fraction(4321, 8765)
|
Fraction(4321, 8765)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def as_integer_ratio(self) -> tuple[int, int]:
|
def as_integer_ratio(self) -> tuple[int, int]:
|
||||||
|
@ -245,6 +251,7 @@ class Fraction(Rational):
|
||||||
If b is not an integer, the result will be a float or complex
|
If b is not an integer, the result will be a float or complex
|
||||||
since roots are generally irrational. If b is an integer, the
|
since roots are generally irrational. If b is an integer, the
|
||||||
result will be rational.
|
result will be rational.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -259,6 +266,7 @@ class Fraction(Rational):
|
||||||
If b is not an integer, the result will be a float or complex
|
If b is not an integer, the result will be a float or complex
|
||||||
since roots are generally irrational. If b is an integer, the
|
since roots are generally irrational. If b is an integer, the
|
||||||
result will be rational.
|
result will be rational.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -351,4 +359,5 @@ class Fraction(Rational):
|
||||||
"""Converts a finite real number to a rational number, exactly.
|
"""Converts a finite real number to a rational number, exactly.
|
||||||
|
|
||||||
Beware that Fraction.from_number(0.3) != Fraction(3, 10).
|
Beware that Fraction.from_number(0.3) != Fraction(3, 10).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -135,6 +135,7 @@ def lru_cache(maxsize: int | None = 128, typed: bool = False) -> Callable[[Calla
|
||||||
Access the underlying function with f.__wrapped__.
|
Access the underlying function with f.__wrapped__.
|
||||||
|
|
||||||
See: https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_(LRU)
|
See: https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_(LRU)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -434,6 +435,7 @@ def _make_key(
|
||||||
If there is only a single argument and its data type is known to cache
|
If there is only a single argument and its data type is known to cache
|
||||||
its hash value, then that argument is returned without a wrapper. This
|
its hash value, then that argument is returned without a wrapper. This
|
||||||
saves space and improves lookup speed.
|
saves space and improves lookup speed.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if sys.version_info >= (3, 14):
|
if sys.version_info >= (3, 14):
|
||||||
|
|
|
@ -56,6 +56,7 @@ def getopt(
|
||||||
string if the option has no argument. The options occur in the
|
string if the option has no argument. The options occur in the
|
||||||
list in the same order in which they were found, thus allowing
|
list in the same order in which they were found, thus allowing
|
||||||
multiple occurrences. Long and short options may be mixed.
|
multiple occurrences. Long and short options may be mixed.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def gnu_getopt(
|
def gnu_getopt(
|
||||||
|
@ -72,6 +73,7 @@ def gnu_getopt(
|
||||||
If the first character of the option string is '+', or if the
|
If the first character of the option string is '+', or if the
|
||||||
environment variable POSIXLY_CORRECT is set, then option
|
environment variable POSIXLY_CORRECT is set, then option
|
||||||
processing stops as soon as a non-option argument is encountered.
|
processing stops as soon as a non-option argument is encountered.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class GetoptError(Exception):
|
class GetoptError(Exception):
|
||||||
|
|
|
@ -14,7 +14,7 @@ import io
|
||||||
import sys
|
import sys
|
||||||
from _typeshed import StrPath
|
from _typeshed import StrPath
|
||||||
from collections.abc import Callable, Container, Iterable, Sequence
|
from collections.abc import Callable, Container, Iterable, Sequence
|
||||||
from typing import Any, Final, Literal, Protocol, TypeVar, overload
|
from typing import Any, Final, Literal, Protocol, TypeVar, overload, type_check_only
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"NullTranslations",
|
"NullTranslations",
|
||||||
|
@ -38,6 +38,7 @@ __all__ = [
|
||||||
if sys.version_info < (3, 11):
|
if sys.version_info < (3, 11):
|
||||||
__all__ += ["bind_textdomain_codeset", "ldgettext", "ldngettext", "lgettext", "lngettext"]
|
__all__ += ["bind_textdomain_codeset", "ldgettext", "ldngettext", "lgettext", "lngettext"]
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _TranslationsReader(Protocol):
|
class _TranslationsReader(Protocol):
|
||||||
def read(self) -> bytes: ...
|
def read(self) -> bytes: ...
|
||||||
# optional:
|
# optional:
|
||||||
|
|
|
@ -42,6 +42,7 @@ class TopologicalSorter(Generic[_T]):
|
||||||
therefore no more nodes can be added using "add".
|
therefore no more nodes can be added using "add".
|
||||||
|
|
||||||
Raise ValueError if nodes have already been passed out of the sorter.
|
Raise ValueError if nodes have already been passed out of the sorter.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def is_active(self) -> bool:
|
def is_active(self) -> bool:
|
||||||
|
|
|
@ -8,7 +8,7 @@ import sys
|
||||||
import zlib
|
import zlib
|
||||||
from _typeshed import ReadableBuffer, SizedBuffer, StrOrBytesPath, WriteableBuffer
|
from _typeshed import ReadableBuffer, SizedBuffer, StrOrBytesPath, WriteableBuffer
|
||||||
from io import FileIO, TextIOWrapper
|
from io import FileIO, TextIOWrapper
|
||||||
from typing import Final, Literal, Protocol, overload
|
from typing import Final, Literal, Protocol, overload, type_check_only
|
||||||
from typing_extensions import TypeAlias
|
from typing_extensions import TypeAlias
|
||||||
|
|
||||||
if sys.version_info >= (3, 14):
|
if sys.version_info >= (3, 14):
|
||||||
|
@ -31,6 +31,7 @@ FEXTRA: Final[int] # actually Literal[4] # undocumented
|
||||||
FNAME: Final[int] # actually Literal[8] # undocumented
|
FNAME: Final[int] # actually Literal[8] # undocumented
|
||||||
FCOMMENT: Final[int] # actually Literal[16] # undocumented
|
FCOMMENT: Final[int] # actually Literal[16] # undocumented
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _ReadableFileobj(Protocol):
|
class _ReadableFileobj(Protocol):
|
||||||
def read(self, n: int, /) -> bytes: ...
|
def read(self, n: int, /) -> bytes: ...
|
||||||
def seek(self, n: int, /) -> object: ...
|
def seek(self, n: int, /) -> object: ...
|
||||||
|
@ -39,6 +40,7 @@ class _ReadableFileobj(Protocol):
|
||||||
# mode: str
|
# mode: str
|
||||||
# def fileno() -> int: ...
|
# def fileno() -> int: ...
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _WritableFileobj(Protocol):
|
class _WritableFileobj(Protocol):
|
||||||
def write(self, b: bytes, /) -> object: ...
|
def write(self, b: bytes, /) -> object: ...
|
||||||
def flush(self) -> object: ...
|
def flush(self) -> object: ...
|
||||||
|
@ -72,6 +74,7 @@ def open(
|
||||||
For text mode, a GzipFile object is created, and wrapped in an
|
For text mode, a GzipFile object is created, and wrapped in an
|
||||||
io.TextIOWrapper instance with the specified encoding, error handling
|
io.TextIOWrapper instance with the specified encoding, error handling
|
||||||
behavior, and line ending(s).
|
behavior, and line ending(s).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -124,6 +127,7 @@ class GzipFile(BaseStream):
|
||||||
|
|
||||||
This class only supports opening files in binary mode. If you need to open a
|
This class only supports opening files in binary mode. If you need to open a
|
||||||
compressed file in text mode, use the gzip.open() function.
|
compressed file in text mode, use the gzip.open() function.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
myfileobj: FileIO | None
|
myfileobj: FileIO | None
|
||||||
|
@ -171,6 +175,7 @@ class GzipFile(BaseStream):
|
||||||
is in Unix format, i.e., seconds since 00:00:00 UTC, January 1, 1970.
|
is in Unix format, i.e., seconds since 00:00:00 UTC, January 1, 1970.
|
||||||
If mtime is omitted or None, the current time is used. Use mtime = 0
|
If mtime is omitted or None, the current time is used. Use mtime = 0
|
||||||
to generate a compressed stream that does not depend on creation time.
|
to generate a compressed stream that does not depend on creation time.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
|
|
@ -58,6 +58,7 @@ def merge(
|
||||||
|
|
||||||
>>> list(merge(['dog', 'horse'], ['cat', 'fish', 'kangaroo'], key=len))
|
>>> list(merge(['dog', 'horse'], ['cat', 'fish', 'kangaroo'], key=len))
|
||||||
['dog', 'cat', 'fish', 'horse', 'kangaroo']
|
['dog', 'cat', 'fish', 'horse', 'kangaroo']
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def nlargest(n: int, iterable: Iterable[_S], key: Callable[[_S], SupportsRichComparison] | None = None) -> list[_S]:
|
def nlargest(n: int, iterable: Iterable[_S], key: Callable[[_S], SupportsRichComparison] | None = None) -> list[_S]:
|
||||||
|
|
|
@ -7,14 +7,16 @@ from typing import AnyStr
|
||||||
__all__ = ["escape", "unescape"]
|
__all__ = ["escape", "unescape"]
|
||||||
|
|
||||||
def escape(s: AnyStr, quote: bool = True) -> AnyStr:
|
def escape(s: AnyStr, quote: bool = True) -> AnyStr:
|
||||||
"""Replace special characters "&", "<" and ">" to HTML-safe sequences.
|
"""
|
||||||
|
Replace special characters "&", "<" and ">" to HTML-safe sequences.
|
||||||
If the optional flag quote is true (the default), the quotation mark
|
If the optional flag quote is true (the default), the quotation mark
|
||||||
characters, both double quote (") and single quote (') characters are also
|
characters, both double quote (") and single quote (') characters are also
|
||||||
translated.
|
translated.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def unescape(s: AnyStr) -> AnyStr:
|
def unescape(s: AnyStr) -> AnyStr:
|
||||||
"""Convert all named and numeric character references (e.g. >, >,
|
"""
|
||||||
|
Convert all named and numeric character references (e.g. >, >,
|
||||||
&x3e;) in the string s to the corresponding unicode characters.
|
&x3e;) in the string s to the corresponding unicode characters.
|
||||||
This function uses the rules defined by the HTML 5 standard
|
This function uses the rules defined by the HTML 5 standard
|
||||||
for both valid and invalid character references, and the list of
|
for both valid and invalid character references, and the list of
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
"""A parser for HTML and XHTML."""
|
"""A parser for HTML and XHTML."""
|
||||||
|
|
||||||
|
import sys
|
||||||
from _markupbase import ParserBase
|
from _markupbase import ParserBase
|
||||||
from re import Pattern
|
from re import Pattern
|
||||||
|
from typing import Final
|
||||||
|
|
||||||
__all__ = ["HTMLParser"]
|
__all__ = ["HTMLParser"]
|
||||||
|
|
||||||
|
@ -27,6 +29,10 @@ class HTMLParser(ParserBase):
|
||||||
argument.
|
argument.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
CDATA_CONTENT_ELEMENTS: Final[tuple[str, ...]]
|
||||||
|
if sys.version_info >= (3, 14):
|
||||||
|
RCDATA_CONTENT_ELEMENTS: Final[tuple[str, ...]]
|
||||||
|
|
||||||
def __init__(self, *, convert_charrefs: bool = True) -> None:
|
def __init__(self, *, convert_charrefs: bool = True) -> None:
|
||||||
"""Initialize and reset this instance.
|
"""Initialize and reset this instance.
|
||||||
|
|
||||||
|
@ -56,7 +62,6 @@ class HTMLParser(ParserBase):
|
||||||
def handle_comment(self, data: str) -> None: ...
|
def handle_comment(self, data: str) -> None: ...
|
||||||
def handle_decl(self, decl: str) -> None: ...
|
def handle_decl(self, decl: str) -> None: ...
|
||||||
def handle_pi(self, data: str) -> None: ...
|
def handle_pi(self, data: str) -> None: ...
|
||||||
CDATA_CONTENT_ELEMENTS: tuple[str, ...]
|
|
||||||
def check_for_whole_start_tag(self, i: int) -> int: ... # undocumented
|
def check_for_whole_start_tag(self, i: int) -> int: ... # undocumented
|
||||||
def clear_cdata_mode(self) -> None: ... # undocumented
|
def clear_cdata_mode(self) -> None: ... # undocumented
|
||||||
def goahead(self, end: bool) -> None: ... # undocumented
|
def goahead(self, end: bool) -> None: ... # undocumented
|
||||||
|
@ -65,6 +70,9 @@ class HTMLParser(ParserBase):
|
||||||
def parse_html_declaration(self, i: int) -> int: ... # undocumented
|
def parse_html_declaration(self, i: int) -> int: ... # undocumented
|
||||||
def parse_pi(self, i: int) -> int: ... # undocumented
|
def parse_pi(self, i: int) -> int: ... # undocumented
|
||||||
def parse_starttag(self, i: int) -> int: ... # undocumented
|
def parse_starttag(self, i: int) -> int: ... # undocumented
|
||||||
|
if sys.version_info >= (3, 14):
|
||||||
|
def set_cdata_mode(self, elem: str, *, escapable: bool = False) -> None: ... # undocumented
|
||||||
|
else:
|
||||||
def set_cdata_mode(self, elem: str) -> None: ... # undocumented
|
def set_cdata_mode(self, elem: str) -> None: ... # undocumented
|
||||||
rawdata: str # undocumented
|
rawdata: str # undocumented
|
||||||
cdata_elem: str | None # undocumented
|
cdata_elem: str | None # undocumented
|
||||||
|
|
|
@ -197,6 +197,7 @@ class HTTPMessage(email.message.Message[str, str]):
|
||||||
returned, without interpretation. If the header does not occur, an
|
returned, without interpretation. If the header does not occur, an
|
||||||
empty list is returned. If the header occurs multiple times, all
|
empty list is returned. If the header occurs multiple times, all
|
||||||
occurrences are returned. Case is not important in the header name.
|
occurrences are returned. Case is not important in the header name.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -250,6 +251,7 @@ class HTTPResponse(io.BufferedIOBase, BinaryIO): # type: ignore[misc] # incomp
|
||||||
the *default* is not specified.
|
the *default* is not specified.
|
||||||
|
|
||||||
If the headers are unknown, raises http.client.ResponseNotReady.
|
If the headers are unknown, raises http.client.ResponseNotReady.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -284,6 +286,7 @@ class HTTPResponse(io.BufferedIOBase, BinaryIO): # type: ignore[misc] # incomp
|
||||||
Content-Length giving file size, and a Content-Type
|
Content-Length giving file size, and a Content-Type
|
||||||
containing a guess at the file's type. See also the
|
containing a guess at the file's type. See also the
|
||||||
description of the mimetools module.
|
description of the mimetools module.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def geturl(self) -> str:
|
def geturl(self) -> str:
|
||||||
|
@ -294,11 +297,13 @@ class HTTPResponse(io.BufferedIOBase, BinaryIO): # type: ignore[misc] # incomp
|
||||||
some cases the caller needs to know which URL the client was
|
some cases the caller needs to know which URL the client was
|
||||||
redirected to. The geturl() method can be used to get at this
|
redirected to. The geturl() method can be used to get at this
|
||||||
redirected URL.
|
redirected URL.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def getcode(self) -> int:
|
def getcode(self) -> int:
|
||||||
"""Return the HTTP status code that was sent with the response,
|
"""Return the HTTP status code that was sent with the response,
|
||||||
or None if the URL is not an HTTP URL.
|
or None if the URL is not an HTTP URL.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def begin(self) -> None: ...
|
def begin(self) -> None: ...
|
||||||
|
@ -348,7 +353,8 @@ class HTTPConnection:
|
||||||
def set_debuglevel(self, level: int) -> None: ...
|
def set_debuglevel(self, level: int) -> None: ...
|
||||||
if sys.version_info >= (3, 12):
|
if sys.version_info >= (3, 12):
|
||||||
def get_proxy_response_headers(self) -> HTTPMessage | None:
|
def get_proxy_response_headers(self) -> HTTPMessage | None:
|
||||||
"""Returns a dictionary with the headers of the response
|
"""
|
||||||
|
Returns a dictionary with the headers of the response
|
||||||
received from the proxy server to the CONNECT request
|
received from the proxy server to the CONNECT request
|
||||||
sent to set the tunnel.
|
sent to set the tunnel.
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,7 @@ class CookieJar:
|
||||||
"""Add correct Cookie: header to request (urllib.request.Request object).
|
"""Add correct Cookie: header to request (urllib.request.Request object).
|
||||||
|
|
||||||
The Cookie2 header is also added unless policy.hide_cookie2 is true.
|
The Cookie2 header is also added unless policy.hide_cookie2 is true.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def extract_cookies(self, response: HTTPResponse, request: Request) -> None:
|
def extract_cookies(self, response: HTTPResponse, request: Request) -> None:
|
||||||
|
@ -91,6 +92,7 @@ class CookieJar:
|
||||||
the cookie with the specified name, path and domain is removed.
|
the cookie with the specified name, path and domain is removed.
|
||||||
|
|
||||||
Raises KeyError if no matching cookie exists.
|
Raises KeyError if no matching cookie exists.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def clear_session_cookies(self) -> None:
|
def clear_session_cookies(self) -> None:
|
||||||
|
@ -98,6 +100,7 @@ class CookieJar:
|
||||||
|
|
||||||
Note that the .save() method won't save session cookies anyway, unless
|
Note that the .save() method won't save session cookies anyway, unless
|
||||||
you ask otherwise by passing a true ignore_discard argument.
|
you ask otherwise by passing a true ignore_discard argument.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def clear_expired_cookies(self) -> None: # undocumented
|
def clear_expired_cookies(self) -> None: # undocumented
|
||||||
|
@ -108,6 +111,7 @@ class CookieJar:
|
||||||
this method is called by CookieJar itself every so often, and the
|
this method is called by CookieJar itself every so often, and the
|
||||||
.save() method won't save expired cookies anyway (unless you ask
|
.save() method won't save expired cookies anyway (unless you ask
|
||||||
otherwise by passing a true ignore_expires argument).
|
otherwise by passing a true ignore_expires argument).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __iter__(self) -> Iterator[Cookie]: ...
|
def __iter__(self) -> Iterator[Cookie]: ...
|
||||||
|
@ -120,8 +124,10 @@ class FileCookieJar(CookieJar):
|
||||||
filename: str | None
|
filename: str | None
|
||||||
delayload: bool
|
delayload: bool
|
||||||
def __init__(self, filename: StrPath | None = None, delayload: bool = False, policy: CookiePolicy | None = None) -> None:
|
def __init__(self, filename: StrPath | None = None, delayload: bool = False, policy: CookiePolicy | None = None) -> None:
|
||||||
"""Cookies are NOT loaded from the named file until either the .load() or
|
"""
|
||||||
|
Cookies are NOT loaded from the named file until either the .load() or
|
||||||
.revert() method is called.
|
.revert() method is called.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def save(self, filename: str | None = None, ignore_discard: bool = False, ignore_expires: bool = False) -> None:
|
def save(self, filename: str | None = None, ignore_discard: bool = False, ignore_expires: bool = False) -> None:
|
||||||
|
@ -135,10 +141,13 @@ class FileCookieJar(CookieJar):
|
||||||
|
|
||||||
Raises LoadError (or OSError) if reversion is not successful; the
|
Raises LoadError (or OSError) if reversion is not successful; the
|
||||||
object's state will not be altered if this happens.
|
object's state will not be altered if this happens.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class MozillaCookieJar(FileCookieJar):
|
class MozillaCookieJar(FileCookieJar):
|
||||||
"""WARNING: you may want to backup your browser's cookies file if you use
|
"""
|
||||||
|
|
||||||
|
WARNING: you may want to backup your browser's cookies file if you use
|
||||||
this class to save cookies. I *think* it works, but there have been
|
this class to save cookies. I *think* it works, but there have been
|
||||||
bugs in the past!
|
bugs in the past!
|
||||||
|
|
||||||
|
@ -164,13 +173,15 @@ class MozillaCookieJar(FileCookieJar):
|
||||||
Note that though Mozilla and Netscape use the same format, they use
|
Note that though Mozilla and Netscape use the same format, they use
|
||||||
slightly different headers. The class saves cookies using the Netscape
|
slightly different headers. The class saves cookies using the Netscape
|
||||||
header by default (Mozilla can cope with that).
|
header by default (Mozilla can cope with that).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if sys.version_info < (3, 10):
|
if sys.version_info < (3, 10):
|
||||||
header: ClassVar[str] # undocumented
|
header: ClassVar[str] # undocumented
|
||||||
|
|
||||||
class LWPCookieJar(FileCookieJar):
|
class LWPCookieJar(FileCookieJar):
|
||||||
"""The LWPCookieJar saves a sequence of "Set-Cookie3" lines.
|
"""
|
||||||
|
The LWPCookieJar saves a sequence of "Set-Cookie3" lines.
|
||||||
"Set-Cookie3" is the format used by the libwww-perl library, not known
|
"Set-Cookie3" is the format used by the libwww-perl library, not known
|
||||||
to be compatible with any browser, but which is easy to read and
|
to be compatible with any browser, but which is easy to read and
|
||||||
doesn't lose information about RFC 2965 cookies.
|
doesn't lose information about RFC 2965 cookies.
|
||||||
|
@ -178,12 +189,14 @@ class LWPCookieJar(FileCookieJar):
|
||||||
Additional methods
|
Additional methods
|
||||||
|
|
||||||
as_lwp_str(ignore_discard=True, ignore_expired=True)
|
as_lwp_str(ignore_discard=True, ignore_expired=True)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def as_lwp_str(self, ignore_discard: bool = True, ignore_expires: bool = True) -> str: # undocumented
|
def as_lwp_str(self, ignore_discard: bool = True, ignore_expires: bool = True) -> str: # undocumented
|
||||||
"""Return cookies as a string of "\\n"-separated "Set-Cookie3" headers.
|
"""Return cookies as a string of "\\n"-separated "Set-Cookie3" headers.
|
||||||
|
|
||||||
ignore_discard and ignore_expires: see docstring for FileCookieJar.save
|
ignore_discard and ignore_expires: see docstring for FileCookieJar.save
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class CookiePolicy:
|
class CookiePolicy:
|
||||||
|
@ -193,6 +206,7 @@ class CookiePolicy:
|
||||||
|
|
||||||
The subclass DefaultCookiePolicy defines the standard rules for Netscape
|
The subclass DefaultCookiePolicy defines the standard rules for Netscape
|
||||||
and RFC 2965 cookies -- override that if you want a customized policy.
|
and RFC 2965 cookies -- override that if you want a customized policy.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
netscape: bool
|
netscape: bool
|
||||||
|
@ -203,6 +217,7 @@ class CookiePolicy:
|
||||||
|
|
||||||
Currently, pre-expired cookies never get this far -- the CookieJar
|
Currently, pre-expired cookies never get this far -- the CookieJar
|
||||||
class deletes such cookies itself.
|
class deletes such cookies itself.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def return_ok(self, cookie: Cookie, request: Request) -> bool:
|
def return_ok(self, cookie: Cookie, request: Request) -> bool:
|
||||||
|
@ -289,6 +304,7 @@ class Cookie:
|
||||||
|
|
||||||
Note that the port may be present in the headers, but unspecified ("Port"
|
Note that the port may be present in the headers, but unspecified ("Port"
|
||||||
rather than"Port=80", for example); if this is the case, port is None.
|
rather than"Port=80", for example); if this is the case, port is None.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
version: int | None
|
version: int | None
|
||||||
|
|
|
@ -188,7 +188,8 @@ class BaseCookie(dict[str, Morsel[_T]], Generic[_T]):
|
||||||
"""Dictionary style assignment."""
|
"""Dictionary style assignment."""
|
||||||
|
|
||||||
class SimpleCookie(BaseCookie[str]):
|
class SimpleCookie(BaseCookie[str]):
|
||||||
"""SimpleCookie supports strings as cookie values. When setting
|
"""
|
||||||
|
SimpleCookie supports strings as cookie values. When setting
|
||||||
the value using the dictionary assignment notation, SimpleCookie
|
the value using the dictionary assignment notation, SimpleCookie
|
||||||
calls the builtin str() to convert the value to a string. Values
|
calls the builtin str() to convert the value to a string. Values
|
||||||
received from HTTP are kept as strings.
|
received from HTTP are kept as strings.
|
||||||
|
|
|
@ -196,6 +196,7 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
|
||||||
|
|
||||||
where <type> and <subtype> should be registered MIME types,
|
where <type> and <subtype> should be registered MIME types,
|
||||||
e.g. "text/html" or "text/plain".
|
e.g. "text/html" or "text/plain".
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
client_address: tuple[str, int]
|
client_address: tuple[str, int]
|
||||||
|
@ -221,6 +222,7 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
|
||||||
You normally don't need to override this method; see the class
|
You normally don't need to override this method; see the class
|
||||||
__doc__ string for information on how to handle specific HTTP
|
__doc__ string for information on how to handle specific HTTP
|
||||||
commands such as GET and POST.
|
commands such as GET and POST.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def handle_expect_100(self) -> bool:
|
def handle_expect_100(self) -> bool:
|
||||||
|
@ -235,6 +237,7 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
|
||||||
This method should either return True (possibly after sending
|
This method should either return True (possibly after sending
|
||||||
a 100 Continue response) or send an error response and return
|
a 100 Continue response) or send an error response and return
|
||||||
False.
|
False.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def send_error(self, code: int, message: str | None = None, explain: str | None = None) -> None:
|
def send_error(self, code: int, message: str | None = None, explain: str | None = None) -> None:
|
||||||
|
@ -252,6 +255,7 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
|
||||||
This sends an error response (so it must be called before any
|
This sends an error response (so it must be called before any
|
||||||
output has been generated), logs the error, and finally sends
|
output has been generated), logs the error, and finally sends
|
||||||
a piece of HTML explaining the error to the user.
|
a piece of HTML explaining the error to the user.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def send_response(self, code: int, message: str | None = None) -> None:
|
def send_response(self, code: int, message: str | None = None) -> None:
|
||||||
|
@ -260,6 +264,7 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
|
||||||
|
|
||||||
Also send two standard headers with the server software
|
Also send two standard headers with the server software
|
||||||
version and the current date.
|
version and the current date.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def send_header(self, keyword: str, value: str) -> None:
|
def send_header(self, keyword: str, value: str) -> None:
|
||||||
|
@ -276,6 +281,7 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
|
||||||
"""Log an accepted request.
|
"""Log an accepted request.
|
||||||
|
|
||||||
This is called by send_response().
|
This is called by send_response().
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def log_error(self, format: str, *args: Any) -> None:
|
def log_error(self, format: str, *args: Any) -> None:
|
||||||
|
@ -287,6 +293,7 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
|
||||||
Arguments are the same as for log_message().
|
Arguments are the same as for log_message().
|
||||||
|
|
||||||
XXX This should go to the separate error log.
|
XXX This should go to the separate error log.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def log_message(self, format: str, *args: Any) -> None:
|
def log_message(self, format: str, *args: Any) -> None:
|
||||||
|
@ -306,6 +313,7 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
|
||||||
|
|
||||||
Unicode control characters are replaced with escaped hex
|
Unicode control characters are replaced with escaped hex
|
||||||
before writing the output to stderr.
|
before writing the output to stderr.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def version_string(self) -> str:
|
def version_string(self) -> str:
|
||||||
|
@ -329,6 +337,7 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
|
||||||
|
|
||||||
Return True for success, False for failure; on failure, any relevant
|
Return True for success, False for failure; on failure, any relevant
|
||||||
error response has already been sent back.
|
error response has already been sent back.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
|
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
|
||||||
|
@ -340,6 +349,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
|
||||||
|
|
||||||
The GET and HEAD requests are identical except that the HEAD
|
The GET and HEAD requests are identical except that the HEAD
|
||||||
request omits the actual contents of the file.
|
request omits the actual contents of the file.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
extensions_map: dict[str, str]
|
extensions_map: dict[str, str]
|
||||||
|
@ -369,6 +379,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
|
||||||
to the outputfile by the caller unless the command was HEAD,
|
to the outputfile by the caller unless the command was HEAD,
|
||||||
and must be closed by the caller under all circumstances), or
|
and must be closed by the caller under all circumstances), or
|
||||||
None, in which case the caller has nothing further to do.
|
None, in which case the caller has nothing further to do.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def list_directory(self, path: StrPath) -> io.BytesIO | None: # undocumented
|
def list_directory(self, path: StrPath) -> io.BytesIO | None: # undocumented
|
||||||
|
@ -377,6 +388,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
|
||||||
Return value is either a file object, or None (indicating an
|
Return value is either a file object, or None (indicating an
|
||||||
error). In either case, the headers are sent, making the
|
error). In either case, the headers are sent, making the
|
||||||
interface the same as for send_head().
|
interface the same as for send_head().
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def translate_path(self, path: str) -> str: # undocumented
|
def translate_path(self, path: str) -> str: # undocumented
|
||||||
|
@ -385,6 +397,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
|
||||||
Components that mean special things to the local file system
|
Components that mean special things to the local file system
|
||||||
(e.g. drive or directory names) are ignored. (XXX They should
|
(e.g. drive or directory names) are ignored. (XXX They should
|
||||||
probably be diagnosed.)
|
probably be diagnosed.)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def copyfile(self, source: SupportsRead[AnyStr], outputfile: SupportsWrite[AnyStr]) -> None: # undocumented
|
def copyfile(self, source: SupportsRead[AnyStr], outputfile: SupportsWrite[AnyStr]) -> None: # undocumented
|
||||||
|
@ -399,6 +412,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
|
||||||
the block size or perhaps to replace newlines by CRLF
|
the block size or perhaps to replace newlines by CRLF
|
||||||
-- note however that this the default server uses this
|
-- note however that this the default server uses this
|
||||||
to copy binary data as well.
|
to copy binary data as well.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def guess_type(self, path: StrPath) -> str: # undocumented
|
def guess_type(self, path: StrPath) -> str: # undocumented
|
||||||
|
@ -413,6 +427,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
|
||||||
up in the table self.extensions_map, using application/octet-stream
|
up in the table self.extensions_map, using application/octet-stream
|
||||||
as a default; however it would be permissible (if
|
as a default; however it would be permissible (if
|
||||||
slow) to look inside the data to make a better guess.
|
slow) to look inside the data to make a better guess.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def executable(path: StrPath) -> bool: # undocumented
|
def executable(path: StrPath) -> bool: # undocumented
|
||||||
|
@ -425,6 +440,7 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler):
|
||||||
GET and HEAD also support running CGI scripts.
|
GET and HEAD also support running CGI scripts.
|
||||||
|
|
||||||
The POST command is *only* implemented for CGI scripts.
|
The POST command is *only* implemented for CGI scripts.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
cgi_directories: list[str]
|
cgi_directories: list[str]
|
||||||
|
@ -433,6 +449,7 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler):
|
||||||
"""Serve a POST request.
|
"""Serve a POST request.
|
||||||
|
|
||||||
This is only implemented for CGI scripts.
|
This is only implemented for CGI scripts.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def is_cgi(self) -> bool: # undocumented
|
def is_cgi(self) -> bool: # undocumented
|
||||||
|
@ -448,6 +465,7 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler):
|
||||||
The default implementation tests whether the normalized url
|
The default implementation tests whether the normalized url
|
||||||
path begins with one of the strings in self.cgi_directories
|
path begins with one of the strings in self.cgi_directories
|
||||||
(and the next character is a '/' or the end of the string).
|
(and the next character is a '/' or the end of the string).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def is_executable(self, path: StrPath) -> bool: # undocumented
|
def is_executable(self, path: StrPath) -> bool: # undocumented
|
||||||
|
|
|
@ -2,10 +2,11 @@
|
||||||
|
|
||||||
from _typeshed import StrPath
|
from _typeshed import StrPath
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from typing import Any, BinaryIO, Protocol, overload
|
from typing import Any, BinaryIO, Protocol, overload, type_check_only
|
||||||
|
|
||||||
__all__ = ["what"]
|
__all__ = ["what"]
|
||||||
|
|
||||||
|
@type_check_only
|
||||||
class _ReadableBinary(Protocol):
|
class _ReadableBinary(Protocol):
|
||||||
def tell(self) -> int: ...
|
def tell(self) -> int: ...
|
||||||
def read(self, size: int, /) -> bytes: ...
|
def read(self, size: int, /) -> bytes: ...
|
||||||
|
|
|
@ -40,6 +40,7 @@ def new_module(name: str) -> types.ModuleType:
|
||||||
Create a new module.
|
Create a new module.
|
||||||
|
|
||||||
The module is not entered into sys.modules.
|
The module is not entered into sys.modules.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_magic() -> bytes:
|
def get_magic() -> bytes:
|
||||||
|
@ -63,6 +64,7 @@ def cache_from_source(path: StrPath, debug_override: bool | None = None) -> str:
|
||||||
place of sys.flags.optimize.
|
place of sys.flags.optimize.
|
||||||
|
|
||||||
If sys.implementation.cache_tag is None then NotImplementedError is raised.
|
If sys.implementation.cache_tag is None then NotImplementedError is raised.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def source_from_cache(path: StrPath) -> str:
|
def source_from_cache(path: StrPath) -> str:
|
||||||
|
@ -74,6 +76,7 @@ def source_from_cache(path: StrPath) -> str:
|
||||||
the .py file calculated to correspond to the .pyc file. If path does
|
the .py file calculated to correspond to the .pyc file. If path does
|
||||||
not conform to PEP 3147 format, ValueError will be raised. If
|
not conform to PEP 3147 format, ValueError will be raised. If
|
||||||
sys.implementation.cache_tag is None then NotImplementedError is raised.
|
sys.implementation.cache_tag is None then NotImplementedError is raised.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_suffixes() -> list[tuple[str, str, int]]:
|
def get_suffixes() -> list[tuple[str, str, int]]:
|
||||||
|
@ -83,6 +86,7 @@ class NullImporter:
|
||||||
"""**DEPRECATED**
|
"""**DEPRECATED**
|
||||||
|
|
||||||
Null import object.
|
Null import object.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, path: StrPath) -> None: ...
|
def __init__(self, path: StrPath) -> None: ...
|
||||||
|
@ -113,6 +117,7 @@ def load_module(name: str, file: _FileLike | None, filename: str, details: tuple
|
||||||
Load a module, given information returned by find_module().
|
Load a module, given information returned by find_module().
|
||||||
|
|
||||||
The module name must include the full package name, if any.
|
The module name must include the full package name, if any.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# IO[Any] is a TextIOWrapper if name is a .py file, and a FileIO otherwise.
|
# IO[Any] is a TextIOWrapper if name is a .py file, and a FileIO otherwise.
|
||||||
|
@ -127,6 +132,7 @@ def find_module(
|
||||||
module and continue search in sys.path. The module name cannot
|
module and continue search in sys.path. The module name cannot
|
||||||
contain '.'; to search for a submodule of a package, pass the
|
contain '.'; to search for a submodule of a package, pass the
|
||||||
submodule name and the package's __path__.
|
submodule name and the package's __path__.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def reload(module: types.ModuleType) -> types.ModuleType:
|
def reload(module: types.ModuleType) -> types.ModuleType:
|
||||||
|
@ -135,6 +141,7 @@ def reload(module: types.ModuleType) -> types.ModuleType:
|
||||||
Reload the module and return it.
|
Reload the module and return it.
|
||||||
|
|
||||||
The module must have been successfully imported before.
|
The module must have been successfully imported before.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def init_builtin(name: str) -> types.ModuleType | None:
|
def init_builtin(name: str) -> types.ModuleType | None:
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue