Add files using upload-large-folder tool
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .venv/lib/python3.11/site-packages/_yaml/__init__.py +33 -0
- .venv/lib/python3.11/site-packages/_yaml/__pycache__/__init__.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/aiosignal/__init__.py +36 -0
- .venv/lib/python3.11/site-packages/aiosignal/__init__.pyi +12 -0
- .venv/lib/python3.11/site-packages/aiosignal/__pycache__/__init__.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/aiosignal/py.typed +0 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi +103 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi +18 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi +52 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi +12 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi +12 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi +21 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi +22 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi +13 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi +55 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__init__.py +3 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py +183 -0
- .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/binding.py +121 -0
- .venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/INSTALLER +1 -0
- .venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/LICENSE +202 -0
- .venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/METADATA +74 -0
- .venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/RECORD +125 -0
- .venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/WHEEL +5 -0
- .venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/top_level.txt +1 -0
- .venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/INSTALLER +1 -0
- .venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/METADATA +616 -0
- .venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/RECORD +68 -0
- .venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/WHEEL +4 -0
- .venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/licenses/LICENSE.md +27 -0
- .venv/lib/python3.11/site-packages/httpcore/_backends/__init__.py +0 -0
- .venv/lib/python3.11/site-packages/httpcore/_backends/__pycache__/auto.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/httpcore/_backends/__pycache__/base.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/httpcore/_backends/__pycache__/mock.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/httpcore/_backends/__pycache__/sync.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/httpcore/_backends/anyio.py +146 -0
- .venv/lib/python3.11/site-packages/httpcore/_backends/base.py +101 -0
- .venv/lib/python3.11/site-packages/httpcore/_ssl.py +9 -0
- .venv/lib/python3.11/site-packages/httpcore/_synchronization.py +318 -0
- .venv/lib/python3.11/site-packages/httpcore/py.typed +0 -0
- .venv/lib/python3.11/site-packages/idna-3.10.dist-info/INSTALLER +1 -0
- .venv/lib/python3.11/site-packages/idna-3.10.dist-info/LICENSE.md +31 -0
- .venv/lib/python3.11/site-packages/idna-3.10.dist-info/METADATA +250 -0
- .venv/lib/python3.11/site-packages/idna-3.10.dist-info/RECORD +22 -0
- .venv/lib/python3.11/site-packages/idna-3.10.dist-info/WHEEL +4 -0
- .venv/lib/python3.11/site-packages/prometheus_fastapi_instrumentator/__init__.py +5 -0
- .venv/lib/python3.11/site-packages/prometheus_fastapi_instrumentator/__pycache__/__init__.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/prometheus_fastapi_instrumentator/__pycache__/instrumentation.cpython-311.pyc +0 -0
.venv/lib/python3.11/site-packages/_yaml/__init__.py
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This is a stub package designed to roughly emulate the _yaml
|
| 2 |
+
# extension module, which previously existed as a standalone module
|
| 3 |
+
# and has been moved into the `yaml` package namespace.
|
| 4 |
+
# It does not perfectly mimic its old counterpart, but should get
|
| 5 |
+
# close enough for anyone who's relying on it even when they shouldn't.
|
| 6 |
+
import yaml
|
| 7 |
+
|
| 8 |
+
# in some circumstances, the yaml module we imoprted may be from a different version, so we need
|
| 9 |
+
# to tread carefully when poking at it here (it may not have the attributes we expect)
|
| 10 |
+
if not getattr(yaml, '__with_libyaml__', False):
|
| 11 |
+
from sys import version_info
|
| 12 |
+
|
| 13 |
+
exc = ModuleNotFoundError if version_info >= (3, 6) else ImportError
|
| 14 |
+
raise exc("No module named '_yaml'")
|
| 15 |
+
else:
|
| 16 |
+
from yaml._yaml import *
|
| 17 |
+
import warnings
|
| 18 |
+
warnings.warn(
|
| 19 |
+
'The _yaml extension module is now located at yaml._yaml'
|
| 20 |
+
' and its location is subject to change. To use the'
|
| 21 |
+
' LibYAML-based parser and emitter, import from `yaml`:'
|
| 22 |
+
' `from yaml import CLoader as Loader, CDumper as Dumper`.',
|
| 23 |
+
DeprecationWarning
|
| 24 |
+
)
|
| 25 |
+
del warnings
|
| 26 |
+
# Don't `del yaml` here because yaml is actually an existing
|
| 27 |
+
# namespace member of _yaml.
|
| 28 |
+
|
| 29 |
+
__name__ = '_yaml'
|
| 30 |
+
# If the module is top-level (i.e. not a part of any specific package)
|
| 31 |
+
# then the attribute should be set to ''.
|
| 32 |
+
# https://docs.python.org/3.8/library/types.html
|
| 33 |
+
__package__ = ''
|
.venv/lib/python3.11/site-packages/_yaml/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (927 Bytes). View file
|
|
|
.venv/lib/python3.11/site-packages/aiosignal/__init__.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from frozenlist import FrozenList
|
| 2 |
+
|
| 3 |
+
__version__ = "1.3.2"
|
| 4 |
+
|
| 5 |
+
__all__ = ("Signal",)
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
class Signal(FrozenList):
|
| 9 |
+
"""Coroutine-based signal implementation.
|
| 10 |
+
|
| 11 |
+
To connect a callback to a signal, use any list method.
|
| 12 |
+
|
| 13 |
+
Signals are fired using the send() coroutine, which takes named
|
| 14 |
+
arguments.
|
| 15 |
+
"""
|
| 16 |
+
|
| 17 |
+
__slots__ = ("_owner",)
|
| 18 |
+
|
| 19 |
+
def __init__(self, owner):
|
| 20 |
+
super().__init__()
|
| 21 |
+
self._owner = owner
|
| 22 |
+
|
| 23 |
+
def __repr__(self):
|
| 24 |
+
return "<Signal owner={}, frozen={}, {!r}>".format(
|
| 25 |
+
self._owner, self.frozen, list(self)
|
| 26 |
+
)
|
| 27 |
+
|
| 28 |
+
async def send(self, *args, **kwargs):
|
| 29 |
+
"""
|
| 30 |
+
Sends data to all registered receivers.
|
| 31 |
+
"""
|
| 32 |
+
if not self.frozen:
|
| 33 |
+
raise RuntimeError("Cannot send non-frozen signal.")
|
| 34 |
+
|
| 35 |
+
for receiver in self:
|
| 36 |
+
await receiver(*args, **kwargs) # type: ignore
|
.venv/lib/python3.11/site-packages/aiosignal/__init__.pyi
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Any, Generic, TypeVar
|
| 2 |
+
|
| 3 |
+
from frozenlist import FrozenList
|
| 4 |
+
|
| 5 |
+
__all__ = ("Signal",)
|
| 6 |
+
|
| 7 |
+
_T = TypeVar("_T")
|
| 8 |
+
|
| 9 |
+
class Signal(FrozenList[_T], Generic[_T]):
|
| 10 |
+
def __init__(self, owner: Any) -> None: ...
|
| 11 |
+
def __repr__(self) -> str: ...
|
| 12 |
+
async def send(self, *args: Any, **kwargs: Any) -> None: ...
|
.venv/lib/python3.11/site-packages/aiosignal/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (1.85 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/aiosignal/py.typed
ADDED
|
File without changes
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is dual licensed under the terms of the Apache License, Version
|
| 2 |
+
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
| 3 |
+
# for complete details.
|
| 4 |
+
|
| 5 |
+
class AESGCM:
|
| 6 |
+
def __init__(self, key: bytes) -> None: ...
|
| 7 |
+
@staticmethod
|
| 8 |
+
def generate_key(key_size: int) -> bytes: ...
|
| 9 |
+
def encrypt(
|
| 10 |
+
self,
|
| 11 |
+
nonce: bytes,
|
| 12 |
+
data: bytes,
|
| 13 |
+
associated_data: bytes | None,
|
| 14 |
+
) -> bytes: ...
|
| 15 |
+
def decrypt(
|
| 16 |
+
self,
|
| 17 |
+
nonce: bytes,
|
| 18 |
+
data: bytes,
|
| 19 |
+
associated_data: bytes | None,
|
| 20 |
+
) -> bytes: ...
|
| 21 |
+
|
| 22 |
+
class ChaCha20Poly1305:
|
| 23 |
+
def __init__(self, key: bytes) -> None: ...
|
| 24 |
+
@staticmethod
|
| 25 |
+
def generate_key() -> bytes: ...
|
| 26 |
+
def encrypt(
|
| 27 |
+
self,
|
| 28 |
+
nonce: bytes,
|
| 29 |
+
data: bytes,
|
| 30 |
+
associated_data: bytes | None,
|
| 31 |
+
) -> bytes: ...
|
| 32 |
+
def decrypt(
|
| 33 |
+
self,
|
| 34 |
+
nonce: bytes,
|
| 35 |
+
data: bytes,
|
| 36 |
+
associated_data: bytes | None,
|
| 37 |
+
) -> bytes: ...
|
| 38 |
+
|
| 39 |
+
class AESCCM:
|
| 40 |
+
def __init__(self, key: bytes, tag_length: int = 16) -> None: ...
|
| 41 |
+
@staticmethod
|
| 42 |
+
def generate_key(key_size: int) -> bytes: ...
|
| 43 |
+
def encrypt(
|
| 44 |
+
self,
|
| 45 |
+
nonce: bytes,
|
| 46 |
+
data: bytes,
|
| 47 |
+
associated_data: bytes | None,
|
| 48 |
+
) -> bytes: ...
|
| 49 |
+
def decrypt(
|
| 50 |
+
self,
|
| 51 |
+
nonce: bytes,
|
| 52 |
+
data: bytes,
|
| 53 |
+
associated_data: bytes | None,
|
| 54 |
+
) -> bytes: ...
|
| 55 |
+
|
| 56 |
+
class AESSIV:
|
| 57 |
+
def __init__(self, key: bytes) -> None: ...
|
| 58 |
+
@staticmethod
|
| 59 |
+
def generate_key(key_size: int) -> bytes: ...
|
| 60 |
+
def encrypt(
|
| 61 |
+
self,
|
| 62 |
+
data: bytes,
|
| 63 |
+
associated_data: list[bytes] | None,
|
| 64 |
+
) -> bytes: ...
|
| 65 |
+
def decrypt(
|
| 66 |
+
self,
|
| 67 |
+
data: bytes,
|
| 68 |
+
associated_data: list[bytes] | None,
|
| 69 |
+
) -> bytes: ...
|
| 70 |
+
|
| 71 |
+
class AESOCB3:
|
| 72 |
+
def __init__(self, key: bytes) -> None: ...
|
| 73 |
+
@staticmethod
|
| 74 |
+
def generate_key(key_size: int) -> bytes: ...
|
| 75 |
+
def encrypt(
|
| 76 |
+
self,
|
| 77 |
+
nonce: bytes,
|
| 78 |
+
data: bytes,
|
| 79 |
+
associated_data: bytes | None,
|
| 80 |
+
) -> bytes: ...
|
| 81 |
+
def decrypt(
|
| 82 |
+
self,
|
| 83 |
+
nonce: bytes,
|
| 84 |
+
data: bytes,
|
| 85 |
+
associated_data: bytes | None,
|
| 86 |
+
) -> bytes: ...
|
| 87 |
+
|
| 88 |
+
class AESGCMSIV:
|
| 89 |
+
def __init__(self, key: bytes) -> None: ...
|
| 90 |
+
@staticmethod
|
| 91 |
+
def generate_key(key_size: int) -> bytes: ...
|
| 92 |
+
def encrypt(
|
| 93 |
+
self,
|
| 94 |
+
nonce: bytes,
|
| 95 |
+
data: bytes,
|
| 96 |
+
associated_data: bytes | None,
|
| 97 |
+
) -> bytes: ...
|
| 98 |
+
def decrypt(
|
| 99 |
+
self,
|
| 100 |
+
nonce: bytes,
|
| 101 |
+
data: bytes,
|
| 102 |
+
associated_data: bytes | None,
|
| 103 |
+
) -> bytes: ...
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is dual licensed under the terms of the Apache License, Version
|
| 2 |
+
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
| 3 |
+
# for complete details.
|
| 4 |
+
|
| 5 |
+
import typing
|
| 6 |
+
|
| 7 |
+
from cryptography.hazmat.primitives import ciphers
|
| 8 |
+
|
| 9 |
+
class CMAC:
|
| 10 |
+
def __init__(
|
| 11 |
+
self,
|
| 12 |
+
algorithm: ciphers.BlockCipherAlgorithm,
|
| 13 |
+
backend: typing.Any = None,
|
| 14 |
+
) -> None: ...
|
| 15 |
+
def update(self, data: bytes) -> None: ...
|
| 16 |
+
def finalize(self) -> bytes: ...
|
| 17 |
+
def verify(self, signature: bytes) -> None: ...
|
| 18 |
+
def copy(self) -> CMAC: ...
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is dual licensed under the terms of the Apache License, Version
|
| 2 |
+
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
| 3 |
+
# for complete details.
|
| 4 |
+
|
| 5 |
+
import typing
|
| 6 |
+
|
| 7 |
+
from cryptography.hazmat.primitives.asymmetric import ec
|
| 8 |
+
|
| 9 |
+
class ECPrivateKey: ...
|
| 10 |
+
class ECPublicKey: ...
|
| 11 |
+
|
| 12 |
+
class EllipticCurvePrivateNumbers:
|
| 13 |
+
def __init__(
|
| 14 |
+
self, private_value: int, public_numbers: EllipticCurvePublicNumbers
|
| 15 |
+
) -> None: ...
|
| 16 |
+
def private_key(
|
| 17 |
+
self, backend: typing.Any = None
|
| 18 |
+
) -> ec.EllipticCurvePrivateKey: ...
|
| 19 |
+
@property
|
| 20 |
+
def private_value(self) -> int: ...
|
| 21 |
+
@property
|
| 22 |
+
def public_numbers(self) -> EllipticCurvePublicNumbers: ...
|
| 23 |
+
|
| 24 |
+
class EllipticCurvePublicNumbers:
|
| 25 |
+
def __init__(self, x: int, y: int, curve: ec.EllipticCurve) -> None: ...
|
| 26 |
+
def public_key(
|
| 27 |
+
self, backend: typing.Any = None
|
| 28 |
+
) -> ec.EllipticCurvePublicKey: ...
|
| 29 |
+
@property
|
| 30 |
+
def x(self) -> int: ...
|
| 31 |
+
@property
|
| 32 |
+
def y(self) -> int: ...
|
| 33 |
+
@property
|
| 34 |
+
def curve(self) -> ec.EllipticCurve: ...
|
| 35 |
+
def __eq__(self, other: object) -> bool: ...
|
| 36 |
+
|
| 37 |
+
def curve_supported(curve: ec.EllipticCurve) -> bool: ...
|
| 38 |
+
def generate_private_key(
|
| 39 |
+
curve: ec.EllipticCurve, backend: typing.Any = None
|
| 40 |
+
) -> ec.EllipticCurvePrivateKey: ...
|
| 41 |
+
def from_private_numbers(
|
| 42 |
+
numbers: ec.EllipticCurvePrivateNumbers,
|
| 43 |
+
) -> ec.EllipticCurvePrivateKey: ...
|
| 44 |
+
def from_public_numbers(
|
| 45 |
+
numbers: ec.EllipticCurvePublicNumbers,
|
| 46 |
+
) -> ec.EllipticCurvePublicKey: ...
|
| 47 |
+
def from_public_bytes(
|
| 48 |
+
curve: ec.EllipticCurve, data: bytes
|
| 49 |
+
) -> ec.EllipticCurvePublicKey: ...
|
| 50 |
+
def derive_private_key(
|
| 51 |
+
private_value: int, curve: ec.EllipticCurve
|
| 52 |
+
) -> ec.EllipticCurvePrivateKey: ...
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is dual licensed under the terms of the Apache License, Version
|
| 2 |
+
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
| 3 |
+
# for complete details.
|
| 4 |
+
|
| 5 |
+
from cryptography.hazmat.primitives.asymmetric import ed25519
|
| 6 |
+
|
| 7 |
+
class Ed25519PrivateKey: ...
|
| 8 |
+
class Ed25519PublicKey: ...
|
| 9 |
+
|
| 10 |
+
def generate_key() -> ed25519.Ed25519PrivateKey: ...
|
| 11 |
+
def from_private_bytes(data: bytes) -> ed25519.Ed25519PrivateKey: ...
|
| 12 |
+
def from_public_bytes(data: bytes) -> ed25519.Ed25519PublicKey: ...
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is dual licensed under the terms of the Apache License, Version
|
| 2 |
+
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
| 3 |
+
# for complete details.
|
| 4 |
+
|
| 5 |
+
from cryptography.hazmat.primitives.asymmetric import ed448
|
| 6 |
+
|
| 7 |
+
class Ed448PrivateKey: ...
|
| 8 |
+
class Ed448PublicKey: ...
|
| 9 |
+
|
| 10 |
+
def generate_key() -> ed448.Ed448PrivateKey: ...
|
| 11 |
+
def from_private_bytes(data: bytes) -> ed448.Ed448PrivateKey: ...
|
| 12 |
+
def from_public_bytes(data: bytes) -> ed448.Ed448PublicKey: ...
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is dual licensed under the terms of the Apache License, Version
|
| 2 |
+
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
| 3 |
+
# for complete details.
|
| 4 |
+
|
| 5 |
+
import typing
|
| 6 |
+
|
| 7 |
+
from cryptography.hazmat.primitives import hashes
|
| 8 |
+
|
| 9 |
+
class HMAC(hashes.HashContext):
|
| 10 |
+
def __init__(
|
| 11 |
+
self,
|
| 12 |
+
key: bytes,
|
| 13 |
+
algorithm: hashes.HashAlgorithm,
|
| 14 |
+
backend: typing.Any = None,
|
| 15 |
+
) -> None: ...
|
| 16 |
+
@property
|
| 17 |
+
def algorithm(self) -> hashes.HashAlgorithm: ...
|
| 18 |
+
def update(self, data: bytes) -> None: ...
|
| 19 |
+
def finalize(self) -> bytes: ...
|
| 20 |
+
def verify(self, signature: bytes) -> None: ...
|
| 21 |
+
def copy(self) -> HMAC: ...
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is dual licensed under the terms of the Apache License, Version
|
| 2 |
+
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
| 3 |
+
# for complete details.
|
| 4 |
+
|
| 5 |
+
from cryptography.hazmat.primitives.hashes import HashAlgorithm
|
| 6 |
+
|
| 7 |
+
def derive_pbkdf2_hmac(
|
| 8 |
+
key_material: bytes,
|
| 9 |
+
algorithm: HashAlgorithm,
|
| 10 |
+
salt: bytes,
|
| 11 |
+
iterations: int,
|
| 12 |
+
length: int,
|
| 13 |
+
) -> bytes: ...
|
| 14 |
+
def derive_scrypt(
|
| 15 |
+
key_material: bytes,
|
| 16 |
+
salt: bytes,
|
| 17 |
+
n: int,
|
| 18 |
+
r: int,
|
| 19 |
+
p: int,
|
| 20 |
+
max_mem: int,
|
| 21 |
+
length: int,
|
| 22 |
+
) -> bytes: ...
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is dual licensed under the terms of the Apache License, Version
|
| 2 |
+
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
| 3 |
+
# for complete details.
|
| 4 |
+
|
| 5 |
+
class Poly1305:
|
| 6 |
+
def __init__(self, key: bytes) -> None: ...
|
| 7 |
+
@staticmethod
|
| 8 |
+
def generate_tag(key: bytes, data: bytes) -> bytes: ...
|
| 9 |
+
@staticmethod
|
| 10 |
+
def verify_tag(key: bytes, data: bytes, tag: bytes) -> None: ...
|
| 11 |
+
def update(self, data: bytes) -> None: ...
|
| 12 |
+
def finalize(self) -> bytes: ...
|
| 13 |
+
def verify(self, tag: bytes) -> None: ...
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is dual licensed under the terms of the Apache License, Version
|
| 2 |
+
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
| 3 |
+
# for complete details.
|
| 4 |
+
|
| 5 |
+
import typing
|
| 6 |
+
|
| 7 |
+
from cryptography.hazmat.primitives.asymmetric import rsa
|
| 8 |
+
|
| 9 |
+
class RSAPrivateKey: ...
|
| 10 |
+
class RSAPublicKey: ...
|
| 11 |
+
|
| 12 |
+
class RSAPrivateNumbers:
|
| 13 |
+
def __init__(
|
| 14 |
+
self,
|
| 15 |
+
p: int,
|
| 16 |
+
q: int,
|
| 17 |
+
d: int,
|
| 18 |
+
dmp1: int,
|
| 19 |
+
dmq1: int,
|
| 20 |
+
iqmp: int,
|
| 21 |
+
public_numbers: RSAPublicNumbers,
|
| 22 |
+
) -> None: ...
|
| 23 |
+
@property
|
| 24 |
+
def p(self) -> int: ...
|
| 25 |
+
@property
|
| 26 |
+
def q(self) -> int: ...
|
| 27 |
+
@property
|
| 28 |
+
def d(self) -> int: ...
|
| 29 |
+
@property
|
| 30 |
+
def dmp1(self) -> int: ...
|
| 31 |
+
@property
|
| 32 |
+
def dmq1(self) -> int: ...
|
| 33 |
+
@property
|
| 34 |
+
def iqmp(self) -> int: ...
|
| 35 |
+
@property
|
| 36 |
+
def public_numbers(self) -> RSAPublicNumbers: ...
|
| 37 |
+
def private_key(
|
| 38 |
+
self,
|
| 39 |
+
backend: typing.Any = None,
|
| 40 |
+
*,
|
| 41 |
+
unsafe_skip_rsa_key_validation: bool = False,
|
| 42 |
+
) -> rsa.RSAPrivateKey: ...
|
| 43 |
+
|
| 44 |
+
class RSAPublicNumbers:
|
| 45 |
+
def __init__(self, e: int, n: int) -> None: ...
|
| 46 |
+
@property
|
| 47 |
+
def n(self) -> int: ...
|
| 48 |
+
@property
|
| 49 |
+
def e(self) -> int: ...
|
| 50 |
+
def public_key(self, backend: typing.Any = None) -> rsa.RSAPublicKey: ...
|
| 51 |
+
|
| 52 |
+
def generate_private_key(
|
| 53 |
+
public_exponent: int,
|
| 54 |
+
key_size: int,
|
| 55 |
+
) -> rsa.RSAPrivateKey: ...
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__init__.py
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is dual licensed under the terms of the Apache License, Version
|
| 2 |
+
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
| 3 |
+
# for complete details.
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (209 Bytes). View file
|
|
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-311.pyc
ADDED
|
Binary file (5.53 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-311.pyc
ADDED
|
Binary file (5.6 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is dual licensed under the terms of the Apache License, Version
|
| 2 |
+
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
| 3 |
+
# for complete details.
|
| 4 |
+
|
| 5 |
+
from __future__ import annotations
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
def cryptography_has_set_cert_cb() -> list[str]:
|
| 9 |
+
return [
|
| 10 |
+
"SSL_CTX_set_cert_cb",
|
| 11 |
+
"SSL_set_cert_cb",
|
| 12 |
+
]
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
def cryptography_has_ssl_st() -> list[str]:
|
| 16 |
+
return [
|
| 17 |
+
"SSL_ST_BEFORE",
|
| 18 |
+
"SSL_ST_OK",
|
| 19 |
+
"SSL_ST_INIT",
|
| 20 |
+
"SSL_ST_RENEGOTIATE",
|
| 21 |
+
]
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
def cryptography_has_tls_st() -> list[str]:
|
| 25 |
+
return [
|
| 26 |
+
"TLS_ST_BEFORE",
|
| 27 |
+
"TLS_ST_OK",
|
| 28 |
+
]
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
def cryptography_has_ssl_sigalgs() -> list[str]:
|
| 32 |
+
return [
|
| 33 |
+
"SSL_CTX_set1_sigalgs_list",
|
| 34 |
+
]
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
def cryptography_has_psk() -> list[str]:
|
| 38 |
+
return [
|
| 39 |
+
"SSL_CTX_use_psk_identity_hint",
|
| 40 |
+
"SSL_CTX_set_psk_server_callback",
|
| 41 |
+
"SSL_CTX_set_psk_client_callback",
|
| 42 |
+
]
|
| 43 |
+
|
| 44 |
+
|
| 45 |
+
def cryptography_has_psk_tlsv13() -> list[str]:
|
| 46 |
+
return [
|
| 47 |
+
"SSL_CTX_set_psk_find_session_callback",
|
| 48 |
+
"SSL_CTX_set_psk_use_session_callback",
|
| 49 |
+
"Cryptography_SSL_SESSION_new",
|
| 50 |
+
"SSL_CIPHER_find",
|
| 51 |
+
"SSL_SESSION_set1_master_key",
|
| 52 |
+
"SSL_SESSION_set_cipher",
|
| 53 |
+
"SSL_SESSION_set_protocol_version",
|
| 54 |
+
]
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
def cryptography_has_custom_ext() -> list[str]:
|
| 58 |
+
return [
|
| 59 |
+
"SSL_CTX_add_client_custom_ext",
|
| 60 |
+
"SSL_CTX_add_server_custom_ext",
|
| 61 |
+
"SSL_extension_supported",
|
| 62 |
+
]
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
def cryptography_has_tlsv13_functions() -> list[str]:
|
| 66 |
+
return [
|
| 67 |
+
"SSL_VERIFY_POST_HANDSHAKE",
|
| 68 |
+
"SSL_CTX_set_ciphersuites",
|
| 69 |
+
"SSL_verify_client_post_handshake",
|
| 70 |
+
"SSL_CTX_set_post_handshake_auth",
|
| 71 |
+
"SSL_set_post_handshake_auth",
|
| 72 |
+
"SSL_SESSION_get_max_early_data",
|
| 73 |
+
"SSL_write_early_data",
|
| 74 |
+
"SSL_read_early_data",
|
| 75 |
+
"SSL_CTX_set_max_early_data",
|
| 76 |
+
]
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
def cryptography_has_engine() -> list[str]:
|
| 80 |
+
return [
|
| 81 |
+
"ENGINE_by_id",
|
| 82 |
+
"ENGINE_init",
|
| 83 |
+
"ENGINE_finish",
|
| 84 |
+
"ENGINE_get_default_RAND",
|
| 85 |
+
"ENGINE_set_default_RAND",
|
| 86 |
+
"ENGINE_unregister_RAND",
|
| 87 |
+
"ENGINE_ctrl_cmd",
|
| 88 |
+
"ENGINE_free",
|
| 89 |
+
"ENGINE_get_name",
|
| 90 |
+
"ENGINE_ctrl_cmd_string",
|
| 91 |
+
"ENGINE_load_builtin_engines",
|
| 92 |
+
"ENGINE_load_private_key",
|
| 93 |
+
"ENGINE_load_public_key",
|
| 94 |
+
"SSL_CTX_set_client_cert_engine",
|
| 95 |
+
]
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
def cryptography_has_verified_chain() -> list[str]:
|
| 99 |
+
return [
|
| 100 |
+
"SSL_get0_verified_chain",
|
| 101 |
+
]
|
| 102 |
+
|
| 103 |
+
|
| 104 |
+
def cryptography_has_srtp() -> list[str]:
|
| 105 |
+
return [
|
| 106 |
+
"SSL_CTX_set_tlsext_use_srtp",
|
| 107 |
+
"SSL_set_tlsext_use_srtp",
|
| 108 |
+
"SSL_get_selected_srtp_profile",
|
| 109 |
+
]
|
| 110 |
+
|
| 111 |
+
|
| 112 |
+
def cryptography_has_op_no_renegotiation() -> list[str]:
|
| 113 |
+
return [
|
| 114 |
+
"SSL_OP_NO_RENEGOTIATION",
|
| 115 |
+
]
|
| 116 |
+
|
| 117 |
+
|
| 118 |
+
def cryptography_has_dtls_get_data_mtu() -> list[str]:
|
| 119 |
+
return [
|
| 120 |
+
"DTLS_get_data_mtu",
|
| 121 |
+
]
|
| 122 |
+
|
| 123 |
+
|
| 124 |
+
def cryptography_has_ssl_cookie() -> list[str]:
|
| 125 |
+
return [
|
| 126 |
+
"SSL_OP_COOKIE_EXCHANGE",
|
| 127 |
+
"DTLSv1_listen",
|
| 128 |
+
"SSL_CTX_set_cookie_generate_cb",
|
| 129 |
+
"SSL_CTX_set_cookie_verify_cb",
|
| 130 |
+
]
|
| 131 |
+
|
| 132 |
+
|
| 133 |
+
def cryptography_has_prime_checks() -> list[str]:
|
| 134 |
+
return [
|
| 135 |
+
"BN_prime_checks_for_size",
|
| 136 |
+
]
|
| 137 |
+
|
| 138 |
+
|
| 139 |
+
def cryptography_has_unexpected_eof_while_reading() -> list[str]:
|
| 140 |
+
return ["SSL_R_UNEXPECTED_EOF_WHILE_READING"]
|
| 141 |
+
|
| 142 |
+
|
| 143 |
+
def cryptography_has_ssl_op_ignore_unexpected_eof() -> list[str]:
|
| 144 |
+
return [
|
| 145 |
+
"SSL_OP_IGNORE_UNEXPECTED_EOF",
|
| 146 |
+
]
|
| 147 |
+
|
| 148 |
+
|
| 149 |
+
def cryptography_has_get_extms_support() -> list[str]:
|
| 150 |
+
return ["SSL_get_extms_support"]
|
| 151 |
+
|
| 152 |
+
|
| 153 |
+
# This is a mapping of
|
| 154 |
+
# {condition: function-returning-names-dependent-on-that-condition} so we can
|
| 155 |
+
# loop over them and delete unsupported names at runtime. It will be removed
|
| 156 |
+
# when cffi supports #if in cdef. We use functions instead of just a dict of
|
| 157 |
+
# lists so we can use coverage to measure which are used.
|
| 158 |
+
CONDITIONAL_NAMES = {
|
| 159 |
+
"Cryptography_HAS_SET_CERT_CB": cryptography_has_set_cert_cb,
|
| 160 |
+
"Cryptography_HAS_SSL_ST": cryptography_has_ssl_st,
|
| 161 |
+
"Cryptography_HAS_TLS_ST": cryptography_has_tls_st,
|
| 162 |
+
"Cryptography_HAS_SIGALGS": cryptography_has_ssl_sigalgs,
|
| 163 |
+
"Cryptography_HAS_PSK": cryptography_has_psk,
|
| 164 |
+
"Cryptography_HAS_PSK_TLSv1_3": cryptography_has_psk_tlsv13,
|
| 165 |
+
"Cryptography_HAS_CUSTOM_EXT": cryptography_has_custom_ext,
|
| 166 |
+
"Cryptography_HAS_TLSv1_3_FUNCTIONS": cryptography_has_tlsv13_functions,
|
| 167 |
+
"Cryptography_HAS_ENGINE": cryptography_has_engine,
|
| 168 |
+
"Cryptography_HAS_VERIFIED_CHAIN": cryptography_has_verified_chain,
|
| 169 |
+
"Cryptography_HAS_SRTP": cryptography_has_srtp,
|
| 170 |
+
"Cryptography_HAS_OP_NO_RENEGOTIATION": (
|
| 171 |
+
cryptography_has_op_no_renegotiation
|
| 172 |
+
),
|
| 173 |
+
"Cryptography_HAS_DTLS_GET_DATA_MTU": cryptography_has_dtls_get_data_mtu,
|
| 174 |
+
"Cryptography_HAS_SSL_COOKIE": cryptography_has_ssl_cookie,
|
| 175 |
+
"Cryptography_HAS_PRIME_CHECKS": cryptography_has_prime_checks,
|
| 176 |
+
"Cryptography_HAS_UNEXPECTED_EOF_WHILE_READING": (
|
| 177 |
+
cryptography_has_unexpected_eof_while_reading
|
| 178 |
+
),
|
| 179 |
+
"Cryptography_HAS_SSL_OP_IGNORE_UNEXPECTED_EOF": (
|
| 180 |
+
cryptography_has_ssl_op_ignore_unexpected_eof
|
| 181 |
+
),
|
| 182 |
+
"Cryptography_HAS_GET_EXTMS_SUPPORT": cryptography_has_get_extms_support,
|
| 183 |
+
}
|
.venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/binding.py
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is dual licensed under the terms of the Apache License, Version
|
| 2 |
+
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
| 3 |
+
# for complete details.
|
| 4 |
+
|
| 5 |
+
from __future__ import annotations
|
| 6 |
+
|
| 7 |
+
import os
|
| 8 |
+
import sys
|
| 9 |
+
import threading
|
| 10 |
+
import types
|
| 11 |
+
import typing
|
| 12 |
+
import warnings
|
| 13 |
+
|
| 14 |
+
import cryptography
|
| 15 |
+
from cryptography.exceptions import InternalError
|
| 16 |
+
from cryptography.hazmat.bindings._rust import _openssl, openssl
|
| 17 |
+
from cryptography.hazmat.bindings.openssl._conditional import CONDITIONAL_NAMES
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def _openssl_assert(ok: bool) -> None:
|
| 21 |
+
if not ok:
|
| 22 |
+
errors = openssl.capture_error_stack()
|
| 23 |
+
|
| 24 |
+
raise InternalError(
|
| 25 |
+
"Unknown OpenSSL error. This error is commonly encountered when "
|
| 26 |
+
"another library is not cleaning up the OpenSSL error stack. If "
|
| 27 |
+
"you are using cryptography with another library that uses "
|
| 28 |
+
"OpenSSL try disabling it before reporting a bug. Otherwise "
|
| 29 |
+
"please file an issue at https://github.com/pyca/cryptography/"
|
| 30 |
+
"issues with information on how to reproduce "
|
| 31 |
+
f"this. ({errors!r})",
|
| 32 |
+
errors,
|
| 33 |
+
)
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
def build_conditional_library(
|
| 37 |
+
lib: typing.Any,
|
| 38 |
+
conditional_names: dict[str, typing.Callable[[], list[str]]],
|
| 39 |
+
) -> typing.Any:
|
| 40 |
+
conditional_lib = types.ModuleType("lib")
|
| 41 |
+
conditional_lib._original_lib = lib # type: ignore[attr-defined]
|
| 42 |
+
excluded_names = set()
|
| 43 |
+
for condition, names_cb in conditional_names.items():
|
| 44 |
+
if not getattr(lib, condition):
|
| 45 |
+
excluded_names.update(names_cb())
|
| 46 |
+
|
| 47 |
+
for attr in dir(lib):
|
| 48 |
+
if attr not in excluded_names:
|
| 49 |
+
setattr(conditional_lib, attr, getattr(lib, attr))
|
| 50 |
+
|
| 51 |
+
return conditional_lib
|
| 52 |
+
|
| 53 |
+
|
| 54 |
+
class Binding:
|
| 55 |
+
"""
|
| 56 |
+
OpenSSL API wrapper.
|
| 57 |
+
"""
|
| 58 |
+
|
| 59 |
+
lib: typing.ClassVar = None
|
| 60 |
+
ffi = _openssl.ffi
|
| 61 |
+
_lib_loaded = False
|
| 62 |
+
_init_lock = threading.Lock()
|
| 63 |
+
|
| 64 |
+
def __init__(self) -> None:
|
| 65 |
+
self._ensure_ffi_initialized()
|
| 66 |
+
|
| 67 |
+
@classmethod
|
| 68 |
+
def _ensure_ffi_initialized(cls) -> None:
|
| 69 |
+
with cls._init_lock:
|
| 70 |
+
if not cls._lib_loaded:
|
| 71 |
+
cls.lib = build_conditional_library(
|
| 72 |
+
_openssl.lib, CONDITIONAL_NAMES
|
| 73 |
+
)
|
| 74 |
+
cls._lib_loaded = True
|
| 75 |
+
|
| 76 |
+
@classmethod
|
| 77 |
+
def init_static_locks(cls) -> None:
|
| 78 |
+
cls._ensure_ffi_initialized()
|
| 79 |
+
|
| 80 |
+
|
| 81 |
+
def _verify_package_version(version: str) -> None:
|
| 82 |
+
# Occasionally we run into situations where the version of the Python
|
| 83 |
+
# package does not match the version of the shared object that is loaded.
|
| 84 |
+
# This may occur in environments where multiple versions of cryptography
|
| 85 |
+
# are installed and available in the python path. To avoid errors cropping
|
| 86 |
+
# up later this code checks that the currently imported package and the
|
| 87 |
+
# shared object that were loaded have the same version and raise an
|
| 88 |
+
# ImportError if they do not
|
| 89 |
+
so_package_version = _openssl.ffi.string(
|
| 90 |
+
_openssl.lib.CRYPTOGRAPHY_PACKAGE_VERSION
|
| 91 |
+
)
|
| 92 |
+
if version.encode("ascii") != so_package_version:
|
| 93 |
+
raise ImportError(
|
| 94 |
+
"The version of cryptography does not match the loaded "
|
| 95 |
+
"shared object. This can happen if you have multiple copies of "
|
| 96 |
+
"cryptography installed in your Python path. Please try creating "
|
| 97 |
+
"a new virtual environment to resolve this issue. "
|
| 98 |
+
f"Loaded python version: {version}, "
|
| 99 |
+
f"shared object version: {so_package_version}"
|
| 100 |
+
)
|
| 101 |
+
|
| 102 |
+
_openssl_assert(
|
| 103 |
+
_openssl.lib.OpenSSL_version_num() == openssl.openssl_version(),
|
| 104 |
+
)
|
| 105 |
+
|
| 106 |
+
|
| 107 |
+
_verify_package_version(cryptography.__version__)
|
| 108 |
+
|
| 109 |
+
Binding.init_static_locks()
|
| 110 |
+
|
| 111 |
+
if (
|
| 112 |
+
sys.platform == "win32"
|
| 113 |
+
and os.environ.get("PROCESSOR_ARCHITEW6432") is not None
|
| 114 |
+
):
|
| 115 |
+
warnings.warn(
|
| 116 |
+
"You are using cryptography on a 32-bit Python on a 64-bit Windows "
|
| 117 |
+
"Operating System. Cryptography will be significantly faster if you "
|
| 118 |
+
"switch to using a 64-bit Python.",
|
| 119 |
+
UserWarning,
|
| 120 |
+
stacklevel=2,
|
| 121 |
+
)
|
.venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
.venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/LICENSE
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
Apache License
|
| 3 |
+
Version 2.0, January 2004
|
| 4 |
+
http://www.apache.org/licenses/
|
| 5 |
+
|
| 6 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
| 7 |
+
|
| 8 |
+
1. Definitions.
|
| 9 |
+
|
| 10 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
| 11 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
| 12 |
+
|
| 13 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
| 14 |
+
the copyright owner that is granting the License.
|
| 15 |
+
|
| 16 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
| 17 |
+
other entities that control, are controlled by, or are under common
|
| 18 |
+
control with that entity. For the purposes of this definition,
|
| 19 |
+
"control" means (i) the power, direct or indirect, to cause the
|
| 20 |
+
direction or management of such entity, whether by contract or
|
| 21 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
| 22 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
| 23 |
+
|
| 24 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
| 25 |
+
exercising permissions granted by this License.
|
| 26 |
+
|
| 27 |
+
"Source" form shall mean the preferred form for making modifications,
|
| 28 |
+
including but not limited to software source code, documentation
|
| 29 |
+
source, and configuration files.
|
| 30 |
+
|
| 31 |
+
"Object" form shall mean any form resulting from mechanical
|
| 32 |
+
transformation or translation of a Source form, including but
|
| 33 |
+
not limited to compiled object code, generated documentation,
|
| 34 |
+
and conversions to other media types.
|
| 35 |
+
|
| 36 |
+
"Work" shall mean the work of authorship, whether in Source or
|
| 37 |
+
Object form, made available under the License, as indicated by a
|
| 38 |
+
copyright notice that is included in or attached to the work
|
| 39 |
+
(an example is provided in the Appendix below).
|
| 40 |
+
|
| 41 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
| 42 |
+
form, that is based on (or derived from) the Work and for which the
|
| 43 |
+
editorial revisions, annotations, elaborations, or other modifications
|
| 44 |
+
represent, as a whole, an original work of authorship. For the purposes
|
| 45 |
+
of this License, Derivative Works shall not include works that remain
|
| 46 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
| 47 |
+
the Work and Derivative Works thereof.
|
| 48 |
+
|
| 49 |
+
"Contribution" shall mean any work of authorship, including
|
| 50 |
+
the original version of the Work and any modifications or additions
|
| 51 |
+
to that Work or Derivative Works thereof, that is intentionally
|
| 52 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
| 53 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
| 54 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
| 55 |
+
means any form of electronic, verbal, or written communication sent
|
| 56 |
+
to the Licensor or its representatives, including but not limited to
|
| 57 |
+
communication on electronic mailing lists, source code control systems,
|
| 58 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
| 59 |
+
Licensor for the purpose of discussing and improving the Work, but
|
| 60 |
+
excluding communication that is conspicuously marked or otherwise
|
| 61 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
| 62 |
+
|
| 63 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
| 64 |
+
on behalf of whom a Contribution has been received by Licensor and
|
| 65 |
+
subsequently incorporated within the Work.
|
| 66 |
+
|
| 67 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
| 68 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 69 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 70 |
+
copyright license to reproduce, prepare Derivative Works of,
|
| 71 |
+
publicly display, publicly perform, sublicense, and distribute the
|
| 72 |
+
Work and such Derivative Works in Source or Object form.
|
| 73 |
+
|
| 74 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
| 75 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 76 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 77 |
+
(except as stated in this section) patent license to make, have made,
|
| 78 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
| 79 |
+
where such license applies only to those patent claims licensable
|
| 80 |
+
by such Contributor that are necessarily infringed by their
|
| 81 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
| 82 |
+
with the Work to which such Contribution(s) was submitted. If You
|
| 83 |
+
institute patent litigation against any entity (including a
|
| 84 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
| 85 |
+
or a Contribution incorporated within the Work constitutes direct
|
| 86 |
+
or contributory patent infringement, then any patent licenses
|
| 87 |
+
granted to You under this License for that Work shall terminate
|
| 88 |
+
as of the date such litigation is filed.
|
| 89 |
+
|
| 90 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
| 91 |
+
Work or Derivative Works thereof in any medium, with or without
|
| 92 |
+
modifications, and in Source or Object form, provided that You
|
| 93 |
+
meet the following conditions:
|
| 94 |
+
|
| 95 |
+
(a) You must give any other recipients of the Work or
|
| 96 |
+
Derivative Works a copy of this License; and
|
| 97 |
+
|
| 98 |
+
(b) You must cause any modified files to carry prominent notices
|
| 99 |
+
stating that You changed the files; and
|
| 100 |
+
|
| 101 |
+
(c) You must retain, in the Source form of any Derivative Works
|
| 102 |
+
that You distribute, all copyright, patent, trademark, and
|
| 103 |
+
attribution notices from the Source form of the Work,
|
| 104 |
+
excluding those notices that do not pertain to any part of
|
| 105 |
+
the Derivative Works; and
|
| 106 |
+
|
| 107 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
| 108 |
+
distribution, then any Derivative Works that You distribute must
|
| 109 |
+
include a readable copy of the attribution notices contained
|
| 110 |
+
within such NOTICE file, excluding those notices that do not
|
| 111 |
+
pertain to any part of the Derivative Works, in at least one
|
| 112 |
+
of the following places: within a NOTICE text file distributed
|
| 113 |
+
as part of the Derivative Works; within the Source form or
|
| 114 |
+
documentation, if provided along with the Derivative Works; or,
|
| 115 |
+
within a display generated by the Derivative Works, if and
|
| 116 |
+
wherever such third-party notices normally appear. The contents
|
| 117 |
+
of the NOTICE file are for informational purposes only and
|
| 118 |
+
do not modify the License. You may add Your own attribution
|
| 119 |
+
notices within Derivative Works that You distribute, alongside
|
| 120 |
+
or as an addendum to the NOTICE text from the Work, provided
|
| 121 |
+
that such additional attribution notices cannot be construed
|
| 122 |
+
as modifying the License.
|
| 123 |
+
|
| 124 |
+
You may add Your own copyright statement to Your modifications and
|
| 125 |
+
may provide additional or different license terms and conditions
|
| 126 |
+
for use, reproduction, or distribution of Your modifications, or
|
| 127 |
+
for any such Derivative Works as a whole, provided Your use,
|
| 128 |
+
reproduction, and distribution of the Work otherwise complies with
|
| 129 |
+
the conditions stated in this License.
|
| 130 |
+
|
| 131 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
| 132 |
+
any Contribution intentionally submitted for inclusion in the Work
|
| 133 |
+
by You to the Licensor shall be under the terms and conditions of
|
| 134 |
+
this License, without any additional terms or conditions.
|
| 135 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
| 136 |
+
the terms of any separate license agreement you may have executed
|
| 137 |
+
with Licensor regarding such Contributions.
|
| 138 |
+
|
| 139 |
+
6. Trademarks. This License does not grant permission to use the trade
|
| 140 |
+
names, trademarks, service marks, or product names of the Licensor,
|
| 141 |
+
except as required for reasonable and customary use in describing the
|
| 142 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
| 143 |
+
|
| 144 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
| 145 |
+
agreed to in writing, Licensor provides the Work (and each
|
| 146 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
| 147 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
| 148 |
+
implied, including, without limitation, any warranties or conditions
|
| 149 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
| 150 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
| 151 |
+
appropriateness of using or redistributing the Work and assume any
|
| 152 |
+
risks associated with Your exercise of permissions under this License.
|
| 153 |
+
|
| 154 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
| 155 |
+
whether in tort (including negligence), contract, or otherwise,
|
| 156 |
+
unless required by applicable law (such as deliberate and grossly
|
| 157 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
| 158 |
+
liable to You for damages, including any direct, indirect, special,
|
| 159 |
+
incidental, or consequential damages of any character arising as a
|
| 160 |
+
result of this License or out of the use or inability to use the
|
| 161 |
+
Work (including but not limited to damages for loss of goodwill,
|
| 162 |
+
work stoppage, computer failure or malfunction, or any and all
|
| 163 |
+
other commercial damages or losses), even if such Contributor
|
| 164 |
+
has been advised of the possibility of such damages.
|
| 165 |
+
|
| 166 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
| 167 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
| 168 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
| 169 |
+
or other liability obligations and/or rights consistent with this
|
| 170 |
+
License. However, in accepting such obligations, You may act only
|
| 171 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
| 172 |
+
of any other Contributor, and only if You agree to indemnify,
|
| 173 |
+
defend, and hold each Contributor harmless for any liability
|
| 174 |
+
incurred by, or claims asserted against, such Contributor by reason
|
| 175 |
+
of your accepting any such warranty or additional liability.
|
| 176 |
+
|
| 177 |
+
END OF TERMS AND CONDITIONS
|
| 178 |
+
|
| 179 |
+
APPENDIX: How to apply the Apache License to your work.
|
| 180 |
+
|
| 181 |
+
To apply the Apache License to your work, attach the following
|
| 182 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
| 183 |
+
replaced with your own identifying information. (Don't include
|
| 184 |
+
the brackets!) The text should be enclosed in the appropriate
|
| 185 |
+
comment syntax for the file format. We also recommend that a
|
| 186 |
+
file or class name and description of purpose be included on the
|
| 187 |
+
same "printed page" as the copyright notice for easier
|
| 188 |
+
identification within third-party archives.
|
| 189 |
+
|
| 190 |
+
Copyright [yyyy] [name of copyright owner]
|
| 191 |
+
|
| 192 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
| 193 |
+
you may not use this file except in compliance with the License.
|
| 194 |
+
You may obtain a copy of the License at
|
| 195 |
+
|
| 196 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
| 197 |
+
|
| 198 |
+
Unless required by applicable law or agreed to in writing, software
|
| 199 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
| 200 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 201 |
+
See the License for the specific language governing permissions and
|
| 202 |
+
limitations under the License.
|
.venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/METADATA
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.1
|
| 2 |
+
Name: google-api-core
|
| 3 |
+
Version: 2.24.0
|
| 4 |
+
Summary: Google API client core library
|
| 5 |
+
Author-email: Google LLC <googleapis-packages@google.com>
|
| 6 |
+
License: Apache 2.0
|
| 7 |
+
Project-URL: Documentation, https://googleapis.dev/python/google-api-core/latest/
|
| 8 |
+
Project-URL: Repository, https://github.com/googleapis/python-api-core
|
| 9 |
+
Classifier: Development Status :: 5 - Production/Stable
|
| 10 |
+
Classifier: Intended Audience :: Developers
|
| 11 |
+
Classifier: License :: OSI Approved :: Apache Software License
|
| 12 |
+
Classifier: Programming Language :: Python
|
| 13 |
+
Classifier: Programming Language :: Python :: 3
|
| 14 |
+
Classifier: Programming Language :: Python :: 3.7
|
| 15 |
+
Classifier: Programming Language :: Python :: 3.8
|
| 16 |
+
Classifier: Programming Language :: Python :: 3.9
|
| 17 |
+
Classifier: Programming Language :: Python :: 3.10
|
| 18 |
+
Classifier: Programming Language :: Python :: 3.11
|
| 19 |
+
Classifier: Programming Language :: Python :: 3.12
|
| 20 |
+
Classifier: Programming Language :: Python :: 3.13
|
| 21 |
+
Classifier: Operating System :: OS Independent
|
| 22 |
+
Classifier: Topic :: Internet
|
| 23 |
+
Requires-Python: >=3.7
|
| 24 |
+
Description-Content-Type: text/x-rst
|
| 25 |
+
License-File: LICENSE
|
| 26 |
+
Requires-Dist: googleapis-common-protos<2.0.dev0,>=1.56.2
|
| 27 |
+
Requires-Dist: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0,>=3.19.5
|
| 28 |
+
Requires-Dist: proto-plus<2.0.0dev,>=1.22.3
|
| 29 |
+
Requires-Dist: google-auth<3.0.dev0,>=2.14.1
|
| 30 |
+
Requires-Dist: requests<3.0.0.dev0,>=2.18.0
|
| 31 |
+
Requires-Dist: proto-plus<2.0.0dev,>=1.25.0; python_version >= "3.13"
|
| 32 |
+
Provides-Extra: async_rest
|
| 33 |
+
Requires-Dist: google-auth[aiohttp]<3.0.dev0,>=2.35.0; extra == "async-rest"
|
| 34 |
+
Provides-Extra: grpc
|
| 35 |
+
Requires-Dist: grpcio<2.0dev,>=1.33.2; extra == "grpc"
|
| 36 |
+
Requires-Dist: grpcio-status<2.0.dev0,>=1.33.2; extra == "grpc"
|
| 37 |
+
Requires-Dist: grpcio<2.0dev,>=1.49.1; python_version >= "3.11" and extra == "grpc"
|
| 38 |
+
Requires-Dist: grpcio-status<2.0.dev0,>=1.49.1; python_version >= "3.11" and extra == "grpc"
|
| 39 |
+
Provides-Extra: grpcgcp
|
| 40 |
+
Requires-Dist: grpcio-gcp<1.0.dev0,>=0.2.2; extra == "grpcgcp"
|
| 41 |
+
Provides-Extra: grpcio-gcp
|
| 42 |
+
Requires-Dist: grpcio-gcp<1.0.dev0,>=0.2.2; extra == "grpcio-gcp"
|
| 43 |
+
|
| 44 |
+
Core Library for Google Client Libraries
|
| 45 |
+
========================================
|
| 46 |
+
|
| 47 |
+
|pypi| |versions|
|
| 48 |
+
|
| 49 |
+
This library is not meant to stand-alone. Instead it defines
|
| 50 |
+
common helpers used by all Google API clients. For more information, see the
|
| 51 |
+
`documentation`_.
|
| 52 |
+
|
| 53 |
+
.. |pypi| image:: https://img.shields.io/pypi/v/google-api_core.svg
|
| 54 |
+
:target: https://pypi.org/project/google-api_core/
|
| 55 |
+
.. |versions| image:: https://img.shields.io/pypi/pyversions/google-api_core.svg
|
| 56 |
+
:target: https://pypi.org/project/google-api_core/
|
| 57 |
+
.. _documentation: https://googleapis.dev/python/google-api-core/latest
|
| 58 |
+
|
| 59 |
+
|
| 60 |
+
Supported Python Versions
|
| 61 |
+
-------------------------
|
| 62 |
+
Python >= 3.7
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
Unsupported Python Versions
|
| 66 |
+
---------------------------
|
| 67 |
+
|
| 68 |
+
Python == 2.7, Python == 3.5, Python == 3.6.
|
| 69 |
+
|
| 70 |
+
The last version of this library compatible with Python 2.7 and 3.5 is
|
| 71 |
+
`google-api-core==1.31.1`.
|
| 72 |
+
|
| 73 |
+
The last version of this library compatible with Python 3.6 is
|
| 74 |
+
`google-api-core==2.8.2`.
|
.venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/RECORD
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
google/api_core/__init__.py,sha256=bCgLRZtOkaVlSxTPG_o1x4V0w5FJAWREIlnq3kCfqeY,782
|
| 2 |
+
google/api_core/__pycache__/__init__.cpython-311.pyc,,
|
| 3 |
+
google/api_core/__pycache__/_rest_streaming_base.cpython-311.pyc,,
|
| 4 |
+
google/api_core/__pycache__/bidi.cpython-311.pyc,,
|
| 5 |
+
google/api_core/__pycache__/client_info.cpython-311.pyc,,
|
| 6 |
+
google/api_core/__pycache__/client_logging.cpython-311.pyc,,
|
| 7 |
+
google/api_core/__pycache__/client_options.cpython-311.pyc,,
|
| 8 |
+
google/api_core/__pycache__/datetime_helpers.cpython-311.pyc,,
|
| 9 |
+
google/api_core/__pycache__/exceptions.cpython-311.pyc,,
|
| 10 |
+
google/api_core/__pycache__/extended_operation.cpython-311.pyc,,
|
| 11 |
+
google/api_core/__pycache__/general_helpers.cpython-311.pyc,,
|
| 12 |
+
google/api_core/__pycache__/grpc_helpers.cpython-311.pyc,,
|
| 13 |
+
google/api_core/__pycache__/grpc_helpers_async.cpython-311.pyc,,
|
| 14 |
+
google/api_core/__pycache__/iam.cpython-311.pyc,,
|
| 15 |
+
google/api_core/__pycache__/operation.cpython-311.pyc,,
|
| 16 |
+
google/api_core/__pycache__/operation_async.cpython-311.pyc,,
|
| 17 |
+
google/api_core/__pycache__/page_iterator.cpython-311.pyc,,
|
| 18 |
+
google/api_core/__pycache__/page_iterator_async.cpython-311.pyc,,
|
| 19 |
+
google/api_core/__pycache__/path_template.cpython-311.pyc,,
|
| 20 |
+
google/api_core/__pycache__/protobuf_helpers.cpython-311.pyc,,
|
| 21 |
+
google/api_core/__pycache__/rest_helpers.cpython-311.pyc,,
|
| 22 |
+
google/api_core/__pycache__/rest_streaming.cpython-311.pyc,,
|
| 23 |
+
google/api_core/__pycache__/rest_streaming_async.cpython-311.pyc,,
|
| 24 |
+
google/api_core/__pycache__/retry_async.cpython-311.pyc,,
|
| 25 |
+
google/api_core/__pycache__/timeout.cpython-311.pyc,,
|
| 26 |
+
google/api_core/__pycache__/universe.cpython-311.pyc,,
|
| 27 |
+
google/api_core/__pycache__/version.cpython-311.pyc,,
|
| 28 |
+
google/api_core/__pycache__/version_header.cpython-311.pyc,,
|
| 29 |
+
google/api_core/_rest_streaming_base.py,sha256=AlkPe71v0kRUeWP5yn6N1KbxCxKhr-vfQOCgoF6x8ZE,4351
|
| 30 |
+
google/api_core/bidi.py,sha256=wpC9Lthrh62Jxp9WzRas1W78UiHO5OPuHEvx3SHcvgg,27940
|
| 31 |
+
google/api_core/client_info.py,sha256=WPZIOf-o55wNGogs29KHbYRXOGbPdkMgwYht4aOgqJg,3802
|
| 32 |
+
google/api_core/client_logging.py,sha256=o7VrcpJ5yqIfdpBDGKTIIVaqIfl5Ppr_AxiOfyKIGTk,5023
|
| 33 |
+
google/api_core/client_options.py,sha256=YJ9cvYjVK3Y_j32uIsHCX7ugHwQOLcMy0Y_f9XDL_vI,5818
|
| 34 |
+
google/api_core/datetime_helpers.py,sha256=5gFi7n0r-xVImQdj6rQKNwk58m2LcMF9WliXGHbBsDA,9034
|
| 35 |
+
google/api_core/exceptions.py,sha256=LhvwbDC8QydNUQhSXbfey9JaZnhysDATjk1dRg6vPG0,21135
|
| 36 |
+
google/api_core/extended_operation.py,sha256=r9xSOblNF35lwn2hrrjUQ-f3JDoo0a4Z8xwOy_VkvL0,8632
|
| 37 |
+
google/api_core/future/__init__.py,sha256=7sToxNNu9c_xqcpmO8dbrcSLOOxplnYOOSXjOX9QIXw,702
|
| 38 |
+
google/api_core/future/__pycache__/__init__.cpython-311.pyc,,
|
| 39 |
+
google/api_core/future/__pycache__/_helpers.cpython-311.pyc,,
|
| 40 |
+
google/api_core/future/__pycache__/async_future.cpython-311.pyc,,
|
| 41 |
+
google/api_core/future/__pycache__/base.cpython-311.pyc,,
|
| 42 |
+
google/api_core/future/__pycache__/polling.cpython-311.pyc,,
|
| 43 |
+
google/api_core/future/_helpers.py,sha256=jA6m2L1aqlOJA-9NdC1BDosPksZQ7FmLLYWDOrsQOPc,1248
|
| 44 |
+
google/api_core/future/async_future.py,sha256=7rOK0tzud8MCoUwO9AjF-3OQDtELwhtp2ONltSB3GEI,5355
|
| 45 |
+
google/api_core/future/base.py,sha256=SHyudamSWR7EyUsYaQ-XrGGkLeYClSfXfsHIHSqDIYI,1763
|
| 46 |
+
google/api_core/future/polling.py,sha256=0HUw1bp7ZLgEqMtwsvxIXNMHQbHgsP6TpmpVrMbjJ2I,14349
|
| 47 |
+
google/api_core/gapic_v1/__init__.py,sha256=r6kCwKznSXPTYRdz4C384fscefaw_rXP2bzJdnzEVnw,988
|
| 48 |
+
google/api_core/gapic_v1/__pycache__/__init__.cpython-311.pyc,,
|
| 49 |
+
google/api_core/gapic_v1/__pycache__/client_info.cpython-311.pyc,,
|
| 50 |
+
google/api_core/gapic_v1/__pycache__/config.cpython-311.pyc,,
|
| 51 |
+
google/api_core/gapic_v1/__pycache__/config_async.cpython-311.pyc,,
|
| 52 |
+
google/api_core/gapic_v1/__pycache__/method.cpython-311.pyc,,
|
| 53 |
+
google/api_core/gapic_v1/__pycache__/method_async.cpython-311.pyc,,
|
| 54 |
+
google/api_core/gapic_v1/__pycache__/routing_header.cpython-311.pyc,,
|
| 55 |
+
google/api_core/gapic_v1/client_info.py,sha256=91RMt_6UUk0wBLdS-yOPz2FUdnbvM5h1GbvTCG5qlmo,2341
|
| 56 |
+
google/api_core/gapic_v1/config.py,sha256=5isOOYPSZCXpDcJDJiwmTxGTUo0RjxJJvW2yjqBR4BI,6300
|
| 57 |
+
google/api_core/gapic_v1/config_async.py,sha256=_jrB5Yv6rxxSU6KwzOxWQ-G_x5mXilpSFAgnQ_6ktrU,1728
|
| 58 |
+
google/api_core/gapic_v1/method.py,sha256=SnMqRoKKCRph9xpnQvQ29SGjCd9WVpHEPK60X-uPyWM,9494
|
| 59 |
+
google/api_core/gapic_v1/method_async.py,sha256=L8BHV3SkvKTDqVSonDuUY1OIRMPEqfsOsTitYRQ_UwQ,2090
|
| 60 |
+
google/api_core/gapic_v1/routing_header.py,sha256=kJKOYpNS2mgSZa4Qt8Ib2Q5ONfNwpJwbNloVJ8e2wMs,3093
|
| 61 |
+
google/api_core/general_helpers.py,sha256=ZrYwDg7VTgtaQlFk_fCeFTKYZD62JMQdZRhbQhbQL_c,681
|
| 62 |
+
google/api_core/grpc_helpers.py,sha256=r262_0OWGqkECOlydA2dp40KG9Qqhnw72qJ7Pj9hpUU,23291
|
| 63 |
+
google/api_core/grpc_helpers_async.py,sha256=s389VG5fLPOkIlhRuKqnuMW76yeEjKrrvWtS66lNp3o,12224
|
| 64 |
+
google/api_core/iam.py,sha256=BGz63HtOP5_5oH9Zs93RP0Y6Qshty2eOhFEYj_CoE64,13213
|
| 65 |
+
google/api_core/operation.py,sha256=mHWay2vrNbEliv5YWFzyXBywbQdy_VPW98BALh514PA,13198
|
| 66 |
+
google/api_core/operation_async.py,sha256=XdunwVY6aKA-K0OK-5_dYbqjbvF1DLTYUUL4IOztld4,8046
|
| 67 |
+
google/api_core/operations_v1/__init__.py,sha256=ncvxAGOrunbMNRoQ9n1Io1p1nRN_LV5DutV52UidV8k,1638
|
| 68 |
+
google/api_core/operations_v1/__pycache__/__init__.cpython-311.pyc,,
|
| 69 |
+
google/api_core/operations_v1/__pycache__/abstract_operations_base_client.cpython-311.pyc,,
|
| 70 |
+
google/api_core/operations_v1/__pycache__/abstract_operations_client.cpython-311.pyc,,
|
| 71 |
+
google/api_core/operations_v1/__pycache__/operations_async_client.cpython-311.pyc,,
|
| 72 |
+
google/api_core/operations_v1/__pycache__/operations_client.cpython-311.pyc,,
|
| 73 |
+
google/api_core/operations_v1/__pycache__/operations_client_config.cpython-311.pyc,,
|
| 74 |
+
google/api_core/operations_v1/__pycache__/operations_rest_client_async.cpython-311.pyc,,
|
| 75 |
+
google/api_core/operations_v1/__pycache__/pagers.cpython-311.pyc,,
|
| 76 |
+
google/api_core/operations_v1/__pycache__/pagers_async.cpython-311.pyc,,
|
| 77 |
+
google/api_core/operations_v1/__pycache__/pagers_base.cpython-311.pyc,,
|
| 78 |
+
google/api_core/operations_v1/abstract_operations_base_client.py,sha256=JoAlWWxuj_TpbAv9GCBt6_BMhflvIoR-rg9TPSOJ3is,14861
|
| 79 |
+
google/api_core/operations_v1/abstract_operations_client.py,sha256=j_ulCLJpyqGh1SY8z5kss9iYBfOwE_XXCTqwQAKpyeI,16073
|
| 80 |
+
google/api_core/operations_v1/operations_async_client.py,sha256=1BENex2y2ovlCHlXR4v5Cfiqk2o36DBWEzPyCCCudbU,14794
|
| 81 |
+
google/api_core/operations_v1/operations_client.py,sha256=-fmbRv_2L_5cJv70WfybRw9EUyLlHB-wTbC-n0Iq4Fg,15274
|
| 82 |
+
google/api_core/operations_v1/operations_client_config.py,sha256=v7B0FiVc5p9HhnpPY1_3FIomFdA-J-4lilomeoC9SkQ,2285
|
| 83 |
+
google/api_core/operations_v1/operations_rest_client_async.py,sha256=qMYVo08Y0jfSU53dmHSDvO7_UL3x8DzJgpvnwAaTyyE,14616
|
| 84 |
+
google/api_core/operations_v1/pagers.py,sha256=WYXqIGNIMbQX-2OUbiqz3ZXScvI_iOxKjxkN6bTP1YQ,2463
|
| 85 |
+
google/api_core/operations_v1/pagers_async.py,sha256=SdFB-eXtOjZCHWICgViao6txHJqgs7vhsso6HT_npOo,2624
|
| 86 |
+
google/api_core/operations_v1/pagers_base.py,sha256=qlizIpOdU-JVeQIMaPRIBmkcsghDX2FQYz5VH3-l9s0,2652
|
| 87 |
+
google/api_core/operations_v1/transports/__init__.py,sha256=Ng5VDMks97QNfbkhFSRKmvNwUv3_IQmLUszCGTeJYvE,1457
|
| 88 |
+
google/api_core/operations_v1/transports/__pycache__/__init__.cpython-311.pyc,,
|
| 89 |
+
google/api_core/operations_v1/transports/__pycache__/base.cpython-311.pyc,,
|
| 90 |
+
google/api_core/operations_v1/transports/__pycache__/rest.cpython-311.pyc,,
|
| 91 |
+
google/api_core/operations_v1/transports/__pycache__/rest_asyncio.cpython-311.pyc,,
|
| 92 |
+
google/api_core/operations_v1/transports/base.py,sha256=7WaH1D28xt8S1d5DNZMG1HbHCZMOB76ITJuzABl2vaM,10635
|
| 93 |
+
google/api_core/operations_v1/transports/rest.py,sha256=v_elA9kWQBA2JW3b7FKDBLfJlFfxyR5DLA_tKrPEDtg,19815
|
| 94 |
+
google/api_core/operations_v1/transports/rest_asyncio.py,sha256=t6ub6RgxKqPfRYO5ahy4l6vVqY2EvIKYuJSiT7TYPNw,24822
|
| 95 |
+
google/api_core/page_iterator.py,sha256=FXMfqbhlVYAEVjpojytYAiUluVNYAVSC41MdfAhHAX4,20330
|
| 96 |
+
google/api_core/page_iterator_async.py,sha256=TbuXorRhP1wcQTD3raBJhWgSJP1JwJO_nCKJphCbVdw,10294
|
| 97 |
+
google/api_core/path_template.py,sha256=Lyqqw8OECuw5O7y9x1BJvfNbYEbmx4lnTGqc6opSyHk,11685
|
| 98 |
+
google/api_core/protobuf_helpers.py,sha256=ct_P2z6iYNvum0FZ5Uj-96qf83Q_99TP1qcGwvlO_9c,12448
|
| 99 |
+
google/api_core/py.typed,sha256=q8dgH9l1moUXiufHBVjqI0MuJy4Be9a3rNH8Zl_sICA,78
|
| 100 |
+
google/api_core/rest_helpers.py,sha256=2DsInZiHv0sLd9dfLIbEL2vDJQIybWgxlkxnNFahPnI,3529
|
| 101 |
+
google/api_core/rest_streaming.py,sha256=AwduJ7tYa0_iBhFEqCY696NVmNGWWCm6g4wnTqoVjS4,2209
|
| 102 |
+
google/api_core/rest_streaming_async.py,sha256=5GuzrfYFHfR22d9guOtXvZ1E-VHCCusJyWKVRxOcFuE,3340
|
| 103 |
+
google/api_core/retry/__init__.py,sha256=WhgtLBQO2oK-AehH_AHbGbfWo1IdG5ahUGrs3aFGw0o,2088
|
| 104 |
+
google/api_core/retry/__pycache__/__init__.cpython-311.pyc,,
|
| 105 |
+
google/api_core/retry/__pycache__/retry_base.cpython-311.pyc,,
|
| 106 |
+
google/api_core/retry/__pycache__/retry_streaming.cpython-311.pyc,,
|
| 107 |
+
google/api_core/retry/__pycache__/retry_streaming_async.cpython-311.pyc,,
|
| 108 |
+
google/api_core/retry/__pycache__/retry_unary.cpython-311.pyc,,
|
| 109 |
+
google/api_core/retry/__pycache__/retry_unary_async.cpython-311.pyc,,
|
| 110 |
+
google/api_core/retry/retry_base.py,sha256=WJtEMphRNm1c3ldnuTjCzVu3Xzm-NwjmZhnULpHGVBM,12433
|
| 111 |
+
google/api_core/retry/retry_streaming.py,sha256=kt5ucutVWGYzIsBugqag2DKBwucBmRtkKUvvlKHQ5ew,10860
|
| 112 |
+
google/api_core/retry/retry_streaming_async.py,sha256=7liXfL9o9X9BvDxwFoHdgcClQJq8A9l_Ir5Z_gN4ZvA,14343
|
| 113 |
+
google/api_core/retry/retry_unary.py,sha256=k_0PGsmFwRe4EPUMRHfzrZatDTFwEp9ucPRZDtKKGm4,13338
|
| 114 |
+
google/api_core/retry/retry_unary_async.py,sha256=9mQgLnDqRNBb0enszfE7suqy-5R_C0PQlV3y-s2q_Hw,9415
|
| 115 |
+
google/api_core/retry_async.py,sha256=_r0ROYeQqdATtRMx-q_6o4bPmqFzPyjr_oV3lfloDSM,1514
|
| 116 |
+
google/api_core/timeout.py,sha256=LnElJPn1XJuU8dNZl0YKxw8wqQbGGV94t5K1NiXOGk0,9685
|
| 117 |
+
google/api_core/universe.py,sha256=k_K5J0I3kKQiM2yEHvxeqAWxXEQZKJ2SfDlMAH-rQ08,2952
|
| 118 |
+
google/api_core/version.py,sha256=M5jVH_jvJ6jR8HkmpH2GSu_0LwmVYd4ir5Hj2wjsCaY,598
|
| 119 |
+
google/api_core/version_header.py,sha256=uEFXosCp8UH7XhznG5GQseTYtWNoJHXRPA557DWsUxA,1046
|
| 120 |
+
google_api_core-2.24.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 121 |
+
google_api_core-2.24.0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
| 122 |
+
google_api_core-2.24.0.dist-info/METADATA,sha256=dl3TjSSJtcFiI5YBQDGXTkiMELLRY9p-SckIgbSbhuM,3026
|
| 123 |
+
google_api_core-2.24.0.dist-info/RECORD,,
|
| 124 |
+
google_api_core-2.24.0.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
| 125 |
+
google_api_core-2.24.0.dist-info/top_level.txt,sha256=_1QvSJIhFAGfxb79D6DhB7SUw2X6T4rwnz_LLrbcD3c,7
|
.venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/WHEEL
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Wheel-Version: 1.0
|
| 2 |
+
Generator: setuptools (75.3.0)
|
| 3 |
+
Root-Is-Purelib: true
|
| 4 |
+
Tag: py3-none-any
|
| 5 |
+
|
.venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/top_level.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
google
|
.venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
.venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/METADATA
ADDED
|
@@ -0,0 +1,616 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.3
|
| 2 |
+
Name: httpcore
|
| 3 |
+
Version: 1.0.7
|
| 4 |
+
Summary: A minimal low-level HTTP client.
|
| 5 |
+
Project-URL: Documentation, https://www.encode.io/httpcore
|
| 6 |
+
Project-URL: Homepage, https://www.encode.io/httpcore/
|
| 7 |
+
Project-URL: Source, https://github.com/encode/httpcore
|
| 8 |
+
Author-email: Tom Christie <tom@tomchristie.com>
|
| 9 |
+
License: BSD-3-Clause
|
| 10 |
+
Classifier: Development Status :: 3 - Alpha
|
| 11 |
+
Classifier: Environment :: Web Environment
|
| 12 |
+
Classifier: Framework :: AsyncIO
|
| 13 |
+
Classifier: Framework :: Trio
|
| 14 |
+
Classifier: Intended Audience :: Developers
|
| 15 |
+
Classifier: License :: OSI Approved :: BSD License
|
| 16 |
+
Classifier: Operating System :: OS Independent
|
| 17 |
+
Classifier: Programming Language :: Python :: 3
|
| 18 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
| 19 |
+
Classifier: Programming Language :: Python :: 3.8
|
| 20 |
+
Classifier: Programming Language :: Python :: 3.9
|
| 21 |
+
Classifier: Programming Language :: Python :: 3.10
|
| 22 |
+
Classifier: Programming Language :: Python :: 3.11
|
| 23 |
+
Classifier: Programming Language :: Python :: 3.12
|
| 24 |
+
Classifier: Topic :: Internet :: WWW/HTTP
|
| 25 |
+
Requires-Python: >=3.8
|
| 26 |
+
Requires-Dist: certifi
|
| 27 |
+
Requires-Dist: h11<0.15,>=0.13
|
| 28 |
+
Provides-Extra: asyncio
|
| 29 |
+
Requires-Dist: anyio<5.0,>=4.0; extra == 'asyncio'
|
| 30 |
+
Provides-Extra: http2
|
| 31 |
+
Requires-Dist: h2<5,>=3; extra == 'http2'
|
| 32 |
+
Provides-Extra: socks
|
| 33 |
+
Requires-Dist: socksio==1.*; extra == 'socks'
|
| 34 |
+
Provides-Extra: trio
|
| 35 |
+
Requires-Dist: trio<1.0,>=0.22.0; extra == 'trio'
|
| 36 |
+
Description-Content-Type: text/markdown
|
| 37 |
+
|
| 38 |
+
# HTTP Core
|
| 39 |
+
|
| 40 |
+
[](https://github.com/encode/httpcore/actions)
|
| 41 |
+
[](https://pypi.org/project/httpcore/)
|
| 42 |
+
|
| 43 |
+
> *Do one thing, and do it well.*
|
| 44 |
+
|
| 45 |
+
The HTTP Core package provides a minimal low-level HTTP client, which does
|
| 46 |
+
one thing only. Sending HTTP requests.
|
| 47 |
+
|
| 48 |
+
It does not provide any high level model abstractions over the API,
|
| 49 |
+
does not handle redirects, multipart uploads, building authentication headers,
|
| 50 |
+
transparent HTTP caching, URL parsing, session cookie handling,
|
| 51 |
+
content or charset decoding, handling JSON, environment based configuration
|
| 52 |
+
defaults, or any of that Jazz.
|
| 53 |
+
|
| 54 |
+
Some things HTTP Core does do:
|
| 55 |
+
|
| 56 |
+
* Sending HTTP requests.
|
| 57 |
+
* Thread-safe / task-safe connection pooling.
|
| 58 |
+
* HTTP(S) proxy & SOCKS proxy support.
|
| 59 |
+
* Supports HTTP/1.1 and HTTP/2.
|
| 60 |
+
* Provides both sync and async interfaces.
|
| 61 |
+
* Async backend support for `asyncio` and `trio`.
|
| 62 |
+
|
| 63 |
+
## Requirements
|
| 64 |
+
|
| 65 |
+
Python 3.8+
|
| 66 |
+
|
| 67 |
+
## Installation
|
| 68 |
+
|
| 69 |
+
For HTTP/1.1 only support, install with:
|
| 70 |
+
|
| 71 |
+
```shell
|
| 72 |
+
$ pip install httpcore
|
| 73 |
+
```
|
| 74 |
+
|
| 75 |
+
There are also a number of optional extras available...
|
| 76 |
+
|
| 77 |
+
```shell
|
| 78 |
+
$ pip install httpcore['asyncio,trio,http2,socks']
|
| 79 |
+
```
|
| 80 |
+
|
| 81 |
+
## Sending requests
|
| 82 |
+
|
| 83 |
+
Send an HTTP request:
|
| 84 |
+
|
| 85 |
+
```python
|
| 86 |
+
import httpcore
|
| 87 |
+
|
| 88 |
+
response = httpcore.request("GET", "https://www.example.com/")
|
| 89 |
+
|
| 90 |
+
print(response)
|
| 91 |
+
# <Response [200]>
|
| 92 |
+
print(response.status)
|
| 93 |
+
# 200
|
| 94 |
+
print(response.headers)
|
| 95 |
+
# [(b'Accept-Ranges', b'bytes'), (b'Age', b'557328'), (b'Cache-Control', b'max-age=604800'), ...]
|
| 96 |
+
print(response.content)
|
| 97 |
+
# b'<!doctype html>\n<html>\n<head>\n<title>Example Domain</title>\n\n<meta charset="utf-8"/>\n ...'
|
| 98 |
+
```
|
| 99 |
+
|
| 100 |
+
The top-level `httpcore.request()` function is provided for convenience. In practice whenever you're working with `httpcore` you'll want to use the connection pooling functionality that it provides.
|
| 101 |
+
|
| 102 |
+
```python
|
| 103 |
+
import httpcore
|
| 104 |
+
|
| 105 |
+
http = httpcore.ConnectionPool()
|
| 106 |
+
response = http.request("GET", "https://www.example.com/")
|
| 107 |
+
```
|
| 108 |
+
|
| 109 |
+
Once you're ready to get going, [head over to the documentation](https://www.encode.io/httpcore/).
|
| 110 |
+
|
| 111 |
+
## Motivation
|
| 112 |
+
|
| 113 |
+
You *probably* don't want to be using HTTP Core directly. It might make sense if
|
| 114 |
+
you're writing something like a proxy service in Python, and you just want
|
| 115 |
+
something at the lowest possible level, but more typically you'll want to use
|
| 116 |
+
a higher level client library, such as `httpx`.
|
| 117 |
+
|
| 118 |
+
The motivation for `httpcore` is:
|
| 119 |
+
|
| 120 |
+
* To provide a reusable low-level client library, that other packages can then build on top of.
|
| 121 |
+
* To provide a *really clear interface split* between the networking code and client logic,
|
| 122 |
+
so that each is easier to understand and reason about in isolation.
|
| 123 |
+
|
| 124 |
+
## Dependencies
|
| 125 |
+
|
| 126 |
+
The `httpcore` package has the following dependencies...
|
| 127 |
+
|
| 128 |
+
* `h11`
|
| 129 |
+
* `certifi`
|
| 130 |
+
|
| 131 |
+
And the following optional extras...
|
| 132 |
+
|
| 133 |
+
* `anyio` - Required by `pip install httpcore['asyncio']`.
|
| 134 |
+
* `trio` - Required by `pip install httpcore['trio']`.
|
| 135 |
+
* `h2` - Required by `pip install httpcore['http2']`.
|
| 136 |
+
* `socksio` - Required by `pip install httpcore['socks']`.
|
| 137 |
+
|
| 138 |
+
## Versioning
|
| 139 |
+
|
| 140 |
+
We use [SEMVER for our versioning policy](https://semver.org/).
|
| 141 |
+
|
| 142 |
+
For changes between package versions please see our [project changelog](CHANGELOG.md).
|
| 143 |
+
|
| 144 |
+
We recommend pinning your requirements either the most current major version, or a more specific version range:
|
| 145 |
+
|
| 146 |
+
```python
|
| 147 |
+
pip install 'httpcore==1.*'
|
| 148 |
+
```
|
| 149 |
+
# Changelog
|
| 150 |
+
|
| 151 |
+
All notable changes to this project will be documented in this file.
|
| 152 |
+
|
| 153 |
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
| 154 |
+
|
| 155 |
+
## Version 1.0.7 (November 15th, 2024)
|
| 156 |
+
|
| 157 |
+
- Support `proxy=…` configuration on `ConnectionPool()`. (#974)
|
| 158 |
+
|
| 159 |
+
## Version 1.0.6 (October 1st, 2024)
|
| 160 |
+
|
| 161 |
+
- Relax `trio` dependency pinning. (#956)
|
| 162 |
+
- Handle `trio` raising `NotImplementedError` on unsupported platforms. (#955)
|
| 163 |
+
- Handle mapping `ssl.SSLError` to `httpcore.ConnectError`. (#918)
|
| 164 |
+
|
| 165 |
+
## 1.0.5 (March 27th, 2024)
|
| 166 |
+
|
| 167 |
+
- Handle `EndOfStream` exception for anyio backend. (#899)
|
| 168 |
+
- Allow trio `0.25.*` series in package dependancies. (#903)
|
| 169 |
+
|
| 170 |
+
## 1.0.4 (February 21st, 2024)
|
| 171 |
+
|
| 172 |
+
- Add `target` request extension. (#888)
|
| 173 |
+
- Fix support for connection `Upgrade` and `CONNECT` when some data in the stream has been read. (#882)
|
| 174 |
+
|
| 175 |
+
## 1.0.3 (February 13th, 2024)
|
| 176 |
+
|
| 177 |
+
- Fix support for async cancellations. (#880)
|
| 178 |
+
- Fix trace extension when used with socks proxy. (#849)
|
| 179 |
+
- Fix SSL context for connections using the "wss" scheme (#869)
|
| 180 |
+
|
| 181 |
+
## 1.0.2 (November 10th, 2023)
|
| 182 |
+
|
| 183 |
+
- Fix `float("inf")` timeouts in `Event.wait` function. (#846)
|
| 184 |
+
|
| 185 |
+
## 1.0.1 (November 3rd, 2023)
|
| 186 |
+
|
| 187 |
+
- Fix pool timeout to account for the total time spent retrying. (#823)
|
| 188 |
+
- Raise a neater RuntimeError when the correct async deps are not installed. (#826)
|
| 189 |
+
- Add support for synchronous TLS-in-TLS streams. (#840)
|
| 190 |
+
|
| 191 |
+
## 1.0.0 (October 6th, 2023)
|
| 192 |
+
|
| 193 |
+
From version 1.0 our async support is now optional, as the package has minimal dependencies by default.
|
| 194 |
+
|
| 195 |
+
For async support use either `pip install 'httpcore[asyncio]'` or `pip install 'httpcore[trio]'`.
|
| 196 |
+
|
| 197 |
+
The project versioning policy is now explicitly governed by SEMVER. See https://semver.org/.
|
| 198 |
+
|
| 199 |
+
- Async support becomes fully optional. (#809)
|
| 200 |
+
- Add support for Python 3.12. (#807)
|
| 201 |
+
|
| 202 |
+
## 0.18.0 (September 8th, 2023)
|
| 203 |
+
|
| 204 |
+
- Add support for HTTPS proxies. (#745, #786)
|
| 205 |
+
- Drop Python 3.7 support. (#727)
|
| 206 |
+
- Handle `sni_hostname` extension with SOCKS proxy. (#774)
|
| 207 |
+
- Handle HTTP/1.1 half-closed connections gracefully. (#641)
|
| 208 |
+
- Change the type of `Extensions` from `Mapping[Str, Any]` to `MutableMapping[Str, Any]`. (#762)
|
| 209 |
+
|
| 210 |
+
## 0.17.3 (July 5th, 2023)
|
| 211 |
+
|
| 212 |
+
- Support async cancellations, ensuring that the connection pool is left in a clean state when cancellations occur. (#726)
|
| 213 |
+
- The networking backend interface has [been added to the public API](https://www.encode.io/httpcore/network-backends). Some classes which were previously private implementation detail are now part of the top-level public API. (#699)
|
| 214 |
+
- Graceful handling of HTTP/2 GoAway frames, with requests being transparently retried on a new connection. (#730)
|
| 215 |
+
- Add exceptions when a synchronous `trace callback` is passed to an asynchronous request or an asynchronous `trace callback` is passed to a synchronous request. (#717)
|
| 216 |
+
- Drop Python 3.7 support. (#727)
|
| 217 |
+
|
| 218 |
+
## 0.17.2 (May 23th, 2023)
|
| 219 |
+
|
| 220 |
+
- Add `socket_options` argument to `ConnectionPool` and `HTTProxy` classes. (#668)
|
| 221 |
+
- Improve logging with per-module logger names. (#690)
|
| 222 |
+
- Add `sni_hostname` request extension. (#696)
|
| 223 |
+
- Resolve race condition during import of `anyio` package. (#692)
|
| 224 |
+
- Enable TCP_NODELAY for all synchronous sockets. (#651)
|
| 225 |
+
|
| 226 |
+
## 0.17.1 (May 17th, 2023)
|
| 227 |
+
|
| 228 |
+
- If 'retries' is set, then allow retries if an SSL handshake error occurs. (#669)
|
| 229 |
+
- Improve correctness of tracebacks on network exceptions, by raising properly chained exceptions. (#678)
|
| 230 |
+
- Prevent connection-hanging behaviour when HTTP/2 connections are closed by a server-sent 'GoAway' frame. (#679)
|
| 231 |
+
- Fix edge-case exception when removing requests from the connection pool. (#680)
|
| 232 |
+
- Fix pool timeout edge-case. (#688)
|
| 233 |
+
|
| 234 |
+
## 0.17.0 (March 16th, 2023)
|
| 235 |
+
|
| 236 |
+
- Add DEBUG level logging. (#648)
|
| 237 |
+
- Respect HTTP/2 max concurrent streams when settings updates are sent by server. (#652)
|
| 238 |
+
- Increase the allowable HTTP header size to 100kB. (#647)
|
| 239 |
+
- Add `retries` option to SOCKS proxy classes. (#643)
|
| 240 |
+
|
| 241 |
+
## 0.16.3 (December 20th, 2022)
|
| 242 |
+
|
| 243 |
+
- Allow `ws` and `wss` schemes. Allows us to properly support websocket upgrade connections. (#625)
|
| 244 |
+
- Forwarding HTTP proxies use a connection-per-remote-host. Required by some proxy implementations. (#637)
|
| 245 |
+
- Don't raise `RuntimeError` when closing a connection pool with active connections. Removes some error cases when cancellations are used. (#631)
|
| 246 |
+
- Lazy import `anyio`, so that it's no longer a hard dependancy, and isn't imported if unused. (#639)
|
| 247 |
+
|
| 248 |
+
## 0.16.2 (November 25th, 2022)
|
| 249 |
+
|
| 250 |
+
- Revert 'Fix async cancellation behaviour', which introduced race conditions. (#627)
|
| 251 |
+
- Raise `RuntimeError` if attempting to us UNIX domain sockets on Windows. (#619)
|
| 252 |
+
|
| 253 |
+
## 0.16.1 (November 17th, 2022)
|
| 254 |
+
|
| 255 |
+
- Fix HTTP/1.1 interim informational responses, such as "100 Continue". (#605)
|
| 256 |
+
|
| 257 |
+
## 0.16.0 (October 11th, 2022)
|
| 258 |
+
|
| 259 |
+
- Support HTTP/1.1 informational responses. (#581)
|
| 260 |
+
- Fix async cancellation behaviour. (#580)
|
| 261 |
+
- Support `h11` 0.14. (#579)
|
| 262 |
+
|
| 263 |
+
## 0.15.0 (May 17th, 2022)
|
| 264 |
+
|
| 265 |
+
- Drop Python 3.6 support (#535)
|
| 266 |
+
- Ensure HTTP proxy CONNECT requests include `timeout` configuration. (#506)
|
| 267 |
+
- Switch to explicit `typing.Optional` for type hints. (#513)
|
| 268 |
+
- For `trio` map OSError exceptions to `ConnectError`. (#543)
|
| 269 |
+
|
| 270 |
+
## 0.14.7 (February 4th, 2022)
|
| 271 |
+
|
| 272 |
+
- Requests which raise a PoolTimeout need to be removed from the pool queue. (#502)
|
| 273 |
+
- Fix AttributeError that happened when Socks5Connection were terminated. (#501)
|
| 274 |
+
|
| 275 |
+
## 0.14.6 (February 1st, 2022)
|
| 276 |
+
|
| 277 |
+
- Fix SOCKS support for `http://` URLs. (#492)
|
| 278 |
+
- Resolve race condition around exceptions during streaming a response. (#491)
|
| 279 |
+
|
| 280 |
+
## 0.14.5 (January 18th, 2022)
|
| 281 |
+
|
| 282 |
+
- SOCKS proxy support. (#478)
|
| 283 |
+
- Add proxy_auth argument to HTTPProxy. (#481)
|
| 284 |
+
- Improve error message on 'RemoteProtocolError' exception when server disconnects without sending a response. (#479)
|
| 285 |
+
|
| 286 |
+
## 0.14.4 (January 5th, 2022)
|
| 287 |
+
|
| 288 |
+
- Support HTTP/2 on HTTPS tunnelling proxies. (#468)
|
| 289 |
+
- Fix proxy headers missing on HTTP forwarding. (#456)
|
| 290 |
+
- Only instantiate SSL context if required. (#457)
|
| 291 |
+
- More robust HTTP/2 handling. (#253, #439, #440, #441)
|
| 292 |
+
|
| 293 |
+
## 0.14.3 (November 17th, 2021)
|
| 294 |
+
|
| 295 |
+
- Fix race condition when removing closed connections from the pool. (#437)
|
| 296 |
+
|
| 297 |
+
## 0.14.2 (November 16th, 2021)
|
| 298 |
+
|
| 299 |
+
- Failed connections no longer remain in the pool. (Pull #433)
|
| 300 |
+
|
| 301 |
+
## 0.14.1 (November 12th, 2021)
|
| 302 |
+
|
| 303 |
+
- `max_connections` becomes optional. (Pull #429)
|
| 304 |
+
- `certifi` is now included in the install dependancies. (Pull #428)
|
| 305 |
+
- `h2` is now strictly optional. (Pull #428)
|
| 306 |
+
|
| 307 |
+
## 0.14.0 (November 11th, 2021)
|
| 308 |
+
|
| 309 |
+
The 0.14 release is a complete reworking of `httpcore`, comprehensively addressing some underlying issues in the connection pooling, as well as substantially redesigning the API to be more user friendly.
|
| 310 |
+
|
| 311 |
+
Some of the lower-level API design also makes the components more easily testable in isolation, and the package now has 100% test coverage.
|
| 312 |
+
|
| 313 |
+
See [discussion #419](https://github.com/encode/httpcore/discussions/419) for a little more background.
|
| 314 |
+
|
| 315 |
+
There's some other neat bits in there too, such as the "trace" extension, which gives a hook into inspecting the internal events that occur during the request/response cycle. This extension is needed for the HTTPX cli, in order to...
|
| 316 |
+
|
| 317 |
+
* Log the point at which the connection is established, and the IP/port on which it is made.
|
| 318 |
+
* Determine if the outgoing request should log as HTTP/1.1 or HTTP/2, rather than having to assume it's HTTP/2 if the --http2 flag was passed. (Which may not actually be true.)
|
| 319 |
+
* Log SSL version info / certificate info.
|
| 320 |
+
|
| 321 |
+
Note that `curio` support is not currently available in 0.14.0. If you're using `httpcore` with `curio` please get in touch, so we can assess if we ought to prioritize it as a feature or not.
|
| 322 |
+
|
| 323 |
+
## 0.13.7 (September 13th, 2021)
|
| 324 |
+
|
| 325 |
+
- Fix broken error messaging when URL scheme is missing, or a non HTTP(S) scheme is used. (Pull #403)
|
| 326 |
+
|
| 327 |
+
## 0.13.6 (June 15th, 2021)
|
| 328 |
+
|
| 329 |
+
### Fixed
|
| 330 |
+
|
| 331 |
+
- Close sockets when read or write timeouts occur. (Pull #365)
|
| 332 |
+
|
| 333 |
+
## 0.13.5 (June 14th, 2021)
|
| 334 |
+
|
| 335 |
+
### Fixed
|
| 336 |
+
|
| 337 |
+
- Resolved niggles with AnyIO EOF behaviours. (Pull #358, #362)
|
| 338 |
+
|
| 339 |
+
## 0.13.4 (June 9th, 2021)
|
| 340 |
+
|
| 341 |
+
### Added
|
| 342 |
+
|
| 343 |
+
- Improved error messaging when URL scheme is missing, or a non HTTP(S) scheme is used. (Pull #354)
|
| 344 |
+
|
| 345 |
+
### Fixed
|
| 346 |
+
|
| 347 |
+
- Switched to `anyio` as the default backend implementation when running with `asyncio`. Resolves some awkward [TLS timeout issues](https://github.com/encode/httpx/discussions/1511).
|
| 348 |
+
|
| 349 |
+
## 0.13.3 (May 6th, 2021)
|
| 350 |
+
|
| 351 |
+
### Added
|
| 352 |
+
|
| 353 |
+
- Support HTTP/2 prior knowledge, using `httpcore.SyncConnectionPool(http1=False)`. (Pull #333)
|
| 354 |
+
|
| 355 |
+
### Fixed
|
| 356 |
+
|
| 357 |
+
- Handle cases where environment does not provide `select.poll` support. (Pull #331)
|
| 358 |
+
|
| 359 |
+
## 0.13.2 (April 29th, 2021)
|
| 360 |
+
|
| 361 |
+
### Added
|
| 362 |
+
|
| 363 |
+
- Improve error message for specific case of `RemoteProtocolError` where server disconnects without sending a response. (Pull #313)
|
| 364 |
+
|
| 365 |
+
## 0.13.1 (April 28th, 2021)
|
| 366 |
+
|
| 367 |
+
### Fixed
|
| 368 |
+
|
| 369 |
+
- More resiliant testing for closed connections. (Pull #311)
|
| 370 |
+
- Don't raise exceptions on ungraceful connection closes. (Pull #310)
|
| 371 |
+
|
| 372 |
+
## 0.13.0 (April 21st, 2021)
|
| 373 |
+
|
| 374 |
+
The 0.13 release updates the core API in order to match the HTTPX Transport API,
|
| 375 |
+
introduced in HTTPX 0.18 onwards.
|
| 376 |
+
|
| 377 |
+
An example of making requests with the new interface is:
|
| 378 |
+
|
| 379 |
+
```python
|
| 380 |
+
with httpcore.SyncConnectionPool() as http:
|
| 381 |
+
status_code, headers, stream, extensions = http.handle_request(
|
| 382 |
+
method=b'GET',
|
| 383 |
+
url=(b'https', b'example.org', 443, b'/'),
|
| 384 |
+
headers=[(b'host', b'example.org'), (b'user-agent', b'httpcore')]
|
| 385 |
+
stream=httpcore.ByteStream(b''),
|
| 386 |
+
extensions={}
|
| 387 |
+
)
|
| 388 |
+
body = stream.read()
|
| 389 |
+
print(status_code, body)
|
| 390 |
+
```
|
| 391 |
+
|
| 392 |
+
### Changed
|
| 393 |
+
|
| 394 |
+
- The `.request()` method is now `handle_request()`. (Pull #296)
|
| 395 |
+
- The `.arequest()` method is now `.handle_async_request()`. (Pull #296)
|
| 396 |
+
- The `headers` argument is no longer optional. (Pull #296)
|
| 397 |
+
- The `stream` argument is no longer optional. (Pull #296)
|
| 398 |
+
- The `ext` argument is now named `extensions`, and is no longer optional. (Pull #296)
|
| 399 |
+
- The `"reason"` extension keyword is now named `"reason_phrase"`. (Pull #296)
|
| 400 |
+
- The `"reason_phrase"` and `"http_version"` extensions now use byte strings for their values. (Pull #296)
|
| 401 |
+
- The `httpcore.PlainByteStream()` class becomes `httpcore.ByteStream()`. (Pull #296)
|
| 402 |
+
|
| 403 |
+
### Added
|
| 404 |
+
|
| 405 |
+
- Streams now support a `.read()` interface. (Pull #296)
|
| 406 |
+
|
| 407 |
+
### Fixed
|
| 408 |
+
|
| 409 |
+
- Task cancellation no longer leaks connections from the connection pool. (Pull #305)
|
| 410 |
+
|
| 411 |
+
## 0.12.3 (December 7th, 2020)
|
| 412 |
+
|
| 413 |
+
### Fixed
|
| 414 |
+
|
| 415 |
+
- Abort SSL connections on close rather than waiting for remote EOF when using `asyncio`. (Pull #167)
|
| 416 |
+
- Fix exception raised in case of connect timeouts when using the `anyio` backend. (Pull #236)
|
| 417 |
+
- Fix `Host` header precedence for `:authority` in HTTP/2. (Pull #241, #243)
|
| 418 |
+
- Handle extra edge case when detecting for socket readability when using `asyncio`. (Pull #242, #244)
|
| 419 |
+
- Fix `asyncio` SSL warning when using proxy tunneling. (Pull #249)
|
| 420 |
+
|
| 421 |
+
## 0.12.2 (November 20th, 2020)
|
| 422 |
+
|
| 423 |
+
### Fixed
|
| 424 |
+
|
| 425 |
+
- Properly wrap connect errors on the asyncio backend. (Pull #235)
|
| 426 |
+
- Fix `ImportError` occurring on Python 3.9 when using the HTTP/1.1 sync client in a multithreaded context. (Pull #237)
|
| 427 |
+
|
| 428 |
+
## 0.12.1 (November 7th, 2020)
|
| 429 |
+
|
| 430 |
+
### Added
|
| 431 |
+
|
| 432 |
+
- Add connect retries. (Pull #221)
|
| 433 |
+
|
| 434 |
+
### Fixed
|
| 435 |
+
|
| 436 |
+
- Tweak detection of dropped connections, resolving an issue with open files limits on Linux. (Pull #185)
|
| 437 |
+
- Avoid leaking connections when establishing an HTTP tunnel to a proxy has failed. (Pull #223)
|
| 438 |
+
- Properly wrap OS errors when using `trio`. (Pull #225)
|
| 439 |
+
|
| 440 |
+
## 0.12.0 (October 6th, 2020)
|
| 441 |
+
|
| 442 |
+
### Changed
|
| 443 |
+
|
| 444 |
+
- HTTP header casing is now preserved, rather than always sent in lowercase. (#216 and python-hyper/h11#104)
|
| 445 |
+
|
| 446 |
+
### Added
|
| 447 |
+
|
| 448 |
+
- Add Python 3.9 to officially supported versions.
|
| 449 |
+
|
| 450 |
+
### Fixed
|
| 451 |
+
|
| 452 |
+
- Gracefully handle a stdlib asyncio bug when a connection is closed while it is in a paused-for-reading state. (#201)
|
| 453 |
+
|
| 454 |
+
## 0.11.1 (September 28nd, 2020)
|
| 455 |
+
|
| 456 |
+
### Fixed
|
| 457 |
+
|
| 458 |
+
- Add await to async semaphore release() coroutine (#197)
|
| 459 |
+
- Drop incorrect curio classifier (#192)
|
| 460 |
+
|
| 461 |
+
## 0.11.0 (September 22nd, 2020)
|
| 462 |
+
|
| 463 |
+
The Transport API with 0.11.0 has a couple of significant changes.
|
| 464 |
+
|
| 465 |
+
Firstly we've moved changed the request interface in order to allow extensions, which will later enable us to support features
|
| 466 |
+
such as trailing headers, HTTP/2 server push, and CONNECT/Upgrade connections.
|
| 467 |
+
|
| 468 |
+
The interface changes from:
|
| 469 |
+
|
| 470 |
+
```python
|
| 471 |
+
def request(method, url, headers, stream, timeout):
|
| 472 |
+
return (http_version, status_code, reason, headers, stream)
|
| 473 |
+
```
|
| 474 |
+
|
| 475 |
+
To instead including an optional dictionary of extensions on the request and response:
|
| 476 |
+
|
| 477 |
+
```python
|
| 478 |
+
def request(method, url, headers, stream, ext):
|
| 479 |
+
return (status_code, headers, stream, ext)
|
| 480 |
+
```
|
| 481 |
+
|
| 482 |
+
Having an open-ended extensions point will allow us to add later support for various optional features, that wouldn't otherwise be supported without these API changes.
|
| 483 |
+
|
| 484 |
+
In particular:
|
| 485 |
+
|
| 486 |
+
* Trailing headers support.
|
| 487 |
+
* HTTP/2 Server Push
|
| 488 |
+
* sendfile.
|
| 489 |
+
* Exposing raw connection on CONNECT, Upgrade, HTTP/2 bi-di streaming.
|
| 490 |
+
* Exposing debug information out of the API, including template name, template context.
|
| 491 |
+
|
| 492 |
+
Currently extensions are limited to:
|
| 493 |
+
|
| 494 |
+
* request: `timeout` - Optional. Timeout dictionary.
|
| 495 |
+
* response: `http_version` - Optional. Include the HTTP version used on the response.
|
| 496 |
+
* response: `reason` - Optional. Include the reason phrase used on the response. Only valid with HTTP/1.*.
|
| 497 |
+
|
| 498 |
+
See https://github.com/encode/httpx/issues/1274#issuecomment-694884553 for the history behind this.
|
| 499 |
+
|
| 500 |
+
Secondly, the async version of `request` is now namespaced as `arequest`.
|
| 501 |
+
|
| 502 |
+
This allows concrete transports to support both sync and async implementations on the same class.
|
| 503 |
+
|
| 504 |
+
### Added
|
| 505 |
+
|
| 506 |
+
- Add curio support. (Pull #168)
|
| 507 |
+
- Add anyio support, with `backend="anyio"`. (Pull #169)
|
| 508 |
+
|
| 509 |
+
### Changed
|
| 510 |
+
|
| 511 |
+
- Update the Transport API to use 'ext' for optional extensions. (Pull #190)
|
| 512 |
+
- Update the Transport API to use `.request` and `.arequest` so implementations can support both sync and async. (Pull #189)
|
| 513 |
+
|
| 514 |
+
## 0.10.2 (August 20th, 2020)
|
| 515 |
+
|
| 516 |
+
### Added
|
| 517 |
+
|
| 518 |
+
- Added Unix Domain Socket support. (Pull #139)
|
| 519 |
+
|
| 520 |
+
### Fixed
|
| 521 |
+
|
| 522 |
+
- Always include the port on proxy CONNECT requests. (Pull #154)
|
| 523 |
+
- Fix `max_keepalive_connections` configuration. (Pull #153)
|
| 524 |
+
- Fixes behaviour in HTTP/1.1 where server disconnects can be used to signal the end of the response body. (Pull #164)
|
| 525 |
+
|
| 526 |
+
## 0.10.1 (August 7th, 2020)
|
| 527 |
+
|
| 528 |
+
- Include `max_keepalive_connections` on `AsyncHTTPProxy`/`SyncHTTPProxy` classes.
|
| 529 |
+
|
| 530 |
+
## 0.10.0 (August 7th, 2020)
|
| 531 |
+
|
| 532 |
+
The most notable change in the 0.10.0 release is that HTTP/2 support is now fully optional.
|
| 533 |
+
|
| 534 |
+
Use either `pip install httpcore` for HTTP/1.1 support only, or `pip install httpcore[http2]` for HTTP/1.1 and HTTP/2 support.
|
| 535 |
+
|
| 536 |
+
### Added
|
| 537 |
+
|
| 538 |
+
- HTTP/2 support becomes optional. (Pull #121, #130)
|
| 539 |
+
- Add `local_address=...` support. (Pull #100, #134)
|
| 540 |
+
- Add `PlainByteStream`, `IteratorByteStream`, `AsyncIteratorByteStream`. The `AsyncByteSteam` and `SyncByteStream` classes are now pure interface classes. (#133)
|
| 541 |
+
- Add `LocalProtocolError`, `RemoteProtocolError` exceptions. (Pull #129)
|
| 542 |
+
- Add `UnsupportedProtocol` exception. (Pull #128)
|
| 543 |
+
- Add `.get_connection_info()` method. (Pull #102, #137)
|
| 544 |
+
- Add better TRACE logs. (Pull #101)
|
| 545 |
+
|
| 546 |
+
### Changed
|
| 547 |
+
|
| 548 |
+
- `max_keepalive` is deprecated in favour of `max_keepalive_connections`. (Pull #140)
|
| 549 |
+
|
| 550 |
+
### Fixed
|
| 551 |
+
|
| 552 |
+
- Improve handling of server disconnects. (Pull #112)
|
| 553 |
+
|
| 554 |
+
## 0.9.1 (May 27th, 2020)
|
| 555 |
+
|
| 556 |
+
### Fixed
|
| 557 |
+
|
| 558 |
+
- Proper host resolution for sync case, including IPv6 support. (Pull #97)
|
| 559 |
+
- Close outstanding connections when connection pool is closed. (Pull #98)
|
| 560 |
+
|
| 561 |
+
## 0.9.0 (May 21th, 2020)
|
| 562 |
+
|
| 563 |
+
### Changed
|
| 564 |
+
|
| 565 |
+
- URL port becomes an `Optional[int]` instead of `int`. (Pull #92)
|
| 566 |
+
|
| 567 |
+
### Fixed
|
| 568 |
+
|
| 569 |
+
- Honor HTTP/2 max concurrent streams settings. (Pull #89, #90)
|
| 570 |
+
- Remove incorrect debug log. (Pull #83)
|
| 571 |
+
|
| 572 |
+
## 0.8.4 (May 11th, 2020)
|
| 573 |
+
|
| 574 |
+
### Added
|
| 575 |
+
|
| 576 |
+
- Logging via HTTPCORE_LOG_LEVEL and HTTPX_LOG_LEVEL environment variables
|
| 577 |
+
and TRACE level logging. (Pull #79)
|
| 578 |
+
|
| 579 |
+
### Fixed
|
| 580 |
+
|
| 581 |
+
- Reuse of connections on HTTP/2 in close concurrency situations. (Pull #81)
|
| 582 |
+
|
| 583 |
+
## 0.8.3 (May 6rd, 2020)
|
| 584 |
+
|
| 585 |
+
### Fixed
|
| 586 |
+
|
| 587 |
+
- Include `Host` and `Accept` headers on proxy "CONNECT" requests.
|
| 588 |
+
- De-duplicate any headers also contained in proxy_headers.
|
| 589 |
+
- HTTP/2 flag not being passed down to proxy connections.
|
| 590 |
+
|
| 591 |
+
## 0.8.2 (May 3rd, 2020)
|
| 592 |
+
|
| 593 |
+
### Fixed
|
| 594 |
+
|
| 595 |
+
- Fix connections using proxy forwarding requests not being added to the
|
| 596 |
+
connection pool properly. (Pull #70)
|
| 597 |
+
|
| 598 |
+
## 0.8.1 (April 30th, 2020)
|
| 599 |
+
|
| 600 |
+
### Changed
|
| 601 |
+
|
| 602 |
+
- Allow inherintance of both `httpcore.AsyncByteStream`, `httpcore.SyncByteStream` without type conflicts.
|
| 603 |
+
|
| 604 |
+
## 0.8.0 (April 30th, 2020)
|
| 605 |
+
|
| 606 |
+
### Fixed
|
| 607 |
+
|
| 608 |
+
- Fixed tunnel proxy support.
|
| 609 |
+
|
| 610 |
+
### Added
|
| 611 |
+
|
| 612 |
+
- New `TimeoutException` base class.
|
| 613 |
+
|
| 614 |
+
## 0.7.0 (March 5th, 2020)
|
| 615 |
+
|
| 616 |
+
- First integration with HTTPX.
|
.venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/RECORD
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
httpcore-1.0.7.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 2 |
+
httpcore-1.0.7.dist-info/METADATA,sha256=ATe1rdfnyvJCveGq1xl8q7B27Suta1I2xVcfYU-my4M,21265
|
| 3 |
+
httpcore-1.0.7.dist-info/RECORD,,
|
| 4 |
+
httpcore-1.0.7.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
| 5 |
+
httpcore-1.0.7.dist-info/licenses/LICENSE.md,sha256=_ctZFUx0y6uhahEkL3dAvqnyPW_rVUeRfYxflKgDkqU,1518
|
| 6 |
+
httpcore/__init__.py,sha256=LrhuDP3kqwQW-464qRK_Q7B72Zp0LklpkEqbqUHAh2E,3357
|
| 7 |
+
httpcore/__pycache__/__init__.cpython-311.pyc,,
|
| 8 |
+
httpcore/__pycache__/_api.cpython-311.pyc,,
|
| 9 |
+
httpcore/__pycache__/_exceptions.cpython-311.pyc,,
|
| 10 |
+
httpcore/__pycache__/_models.cpython-311.pyc,,
|
| 11 |
+
httpcore/__pycache__/_ssl.cpython-311.pyc,,
|
| 12 |
+
httpcore/__pycache__/_synchronization.cpython-311.pyc,,
|
| 13 |
+
httpcore/__pycache__/_trace.cpython-311.pyc,,
|
| 14 |
+
httpcore/__pycache__/_utils.cpython-311.pyc,,
|
| 15 |
+
httpcore/_api.py,sha256=unZmeDschBWCGCPCwkS3Wot9euK6bg_kKxLtGTxw214,3146
|
| 16 |
+
httpcore/_async/__init__.py,sha256=EWdl2v4thnAHzJpqjU4h2a8DUiGAvNiWrkii9pfhTf0,1221
|
| 17 |
+
httpcore/_async/__pycache__/__init__.cpython-311.pyc,,
|
| 18 |
+
httpcore/_async/__pycache__/connection.cpython-311.pyc,,
|
| 19 |
+
httpcore/_async/__pycache__/connection_pool.cpython-311.pyc,,
|
| 20 |
+
httpcore/_async/__pycache__/http11.cpython-311.pyc,,
|
| 21 |
+
httpcore/_async/__pycache__/http2.cpython-311.pyc,,
|
| 22 |
+
httpcore/_async/__pycache__/http_proxy.cpython-311.pyc,,
|
| 23 |
+
httpcore/_async/__pycache__/interfaces.cpython-311.pyc,,
|
| 24 |
+
httpcore/_async/__pycache__/socks_proxy.cpython-311.pyc,,
|
| 25 |
+
httpcore/_async/connection.py,sha256=6OcPXqMEfc0BU38_-iHUNDd1vKSTc2UVT09XqNb_BOk,8449
|
| 26 |
+
httpcore/_async/connection_pool.py,sha256=DOIQ2s2ZCf9qfwxhzMprTPLqCL8OxGXiKF6qRHxvVyY,17307
|
| 27 |
+
httpcore/_async/http11.py,sha256=-qM9bV7PjSQF5vxs37-eUXOIFwbIjPcZbNliuX9TtBw,13880
|
| 28 |
+
httpcore/_async/http2.py,sha256=2mPEUDu8jwx99MVDhDKBu1e8ajCVEkBOu1jUQLk0KR8,23648
|
| 29 |
+
httpcore/_async/http_proxy.py,sha256=2zVkrlv-Ds-rWGaqaXlrhEJiAQFPo23BT3Gq_sWoBXU,14701
|
| 30 |
+
httpcore/_async/interfaces.py,sha256=jTiaWL83pgpGC9ziv90ZfwaKNMmHwmOalzaKiuTxATo,4455
|
| 31 |
+
httpcore/_async/socks_proxy.py,sha256=lLKgLlggPfhFlqi0ODeBkOWvt9CghBBUyqsnsU1tx6Q,13841
|
| 32 |
+
httpcore/_backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
| 33 |
+
httpcore/_backends/__pycache__/__init__.cpython-311.pyc,,
|
| 34 |
+
httpcore/_backends/__pycache__/anyio.cpython-311.pyc,,
|
| 35 |
+
httpcore/_backends/__pycache__/auto.cpython-311.pyc,,
|
| 36 |
+
httpcore/_backends/__pycache__/base.cpython-311.pyc,,
|
| 37 |
+
httpcore/_backends/__pycache__/mock.cpython-311.pyc,,
|
| 38 |
+
httpcore/_backends/__pycache__/sync.cpython-311.pyc,,
|
| 39 |
+
httpcore/_backends/__pycache__/trio.cpython-311.pyc,,
|
| 40 |
+
httpcore/_backends/anyio.py,sha256=x8PgEhXRC8bVqsdzk_YJx8Y6d9Tub06CuUSwnbmtqoY,5252
|
| 41 |
+
httpcore/_backends/auto.py,sha256=zO136PKZmsaTDK-HRk84eA-MUg8_2wJf4NvmK432Aio,1662
|
| 42 |
+
httpcore/_backends/base.py,sha256=aShgRdZnMmRhFWHetjumlM73f8Kz1YOAyCUP_4kHslA,3042
|
| 43 |
+
httpcore/_backends/mock.py,sha256=er9T436uSe7NLrfiLa4x6Nuqg5ivQ693CxWYCWsgbH4,4077
|
| 44 |
+
httpcore/_backends/sync.py,sha256=bhE4d9iK9Umxdsdsgm2EfKnXaBms2WggGYU-7jmUujU,7977
|
| 45 |
+
httpcore/_backends/trio.py,sha256=LHu4_Mr5MswQmmT3yE4oLgf9b_JJfeVS4BjDxeJc7Ro,5996
|
| 46 |
+
httpcore/_exceptions.py,sha256=looCKga3_YVYu3s-d3L9RMPRJyhsY7fiuuGxvkOD0c0,1184
|
| 47 |
+
httpcore/_models.py,sha256=IO2CcXcdpovRcLTdGFGB6RyBZdEm2h_TOmoCc4rEKho,17623
|
| 48 |
+
httpcore/_ssl.py,sha256=srqmSNU4iOUvWF-SrJvb8G_YEbHFELOXQOwdDIBTS9c,187
|
| 49 |
+
httpcore/_sync/__init__.py,sha256=JBDIgXt5la1LCJ1sLQeKhjKFpLnpNr8Svs6z2ni3fgg,1141
|
| 50 |
+
httpcore/_sync/__pycache__/__init__.cpython-311.pyc,,
|
| 51 |
+
httpcore/_sync/__pycache__/connection.cpython-311.pyc,,
|
| 52 |
+
httpcore/_sync/__pycache__/connection_pool.cpython-311.pyc,,
|
| 53 |
+
httpcore/_sync/__pycache__/http11.cpython-311.pyc,,
|
| 54 |
+
httpcore/_sync/__pycache__/http2.cpython-311.pyc,,
|
| 55 |
+
httpcore/_sync/__pycache__/http_proxy.cpython-311.pyc,,
|
| 56 |
+
httpcore/_sync/__pycache__/interfaces.cpython-311.pyc,,
|
| 57 |
+
httpcore/_sync/__pycache__/socks_proxy.cpython-311.pyc,,
|
| 58 |
+
httpcore/_sync/connection.py,sha256=9exGOb3PB-Mp2T1-sckSeL2t-tJ_9-NXomV8ihmWCgU,8238
|
| 59 |
+
httpcore/_sync/connection_pool.py,sha256=a-T8LTsUxc7r0Ww1atfHSDoWPjQ0fA8Ul7S3-F0Mj70,16955
|
| 60 |
+
httpcore/_sync/http11.py,sha256=IFobD1Md5JFlJGKWnh1_Q3epikUryI8qo09v8MiJIEA,13476
|
| 61 |
+
httpcore/_sync/http2.py,sha256=IZOBL1nNpOKJYwTSHYWtscD3zjSg8f85-63-o5RedVc,23112
|
| 62 |
+
httpcore/_sync/http_proxy.py,sha256=_al_6crKuEZu2wyvu493RZImJdBJnj5oGKNjLOJL2Zo,14463
|
| 63 |
+
httpcore/_sync/interfaces.py,sha256=snXON42vUDHO5JBJvo8D4VWk2Wat44z2OXXHDrjbl94,4344
|
| 64 |
+
httpcore/_sync/socks_proxy.py,sha256=zegZW9Snqj2_992DFJa8_CppOVBkVL4AgwduRkStakQ,13614
|
| 65 |
+
httpcore/_synchronization.py,sha256=zSi13mAColBnknjZBknUC6hKNDQT4C6ijnezZ-r0T2s,9434
|
| 66 |
+
httpcore/_trace.py,sha256=ck6ZoIzYTkdNAIfq5MGeKqBXDtqjOX-qfYwmZFbrGco,3952
|
| 67 |
+
httpcore/_utils.py,sha256=_RLgXYOAYC350ikALV59GZ68IJrdocRZxPs9PjmzdFY,1537
|
| 68 |
+
httpcore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
.venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/WHEEL
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Wheel-Version: 1.0
|
| 2 |
+
Generator: hatchling 1.26.3
|
| 3 |
+
Root-Is-Purelib: true
|
| 4 |
+
Tag: py3-none-any
|
.venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/licenses/LICENSE.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Copyright © 2020, [Encode OSS Ltd](https://www.encode.io/).
|
| 2 |
+
All rights reserved.
|
| 3 |
+
|
| 4 |
+
Redistribution and use in source and binary forms, with or without
|
| 5 |
+
modification, are permitted provided that the following conditions are met:
|
| 6 |
+
|
| 7 |
+
* Redistributions of source code must retain the above copyright notice, this
|
| 8 |
+
list of conditions and the following disclaimer.
|
| 9 |
+
|
| 10 |
+
* Redistributions in binary form must reproduce the above copyright notice,
|
| 11 |
+
this list of conditions and the following disclaimer in the documentation
|
| 12 |
+
and/or other materials provided with the distribution.
|
| 13 |
+
|
| 14 |
+
* Neither the name of the copyright holder nor the names of its
|
| 15 |
+
contributors may be used to endorse or promote products derived from
|
| 16 |
+
this software without specific prior written permission.
|
| 17 |
+
|
| 18 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
| 19 |
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| 20 |
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
| 21 |
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
| 22 |
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
| 23 |
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
| 24 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
| 25 |
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
| 26 |
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| 27 |
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.venv/lib/python3.11/site-packages/httpcore/_backends/__init__.py
ADDED
|
File without changes
|
.venv/lib/python3.11/site-packages/httpcore/_backends/__pycache__/auto.cpython-311.pyc
ADDED
|
Binary file (2.87 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/httpcore/_backends/__pycache__/base.cpython-311.pyc
ADDED
|
Binary file (5.31 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/httpcore/_backends/__pycache__/mock.cpython-311.pyc
ADDED
|
Binary file (8.02 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/httpcore/_backends/__pycache__/sync.cpython-311.pyc
ADDED
|
Binary file (12.7 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/httpcore/_backends/anyio.py
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import ssl
|
| 4 |
+
import typing
|
| 5 |
+
|
| 6 |
+
import anyio
|
| 7 |
+
|
| 8 |
+
from .._exceptions import (
|
| 9 |
+
ConnectError,
|
| 10 |
+
ConnectTimeout,
|
| 11 |
+
ReadError,
|
| 12 |
+
ReadTimeout,
|
| 13 |
+
WriteError,
|
| 14 |
+
WriteTimeout,
|
| 15 |
+
map_exceptions,
|
| 16 |
+
)
|
| 17 |
+
from .._utils import is_socket_readable
|
| 18 |
+
from .base import SOCKET_OPTION, AsyncNetworkBackend, AsyncNetworkStream
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
class AnyIOStream(AsyncNetworkStream):
|
| 22 |
+
def __init__(self, stream: anyio.abc.ByteStream) -> None:
|
| 23 |
+
self._stream = stream
|
| 24 |
+
|
| 25 |
+
async def read(self, max_bytes: int, timeout: float | None = None) -> bytes:
|
| 26 |
+
exc_map = {
|
| 27 |
+
TimeoutError: ReadTimeout,
|
| 28 |
+
anyio.BrokenResourceError: ReadError,
|
| 29 |
+
anyio.ClosedResourceError: ReadError,
|
| 30 |
+
anyio.EndOfStream: ReadError,
|
| 31 |
+
}
|
| 32 |
+
with map_exceptions(exc_map):
|
| 33 |
+
with anyio.fail_after(timeout):
|
| 34 |
+
try:
|
| 35 |
+
return await self._stream.receive(max_bytes=max_bytes)
|
| 36 |
+
except anyio.EndOfStream: # pragma: nocover
|
| 37 |
+
return b""
|
| 38 |
+
|
| 39 |
+
async def write(self, buffer: bytes, timeout: float | None = None) -> None:
|
| 40 |
+
if not buffer:
|
| 41 |
+
return
|
| 42 |
+
|
| 43 |
+
exc_map = {
|
| 44 |
+
TimeoutError: WriteTimeout,
|
| 45 |
+
anyio.BrokenResourceError: WriteError,
|
| 46 |
+
anyio.ClosedResourceError: WriteError,
|
| 47 |
+
}
|
| 48 |
+
with map_exceptions(exc_map):
|
| 49 |
+
with anyio.fail_after(timeout):
|
| 50 |
+
await self._stream.send(item=buffer)
|
| 51 |
+
|
| 52 |
+
async def aclose(self) -> None:
|
| 53 |
+
await self._stream.aclose()
|
| 54 |
+
|
| 55 |
+
async def start_tls(
|
| 56 |
+
self,
|
| 57 |
+
ssl_context: ssl.SSLContext,
|
| 58 |
+
server_hostname: str | None = None,
|
| 59 |
+
timeout: float | None = None,
|
| 60 |
+
) -> AsyncNetworkStream:
|
| 61 |
+
exc_map = {
|
| 62 |
+
TimeoutError: ConnectTimeout,
|
| 63 |
+
anyio.BrokenResourceError: ConnectError,
|
| 64 |
+
anyio.EndOfStream: ConnectError,
|
| 65 |
+
ssl.SSLError: ConnectError,
|
| 66 |
+
}
|
| 67 |
+
with map_exceptions(exc_map):
|
| 68 |
+
try:
|
| 69 |
+
with anyio.fail_after(timeout):
|
| 70 |
+
ssl_stream = await anyio.streams.tls.TLSStream.wrap(
|
| 71 |
+
self._stream,
|
| 72 |
+
ssl_context=ssl_context,
|
| 73 |
+
hostname=server_hostname,
|
| 74 |
+
standard_compatible=False,
|
| 75 |
+
server_side=False,
|
| 76 |
+
)
|
| 77 |
+
except Exception as exc: # pragma: nocover
|
| 78 |
+
await self.aclose()
|
| 79 |
+
raise exc
|
| 80 |
+
return AnyIOStream(ssl_stream)
|
| 81 |
+
|
| 82 |
+
def get_extra_info(self, info: str) -> typing.Any:
|
| 83 |
+
if info == "ssl_object":
|
| 84 |
+
return self._stream.extra(anyio.streams.tls.TLSAttribute.ssl_object, None)
|
| 85 |
+
if info == "client_addr":
|
| 86 |
+
return self._stream.extra(anyio.abc.SocketAttribute.local_address, None)
|
| 87 |
+
if info == "server_addr":
|
| 88 |
+
return self._stream.extra(anyio.abc.SocketAttribute.remote_address, None)
|
| 89 |
+
if info == "socket":
|
| 90 |
+
return self._stream.extra(anyio.abc.SocketAttribute.raw_socket, None)
|
| 91 |
+
if info == "is_readable":
|
| 92 |
+
sock = self._stream.extra(anyio.abc.SocketAttribute.raw_socket, None)
|
| 93 |
+
return is_socket_readable(sock)
|
| 94 |
+
return None
|
| 95 |
+
|
| 96 |
+
|
| 97 |
+
class AnyIOBackend(AsyncNetworkBackend):
|
| 98 |
+
async def connect_tcp(
|
| 99 |
+
self,
|
| 100 |
+
host: str,
|
| 101 |
+
port: int,
|
| 102 |
+
timeout: float | None = None,
|
| 103 |
+
local_address: str | None = None,
|
| 104 |
+
socket_options: typing.Iterable[SOCKET_OPTION] | None = None,
|
| 105 |
+
) -> AsyncNetworkStream: # pragma: nocover
|
| 106 |
+
if socket_options is None:
|
| 107 |
+
socket_options = []
|
| 108 |
+
exc_map = {
|
| 109 |
+
TimeoutError: ConnectTimeout,
|
| 110 |
+
OSError: ConnectError,
|
| 111 |
+
anyio.BrokenResourceError: ConnectError,
|
| 112 |
+
}
|
| 113 |
+
with map_exceptions(exc_map):
|
| 114 |
+
with anyio.fail_after(timeout):
|
| 115 |
+
stream: anyio.abc.ByteStream = await anyio.connect_tcp(
|
| 116 |
+
remote_host=host,
|
| 117 |
+
remote_port=port,
|
| 118 |
+
local_host=local_address,
|
| 119 |
+
)
|
| 120 |
+
# By default TCP sockets opened in `asyncio` include TCP_NODELAY.
|
| 121 |
+
for option in socket_options:
|
| 122 |
+
stream._raw_socket.setsockopt(*option) # type: ignore[attr-defined] # pragma: no cover
|
| 123 |
+
return AnyIOStream(stream)
|
| 124 |
+
|
| 125 |
+
async def connect_unix_socket(
|
| 126 |
+
self,
|
| 127 |
+
path: str,
|
| 128 |
+
timeout: float | None = None,
|
| 129 |
+
socket_options: typing.Iterable[SOCKET_OPTION] | None = None,
|
| 130 |
+
) -> AsyncNetworkStream: # pragma: nocover
|
| 131 |
+
if socket_options is None:
|
| 132 |
+
socket_options = []
|
| 133 |
+
exc_map = {
|
| 134 |
+
TimeoutError: ConnectTimeout,
|
| 135 |
+
OSError: ConnectError,
|
| 136 |
+
anyio.BrokenResourceError: ConnectError,
|
| 137 |
+
}
|
| 138 |
+
with map_exceptions(exc_map):
|
| 139 |
+
with anyio.fail_after(timeout):
|
| 140 |
+
stream: anyio.abc.ByteStream = await anyio.connect_unix(path)
|
| 141 |
+
for option in socket_options:
|
| 142 |
+
stream._raw_socket.setsockopt(*option) # type: ignore[attr-defined] # pragma: no cover
|
| 143 |
+
return AnyIOStream(stream)
|
| 144 |
+
|
| 145 |
+
async def sleep(self, seconds: float) -> None:
|
| 146 |
+
await anyio.sleep(seconds) # pragma: nocover
|
.venv/lib/python3.11/site-packages/httpcore/_backends/base.py
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import ssl
|
| 4 |
+
import time
|
| 5 |
+
import typing
|
| 6 |
+
|
| 7 |
+
SOCKET_OPTION = typing.Union[
|
| 8 |
+
typing.Tuple[int, int, int],
|
| 9 |
+
typing.Tuple[int, int, typing.Union[bytes, bytearray]],
|
| 10 |
+
typing.Tuple[int, int, None, int],
|
| 11 |
+
]
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
class NetworkStream:
|
| 15 |
+
def read(self, max_bytes: int, timeout: float | None = None) -> bytes:
|
| 16 |
+
raise NotImplementedError() # pragma: nocover
|
| 17 |
+
|
| 18 |
+
def write(self, buffer: bytes, timeout: float | None = None) -> None:
|
| 19 |
+
raise NotImplementedError() # pragma: nocover
|
| 20 |
+
|
| 21 |
+
def close(self) -> None:
|
| 22 |
+
raise NotImplementedError() # pragma: nocover
|
| 23 |
+
|
| 24 |
+
def start_tls(
|
| 25 |
+
self,
|
| 26 |
+
ssl_context: ssl.SSLContext,
|
| 27 |
+
server_hostname: str | None = None,
|
| 28 |
+
timeout: float | None = None,
|
| 29 |
+
) -> NetworkStream:
|
| 30 |
+
raise NotImplementedError() # pragma: nocover
|
| 31 |
+
|
| 32 |
+
def get_extra_info(self, info: str) -> typing.Any:
|
| 33 |
+
return None # pragma: nocover
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
class NetworkBackend:
|
| 37 |
+
def connect_tcp(
|
| 38 |
+
self,
|
| 39 |
+
host: str,
|
| 40 |
+
port: int,
|
| 41 |
+
timeout: float | None = None,
|
| 42 |
+
local_address: str | None = None,
|
| 43 |
+
socket_options: typing.Iterable[SOCKET_OPTION] | None = None,
|
| 44 |
+
) -> NetworkStream:
|
| 45 |
+
raise NotImplementedError() # pragma: nocover
|
| 46 |
+
|
| 47 |
+
def connect_unix_socket(
|
| 48 |
+
self,
|
| 49 |
+
path: str,
|
| 50 |
+
timeout: float | None = None,
|
| 51 |
+
socket_options: typing.Iterable[SOCKET_OPTION] | None = None,
|
| 52 |
+
) -> NetworkStream:
|
| 53 |
+
raise NotImplementedError() # pragma: nocover
|
| 54 |
+
|
| 55 |
+
def sleep(self, seconds: float) -> None:
|
| 56 |
+
time.sleep(seconds) # pragma: nocover
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
class AsyncNetworkStream:
|
| 60 |
+
async def read(self, max_bytes: int, timeout: float | None = None) -> bytes:
|
| 61 |
+
raise NotImplementedError() # pragma: nocover
|
| 62 |
+
|
| 63 |
+
async def write(self, buffer: bytes, timeout: float | None = None) -> None:
|
| 64 |
+
raise NotImplementedError() # pragma: nocover
|
| 65 |
+
|
| 66 |
+
async def aclose(self) -> None:
|
| 67 |
+
raise NotImplementedError() # pragma: nocover
|
| 68 |
+
|
| 69 |
+
async def start_tls(
|
| 70 |
+
self,
|
| 71 |
+
ssl_context: ssl.SSLContext,
|
| 72 |
+
server_hostname: str | None = None,
|
| 73 |
+
timeout: float | None = None,
|
| 74 |
+
) -> AsyncNetworkStream:
|
| 75 |
+
raise NotImplementedError() # pragma: nocover
|
| 76 |
+
|
| 77 |
+
def get_extra_info(self, info: str) -> typing.Any:
|
| 78 |
+
return None # pragma: nocover
|
| 79 |
+
|
| 80 |
+
|
| 81 |
+
class AsyncNetworkBackend:
|
| 82 |
+
async def connect_tcp(
|
| 83 |
+
self,
|
| 84 |
+
host: str,
|
| 85 |
+
port: int,
|
| 86 |
+
timeout: float | None = None,
|
| 87 |
+
local_address: str | None = None,
|
| 88 |
+
socket_options: typing.Iterable[SOCKET_OPTION] | None = None,
|
| 89 |
+
) -> AsyncNetworkStream:
|
| 90 |
+
raise NotImplementedError() # pragma: nocover
|
| 91 |
+
|
| 92 |
+
async def connect_unix_socket(
|
| 93 |
+
self,
|
| 94 |
+
path: str,
|
| 95 |
+
timeout: float | None = None,
|
| 96 |
+
socket_options: typing.Iterable[SOCKET_OPTION] | None = None,
|
| 97 |
+
) -> AsyncNetworkStream:
|
| 98 |
+
raise NotImplementedError() # pragma: nocover
|
| 99 |
+
|
| 100 |
+
async def sleep(self, seconds: float) -> None:
|
| 101 |
+
raise NotImplementedError() # pragma: nocover
|
.venv/lib/python3.11/site-packages/httpcore/_ssl.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import ssl
|
| 2 |
+
|
| 3 |
+
import certifi
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
def default_ssl_context() -> ssl.SSLContext:
|
| 7 |
+
context = ssl.create_default_context()
|
| 8 |
+
context.load_verify_locations(certifi.where())
|
| 9 |
+
return context
|
.venv/lib/python3.11/site-packages/httpcore/_synchronization.py
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import threading
|
| 4 |
+
import types
|
| 5 |
+
|
| 6 |
+
from ._exceptions import ExceptionMapping, PoolTimeout, map_exceptions
|
| 7 |
+
|
| 8 |
+
# Our async synchronization primatives use either 'anyio' or 'trio' depending
|
| 9 |
+
# on if they're running under asyncio or trio.
|
| 10 |
+
|
| 11 |
+
try:
|
| 12 |
+
import trio
|
| 13 |
+
except (ImportError, NotImplementedError): # pragma: nocover
|
| 14 |
+
trio = None # type: ignore
|
| 15 |
+
|
| 16 |
+
try:
|
| 17 |
+
import anyio
|
| 18 |
+
except ImportError: # pragma: nocover
|
| 19 |
+
anyio = None # type: ignore
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
def current_async_library() -> str:
|
| 23 |
+
# Determine if we're running under trio or asyncio.
|
| 24 |
+
# See https://sniffio.readthedocs.io/en/latest/
|
| 25 |
+
try:
|
| 26 |
+
import sniffio
|
| 27 |
+
except ImportError: # pragma: nocover
|
| 28 |
+
environment = "asyncio"
|
| 29 |
+
else:
|
| 30 |
+
environment = sniffio.current_async_library()
|
| 31 |
+
|
| 32 |
+
if environment not in ("asyncio", "trio"): # pragma: nocover
|
| 33 |
+
raise RuntimeError("Running under an unsupported async environment.")
|
| 34 |
+
|
| 35 |
+
if environment == "asyncio" and anyio is None: # pragma: nocover
|
| 36 |
+
raise RuntimeError(
|
| 37 |
+
"Running with asyncio requires installation of 'httpcore[asyncio]'."
|
| 38 |
+
)
|
| 39 |
+
|
| 40 |
+
if environment == "trio" and trio is None: # pragma: nocover
|
| 41 |
+
raise RuntimeError(
|
| 42 |
+
"Running with trio requires installation of 'httpcore[trio]'."
|
| 43 |
+
)
|
| 44 |
+
|
| 45 |
+
return environment
|
| 46 |
+
|
| 47 |
+
|
| 48 |
+
class AsyncLock:
|
| 49 |
+
"""
|
| 50 |
+
This is a standard lock.
|
| 51 |
+
|
| 52 |
+
In the sync case `Lock` provides thread locking.
|
| 53 |
+
In the async case `AsyncLock` provides async locking.
|
| 54 |
+
"""
|
| 55 |
+
|
| 56 |
+
def __init__(self) -> None:
|
| 57 |
+
self._backend = ""
|
| 58 |
+
|
| 59 |
+
def setup(self) -> None:
|
| 60 |
+
"""
|
| 61 |
+
Detect if we're running under 'asyncio' or 'trio' and create
|
| 62 |
+
a lock with the correct implementation.
|
| 63 |
+
"""
|
| 64 |
+
self._backend = current_async_library()
|
| 65 |
+
if self._backend == "trio":
|
| 66 |
+
self._trio_lock = trio.Lock()
|
| 67 |
+
elif self._backend == "asyncio":
|
| 68 |
+
self._anyio_lock = anyio.Lock()
|
| 69 |
+
|
| 70 |
+
async def __aenter__(self) -> AsyncLock:
|
| 71 |
+
if not self._backend:
|
| 72 |
+
self.setup()
|
| 73 |
+
|
| 74 |
+
if self._backend == "trio":
|
| 75 |
+
await self._trio_lock.acquire()
|
| 76 |
+
elif self._backend == "asyncio":
|
| 77 |
+
await self._anyio_lock.acquire()
|
| 78 |
+
|
| 79 |
+
return self
|
| 80 |
+
|
| 81 |
+
async def __aexit__(
|
| 82 |
+
self,
|
| 83 |
+
exc_type: type[BaseException] | None = None,
|
| 84 |
+
exc_value: BaseException | None = None,
|
| 85 |
+
traceback: types.TracebackType | None = None,
|
| 86 |
+
) -> None:
|
| 87 |
+
if self._backend == "trio":
|
| 88 |
+
self._trio_lock.release()
|
| 89 |
+
elif self._backend == "asyncio":
|
| 90 |
+
self._anyio_lock.release()
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
class AsyncThreadLock:
|
| 94 |
+
"""
|
| 95 |
+
This is a threading-only lock for no-I/O contexts.
|
| 96 |
+
|
| 97 |
+
In the sync case `ThreadLock` provides thread locking.
|
| 98 |
+
In the async case `AsyncThreadLock` is a no-op.
|
| 99 |
+
"""
|
| 100 |
+
|
| 101 |
+
def __enter__(self) -> AsyncThreadLock:
|
| 102 |
+
return self
|
| 103 |
+
|
| 104 |
+
def __exit__(
|
| 105 |
+
self,
|
| 106 |
+
exc_type: type[BaseException] | None = None,
|
| 107 |
+
exc_value: BaseException | None = None,
|
| 108 |
+
traceback: types.TracebackType | None = None,
|
| 109 |
+
) -> None:
|
| 110 |
+
pass
|
| 111 |
+
|
| 112 |
+
|
| 113 |
+
class AsyncEvent:
|
| 114 |
+
def __init__(self) -> None:
|
| 115 |
+
self._backend = ""
|
| 116 |
+
|
| 117 |
+
def setup(self) -> None:
|
| 118 |
+
"""
|
| 119 |
+
Detect if we're running under 'asyncio' or 'trio' and create
|
| 120 |
+
a lock with the correct implementation.
|
| 121 |
+
"""
|
| 122 |
+
self._backend = current_async_library()
|
| 123 |
+
if self._backend == "trio":
|
| 124 |
+
self._trio_event = trio.Event()
|
| 125 |
+
elif self._backend == "asyncio":
|
| 126 |
+
self._anyio_event = anyio.Event()
|
| 127 |
+
|
| 128 |
+
def set(self) -> None:
|
| 129 |
+
if not self._backend:
|
| 130 |
+
self.setup()
|
| 131 |
+
|
| 132 |
+
if self._backend == "trio":
|
| 133 |
+
self._trio_event.set()
|
| 134 |
+
elif self._backend == "asyncio":
|
| 135 |
+
self._anyio_event.set()
|
| 136 |
+
|
| 137 |
+
async def wait(self, timeout: float | None = None) -> None:
|
| 138 |
+
if not self._backend:
|
| 139 |
+
self.setup()
|
| 140 |
+
|
| 141 |
+
if self._backend == "trio":
|
| 142 |
+
trio_exc_map: ExceptionMapping = {trio.TooSlowError: PoolTimeout}
|
| 143 |
+
timeout_or_inf = float("inf") if timeout is None else timeout
|
| 144 |
+
with map_exceptions(trio_exc_map):
|
| 145 |
+
with trio.fail_after(timeout_or_inf):
|
| 146 |
+
await self._trio_event.wait()
|
| 147 |
+
elif self._backend == "asyncio":
|
| 148 |
+
anyio_exc_map: ExceptionMapping = {TimeoutError: PoolTimeout}
|
| 149 |
+
with map_exceptions(anyio_exc_map):
|
| 150 |
+
with anyio.fail_after(timeout):
|
| 151 |
+
await self._anyio_event.wait()
|
| 152 |
+
|
| 153 |
+
|
| 154 |
+
class AsyncSemaphore:
|
| 155 |
+
def __init__(self, bound: int) -> None:
|
| 156 |
+
self._bound = bound
|
| 157 |
+
self._backend = ""
|
| 158 |
+
|
| 159 |
+
def setup(self) -> None:
|
| 160 |
+
"""
|
| 161 |
+
Detect if we're running under 'asyncio' or 'trio' and create
|
| 162 |
+
a semaphore with the correct implementation.
|
| 163 |
+
"""
|
| 164 |
+
self._backend = current_async_library()
|
| 165 |
+
if self._backend == "trio":
|
| 166 |
+
self._trio_semaphore = trio.Semaphore(
|
| 167 |
+
initial_value=self._bound, max_value=self._bound
|
| 168 |
+
)
|
| 169 |
+
elif self._backend == "asyncio":
|
| 170 |
+
self._anyio_semaphore = anyio.Semaphore(
|
| 171 |
+
initial_value=self._bound, max_value=self._bound
|
| 172 |
+
)
|
| 173 |
+
|
| 174 |
+
async def acquire(self) -> None:
|
| 175 |
+
if not self._backend:
|
| 176 |
+
self.setup()
|
| 177 |
+
|
| 178 |
+
if self._backend == "trio":
|
| 179 |
+
await self._trio_semaphore.acquire()
|
| 180 |
+
elif self._backend == "asyncio":
|
| 181 |
+
await self._anyio_semaphore.acquire()
|
| 182 |
+
|
| 183 |
+
async def release(self) -> None:
|
| 184 |
+
if self._backend == "trio":
|
| 185 |
+
self._trio_semaphore.release()
|
| 186 |
+
elif self._backend == "asyncio":
|
| 187 |
+
self._anyio_semaphore.release()
|
| 188 |
+
|
| 189 |
+
|
| 190 |
+
class AsyncShieldCancellation:
|
| 191 |
+
# For certain portions of our codebase where we're dealing with
|
| 192 |
+
# closing connections during exception handling we want to shield
|
| 193 |
+
# the operation from being cancelled.
|
| 194 |
+
#
|
| 195 |
+
# with AsyncShieldCancellation():
|
| 196 |
+
# ... # clean-up operations, shielded from cancellation.
|
| 197 |
+
|
| 198 |
+
def __init__(self) -> None:
|
| 199 |
+
"""
|
| 200 |
+
Detect if we're running under 'asyncio' or 'trio' and create
|
| 201 |
+
a shielded scope with the correct implementation.
|
| 202 |
+
"""
|
| 203 |
+
self._backend = current_async_library()
|
| 204 |
+
|
| 205 |
+
if self._backend == "trio":
|
| 206 |
+
self._trio_shield = trio.CancelScope(shield=True)
|
| 207 |
+
elif self._backend == "asyncio":
|
| 208 |
+
self._anyio_shield = anyio.CancelScope(shield=True)
|
| 209 |
+
|
| 210 |
+
def __enter__(self) -> AsyncShieldCancellation:
|
| 211 |
+
if self._backend == "trio":
|
| 212 |
+
self._trio_shield.__enter__()
|
| 213 |
+
elif self._backend == "asyncio":
|
| 214 |
+
self._anyio_shield.__enter__()
|
| 215 |
+
return self
|
| 216 |
+
|
| 217 |
+
def __exit__(
|
| 218 |
+
self,
|
| 219 |
+
exc_type: type[BaseException] | None = None,
|
| 220 |
+
exc_value: BaseException | None = None,
|
| 221 |
+
traceback: types.TracebackType | None = None,
|
| 222 |
+
) -> None:
|
| 223 |
+
if self._backend == "trio":
|
| 224 |
+
self._trio_shield.__exit__(exc_type, exc_value, traceback)
|
| 225 |
+
elif self._backend == "asyncio":
|
| 226 |
+
self._anyio_shield.__exit__(exc_type, exc_value, traceback)
|
| 227 |
+
|
| 228 |
+
|
| 229 |
+
# Our thread-based synchronization primitives...
|
| 230 |
+
|
| 231 |
+
|
| 232 |
+
class Lock:
|
| 233 |
+
"""
|
| 234 |
+
This is a standard lock.
|
| 235 |
+
|
| 236 |
+
In the sync case `Lock` provides thread locking.
|
| 237 |
+
In the async case `AsyncLock` provides async locking.
|
| 238 |
+
"""
|
| 239 |
+
|
| 240 |
+
def __init__(self) -> None:
|
| 241 |
+
self._lock = threading.Lock()
|
| 242 |
+
|
| 243 |
+
def __enter__(self) -> Lock:
|
| 244 |
+
self._lock.acquire()
|
| 245 |
+
return self
|
| 246 |
+
|
| 247 |
+
def __exit__(
|
| 248 |
+
self,
|
| 249 |
+
exc_type: type[BaseException] | None = None,
|
| 250 |
+
exc_value: BaseException | None = None,
|
| 251 |
+
traceback: types.TracebackType | None = None,
|
| 252 |
+
) -> None:
|
| 253 |
+
self._lock.release()
|
| 254 |
+
|
| 255 |
+
|
| 256 |
+
class ThreadLock:
|
| 257 |
+
"""
|
| 258 |
+
This is a threading-only lock for no-I/O contexts.
|
| 259 |
+
|
| 260 |
+
In the sync case `ThreadLock` provides thread locking.
|
| 261 |
+
In the async case `AsyncThreadLock` is a no-op.
|
| 262 |
+
"""
|
| 263 |
+
|
| 264 |
+
def __init__(self) -> None:
|
| 265 |
+
self._lock = threading.Lock()
|
| 266 |
+
|
| 267 |
+
def __enter__(self) -> ThreadLock:
|
| 268 |
+
self._lock.acquire()
|
| 269 |
+
return self
|
| 270 |
+
|
| 271 |
+
def __exit__(
|
| 272 |
+
self,
|
| 273 |
+
exc_type: type[BaseException] | None = None,
|
| 274 |
+
exc_value: BaseException | None = None,
|
| 275 |
+
traceback: types.TracebackType | None = None,
|
| 276 |
+
) -> None:
|
| 277 |
+
self._lock.release()
|
| 278 |
+
|
| 279 |
+
|
| 280 |
+
class Event:
|
| 281 |
+
def __init__(self) -> None:
|
| 282 |
+
self._event = threading.Event()
|
| 283 |
+
|
| 284 |
+
def set(self) -> None:
|
| 285 |
+
self._event.set()
|
| 286 |
+
|
| 287 |
+
def wait(self, timeout: float | None = None) -> None:
|
| 288 |
+
if timeout == float("inf"): # pragma: no cover
|
| 289 |
+
timeout = None
|
| 290 |
+
if not self._event.wait(timeout=timeout):
|
| 291 |
+
raise PoolTimeout() # pragma: nocover
|
| 292 |
+
|
| 293 |
+
|
| 294 |
+
class Semaphore:
|
| 295 |
+
def __init__(self, bound: int) -> None:
|
| 296 |
+
self._semaphore = threading.Semaphore(value=bound)
|
| 297 |
+
|
| 298 |
+
def acquire(self) -> None:
|
| 299 |
+
self._semaphore.acquire()
|
| 300 |
+
|
| 301 |
+
def release(self) -> None:
|
| 302 |
+
self._semaphore.release()
|
| 303 |
+
|
| 304 |
+
|
| 305 |
+
class ShieldCancellation:
|
| 306 |
+
# Thread-synchronous codebases don't support cancellation semantics.
|
| 307 |
+
# We have this class because we need to mirror the async and sync
|
| 308 |
+
# cases within our package, but it's just a no-op.
|
| 309 |
+
def __enter__(self) -> ShieldCancellation:
|
| 310 |
+
return self
|
| 311 |
+
|
| 312 |
+
def __exit__(
|
| 313 |
+
self,
|
| 314 |
+
exc_type: type[BaseException] | None = None,
|
| 315 |
+
exc_value: BaseException | None = None,
|
| 316 |
+
traceback: types.TracebackType | None = None,
|
| 317 |
+
) -> None:
|
| 318 |
+
pass
|
.venv/lib/python3.11/site-packages/httpcore/py.typed
ADDED
|
File without changes
|
.venv/lib/python3.11/site-packages/idna-3.10.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
.venv/lib/python3.11/site-packages/idna-3.10.dist-info/LICENSE.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
BSD 3-Clause License
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2013-2024, Kim Davies and contributors.
|
| 4 |
+
All rights reserved.
|
| 5 |
+
|
| 6 |
+
Redistribution and use in source and binary forms, with or without
|
| 7 |
+
modification, are permitted provided that the following conditions are
|
| 8 |
+
met:
|
| 9 |
+
|
| 10 |
+
1. Redistributions of source code must retain the above copyright
|
| 11 |
+
notice, this list of conditions and the following disclaimer.
|
| 12 |
+
|
| 13 |
+
2. Redistributions in binary form must reproduce the above copyright
|
| 14 |
+
notice, this list of conditions and the following disclaimer in the
|
| 15 |
+
documentation and/or other materials provided with the distribution.
|
| 16 |
+
|
| 17 |
+
3. Neither the name of the copyright holder nor the names of its
|
| 18 |
+
contributors may be used to endorse or promote products derived from
|
| 19 |
+
this software without specific prior written permission.
|
| 20 |
+
|
| 21 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| 22 |
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| 23 |
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| 24 |
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| 25 |
+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| 26 |
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
| 27 |
+
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| 28 |
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| 29 |
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| 30 |
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
| 31 |
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.venv/lib/python3.11/site-packages/idna-3.10.dist-info/METADATA
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.1
|
| 2 |
+
Name: idna
|
| 3 |
+
Version: 3.10
|
| 4 |
+
Summary: Internationalized Domain Names in Applications (IDNA)
|
| 5 |
+
Author-email: Kim Davies <kim+pypi@gumleaf.org>
|
| 6 |
+
Requires-Python: >=3.6
|
| 7 |
+
Description-Content-Type: text/x-rst
|
| 8 |
+
Classifier: Development Status :: 5 - Production/Stable
|
| 9 |
+
Classifier: Intended Audience :: Developers
|
| 10 |
+
Classifier: Intended Audience :: System Administrators
|
| 11 |
+
Classifier: License :: OSI Approved :: BSD License
|
| 12 |
+
Classifier: Operating System :: OS Independent
|
| 13 |
+
Classifier: Programming Language :: Python
|
| 14 |
+
Classifier: Programming Language :: Python :: 3
|
| 15 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
| 16 |
+
Classifier: Programming Language :: Python :: 3.6
|
| 17 |
+
Classifier: Programming Language :: Python :: 3.7
|
| 18 |
+
Classifier: Programming Language :: Python :: 3.8
|
| 19 |
+
Classifier: Programming Language :: Python :: 3.9
|
| 20 |
+
Classifier: Programming Language :: Python :: 3.10
|
| 21 |
+
Classifier: Programming Language :: Python :: 3.11
|
| 22 |
+
Classifier: Programming Language :: Python :: 3.12
|
| 23 |
+
Classifier: Programming Language :: Python :: 3.13
|
| 24 |
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
| 25 |
+
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
| 26 |
+
Classifier: Topic :: Internet :: Name Service (DNS)
|
| 27 |
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
| 28 |
+
Classifier: Topic :: Utilities
|
| 29 |
+
Requires-Dist: ruff >= 0.6.2 ; extra == "all"
|
| 30 |
+
Requires-Dist: mypy >= 1.11.2 ; extra == "all"
|
| 31 |
+
Requires-Dist: pytest >= 8.3.2 ; extra == "all"
|
| 32 |
+
Requires-Dist: flake8 >= 7.1.1 ; extra == "all"
|
| 33 |
+
Project-URL: Changelog, https://github.com/kjd/idna/blob/master/HISTORY.rst
|
| 34 |
+
Project-URL: Issue tracker, https://github.com/kjd/idna/issues
|
| 35 |
+
Project-URL: Source, https://github.com/kjd/idna
|
| 36 |
+
Provides-Extra: all
|
| 37 |
+
|
| 38 |
+
Internationalized Domain Names in Applications (IDNA)
|
| 39 |
+
=====================================================
|
| 40 |
+
|
| 41 |
+
Support for the Internationalized Domain Names in
|
| 42 |
+
Applications (IDNA) protocol as specified in `RFC 5891
|
| 43 |
+
<https://tools.ietf.org/html/rfc5891>`_. This is the latest version of
|
| 44 |
+
the protocol and is sometimes referred to as “IDNA 2008”.
|
| 45 |
+
|
| 46 |
+
This library also provides support for Unicode Technical
|
| 47 |
+
Standard 46, `Unicode IDNA Compatibility Processing
|
| 48 |
+
<https://unicode.org/reports/tr46/>`_.
|
| 49 |
+
|
| 50 |
+
This acts as a suitable replacement for the “encodings.idna”
|
| 51 |
+
module that comes with the Python standard library, but which
|
| 52 |
+
only supports the older superseded IDNA specification (`RFC 3490
|
| 53 |
+
<https://tools.ietf.org/html/rfc3490>`_).
|
| 54 |
+
|
| 55 |
+
Basic functions are simply executed:
|
| 56 |
+
|
| 57 |
+
.. code-block:: pycon
|
| 58 |
+
|
| 59 |
+
>>> import idna
|
| 60 |
+
>>> idna.encode('ドメイン.テスト')
|
| 61 |
+
b'xn--eckwd4c7c.xn--zckzah'
|
| 62 |
+
>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))
|
| 63 |
+
ドメイン.テスト
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
Installation
|
| 67 |
+
------------
|
| 68 |
+
|
| 69 |
+
This package is available for installation from PyPI:
|
| 70 |
+
|
| 71 |
+
.. code-block:: bash
|
| 72 |
+
|
| 73 |
+
$ python3 -m pip install idna
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
Usage
|
| 77 |
+
-----
|
| 78 |
+
|
| 79 |
+
For typical usage, the ``encode`` and ``decode`` functions will take a
|
| 80 |
+
domain name argument and perform a conversion to A-labels or U-labels
|
| 81 |
+
respectively.
|
| 82 |
+
|
| 83 |
+
.. code-block:: pycon
|
| 84 |
+
|
| 85 |
+
>>> import idna
|
| 86 |
+
>>> idna.encode('ドメイン.テスト')
|
| 87 |
+
b'xn--eckwd4c7c.xn--zckzah'
|
| 88 |
+
>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))
|
| 89 |
+
ドメイン.テスト
|
| 90 |
+
|
| 91 |
+
You may use the codec encoding and decoding methods using the
|
| 92 |
+
``idna.codec`` module:
|
| 93 |
+
|
| 94 |
+
.. code-block:: pycon
|
| 95 |
+
|
| 96 |
+
>>> import idna.codec
|
| 97 |
+
>>> print('домен.испытание'.encode('idna2008'))
|
| 98 |
+
b'xn--d1acufc.xn--80akhbyknj4f'
|
| 99 |
+
>>> print(b'xn--d1acufc.xn--80akhbyknj4f'.decode('idna2008'))
|
| 100 |
+
домен.испытание
|
| 101 |
+
|
| 102 |
+
Conversions can be applied at a per-label basis using the ``ulabel`` or
|
| 103 |
+
``alabel`` functions if necessary:
|
| 104 |
+
|
| 105 |
+
.. code-block:: pycon
|
| 106 |
+
|
| 107 |
+
>>> idna.alabel('测试')
|
| 108 |
+
b'xn--0zwm56d'
|
| 109 |
+
|
| 110 |
+
Compatibility Mapping (UTS #46)
|
| 111 |
+
+++++++++++++++++++++++++++++++
|
| 112 |
+
|
| 113 |
+
As described in `RFC 5895 <https://tools.ietf.org/html/rfc5895>`_, the
|
| 114 |
+
IDNA specification does not normalize input from different potential
|
| 115 |
+
ways a user may input a domain name. This functionality, known as
|
| 116 |
+
a “mapping”, is considered by the specification to be a local
|
| 117 |
+
user-interface issue distinct from IDNA conversion functionality.
|
| 118 |
+
|
| 119 |
+
This library provides one such mapping that was developed by the
|
| 120 |
+
Unicode Consortium. Known as `Unicode IDNA Compatibility Processing
|
| 121 |
+
<https://unicode.org/reports/tr46/>`_, it provides for both a regular
|
| 122 |
+
mapping for typical applications, as well as a transitional mapping to
|
| 123 |
+
help migrate from older IDNA 2003 applications. Strings are
|
| 124 |
+
preprocessed according to Section 4.4 “Preprocessing for IDNA2008”
|
| 125 |
+
prior to the IDNA operations.
|
| 126 |
+
|
| 127 |
+
For example, “Königsgäßchen” is not a permissible label as *LATIN
|
| 128 |
+
CAPITAL LETTER K* is not allowed (nor are capital letters in general).
|
| 129 |
+
UTS 46 will convert this into lower case prior to applying the IDNA
|
| 130 |
+
conversion.
|
| 131 |
+
|
| 132 |
+
.. code-block:: pycon
|
| 133 |
+
|
| 134 |
+
>>> import idna
|
| 135 |
+
>>> idna.encode('Königsgäßchen')
|
| 136 |
+
...
|
| 137 |
+
idna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed
|
| 138 |
+
>>> idna.encode('Königsgäßchen', uts46=True)
|
| 139 |
+
b'xn--knigsgchen-b4a3dun'
|
| 140 |
+
>>> print(idna.decode('xn--knigsgchen-b4a3dun'))
|
| 141 |
+
königsgäßchen
|
| 142 |
+
|
| 143 |
+
Transitional processing provides conversions to help transition from
|
| 144 |
+
the older 2003 standard to the current standard. For example, in the
|
| 145 |
+
original IDNA specification, the *LATIN SMALL LETTER SHARP S* (ß) was
|
| 146 |
+
converted into two *LATIN SMALL LETTER S* (ss), whereas in the current
|
| 147 |
+
IDNA specification this conversion is not performed.
|
| 148 |
+
|
| 149 |
+
.. code-block:: pycon
|
| 150 |
+
|
| 151 |
+
>>> idna.encode('Königsgäßchen', uts46=True, transitional=True)
|
| 152 |
+
'xn--knigsgsschen-lcb0w'
|
| 153 |
+
|
| 154 |
+
Implementers should use transitional processing with caution, only in
|
| 155 |
+
rare cases where conversion from legacy labels to current labels must be
|
| 156 |
+
performed (i.e. IDNA implementations that pre-date 2008). For typical
|
| 157 |
+
applications that just need to convert labels, transitional processing
|
| 158 |
+
is unlikely to be beneficial and could produce unexpected incompatible
|
| 159 |
+
results.
|
| 160 |
+
|
| 161 |
+
``encodings.idna`` Compatibility
|
| 162 |
+
++++++++++++++++++++++++++++++++
|
| 163 |
+
|
| 164 |
+
Function calls from the Python built-in ``encodings.idna`` module are
|
| 165 |
+
mapped to their IDNA 2008 equivalents using the ``idna.compat`` module.
|
| 166 |
+
Simply substitute the ``import`` clause in your code to refer to the new
|
| 167 |
+
module name.
|
| 168 |
+
|
| 169 |
+
Exceptions
|
| 170 |
+
----------
|
| 171 |
+
|
| 172 |
+
All errors raised during the conversion following the specification
|
| 173 |
+
should raise an exception derived from the ``idna.IDNAError`` base
|
| 174 |
+
class.
|
| 175 |
+
|
| 176 |
+
More specific exceptions that may be generated as ``idna.IDNABidiError``
|
| 177 |
+
when the error reflects an illegal combination of left-to-right and
|
| 178 |
+
right-to-left characters in a label; ``idna.InvalidCodepoint`` when
|
| 179 |
+
a specific codepoint is an illegal character in an IDN label (i.e.
|
| 180 |
+
INVALID); and ``idna.InvalidCodepointContext`` when the codepoint is
|
| 181 |
+
illegal based on its positional context (i.e. it is CONTEXTO or CONTEXTJ
|
| 182 |
+
but the contextual requirements are not satisfied.)
|
| 183 |
+
|
| 184 |
+
Building and Diagnostics
|
| 185 |
+
------------------------
|
| 186 |
+
|
| 187 |
+
The IDNA and UTS 46 functionality relies upon pre-calculated lookup
|
| 188 |
+
tables for performance. These tables are derived from computing against
|
| 189 |
+
eligibility criteria in the respective standards. These tables are
|
| 190 |
+
computed using the command-line script ``tools/idna-data``.
|
| 191 |
+
|
| 192 |
+
This tool will fetch relevant codepoint data from the Unicode repository
|
| 193 |
+
and perform the required calculations to identify eligibility. There are
|
| 194 |
+
three main modes:
|
| 195 |
+
|
| 196 |
+
* ``idna-data make-libdata``. Generates ``idnadata.py`` and
|
| 197 |
+
``uts46data.py``, the pre-calculated lookup tables used for IDNA and
|
| 198 |
+
UTS 46 conversions. Implementers who wish to track this library against
|
| 199 |
+
a different Unicode version may use this tool to manually generate a
|
| 200 |
+
different version of the ``idnadata.py`` and ``uts46data.py`` files.
|
| 201 |
+
|
| 202 |
+
* ``idna-data make-table``. Generate a table of the IDNA disposition
|
| 203 |
+
(e.g. PVALID, CONTEXTJ, CONTEXTO) in the format found in Appendix
|
| 204 |
+
B.1 of RFC 5892 and the pre-computed tables published by `IANA
|
| 205 |
+
<https://www.iana.org/>`_.
|
| 206 |
+
|
| 207 |
+
* ``idna-data U+0061``. Prints debugging output on the various
|
| 208 |
+
properties associated with an individual Unicode codepoint (in this
|
| 209 |
+
case, U+0061), that are used to assess the IDNA and UTS 46 status of a
|
| 210 |
+
codepoint. This is helpful in debugging or analysis.
|
| 211 |
+
|
| 212 |
+
The tool accepts a number of arguments, described using ``idna-data
|
| 213 |
+
-h``. Most notably, the ``--version`` argument allows the specification
|
| 214 |
+
of the version of Unicode to be used in computing the table data. For
|
| 215 |
+
example, ``idna-data --version 9.0.0 make-libdata`` will generate
|
| 216 |
+
library data against Unicode 9.0.0.
|
| 217 |
+
|
| 218 |
+
|
| 219 |
+
Additional Notes
|
| 220 |
+
----------------
|
| 221 |
+
|
| 222 |
+
* **Packages**. The latest tagged release version is published in the
|
| 223 |
+
`Python Package Index <https://pypi.org/project/idna/>`_.
|
| 224 |
+
|
| 225 |
+
* **Version support**. This library supports Python 3.6 and higher.
|
| 226 |
+
As this library serves as a low-level toolkit for a variety of
|
| 227 |
+
applications, many of which strive for broad compatibility with older
|
| 228 |
+
Python versions, there is no rush to remove older interpreter support.
|
| 229 |
+
Removing support for older versions should be well justified in that the
|
| 230 |
+
maintenance burden has become too high.
|
| 231 |
+
|
| 232 |
+
* **Python 2**. Python 2 is supported by version 2.x of this library.
|
| 233 |
+
Use "idna<3" in your requirements file if you need this library for
|
| 234 |
+
a Python 2 application. Be advised that these versions are no longer
|
| 235 |
+
actively developed.
|
| 236 |
+
|
| 237 |
+
* **Testing**. The library has a test suite based on each rule of the
|
| 238 |
+
IDNA specification, as well as tests that are provided as part of the
|
| 239 |
+
Unicode Technical Standard 46, `Unicode IDNA Compatibility Processing
|
| 240 |
+
<https://unicode.org/reports/tr46/>`_.
|
| 241 |
+
|
| 242 |
+
* **Emoji**. It is an occasional request to support emoji domains in
|
| 243 |
+
this library. Encoding of symbols like emoji is expressly prohibited by
|
| 244 |
+
the technical standard IDNA 2008 and emoji domains are broadly phased
|
| 245 |
+
out across the domain industry due to associated security risks. For
|
| 246 |
+
now, applications that need to support these non-compliant labels
|
| 247 |
+
may wish to consider trying the encode/decode operation in this library
|
| 248 |
+
first, and then falling back to using `encodings.idna`. See `the Github
|
| 249 |
+
project <https://github.com/kjd/idna/issues/18>`_ for more discussion.
|
| 250 |
+
|
.venv/lib/python3.11/site-packages/idna-3.10.dist-info/RECORD
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
idna-3.10.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 2 |
+
idna-3.10.dist-info/LICENSE.md,sha256=pZ8LDvNjWHQQmkRhykT_enDVBpboFHZ7-vch1Mmw2w8,1541
|
| 3 |
+
idna-3.10.dist-info/METADATA,sha256=URR5ZyDfQ1PCEGhkYoojqfi2Ra0tau2--lhwG4XSfjI,10158
|
| 4 |
+
idna-3.10.dist-info/RECORD,,
|
| 5 |
+
idna-3.10.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
| 6 |
+
idna/__init__.py,sha256=MPqNDLZbXqGaNdXxAFhiqFPKEQXju2jNQhCey6-5eJM,868
|
| 7 |
+
idna/__pycache__/__init__.cpython-311.pyc,,
|
| 8 |
+
idna/__pycache__/codec.cpython-311.pyc,,
|
| 9 |
+
idna/__pycache__/compat.cpython-311.pyc,,
|
| 10 |
+
idna/__pycache__/core.cpython-311.pyc,,
|
| 11 |
+
idna/__pycache__/idnadata.cpython-311.pyc,,
|
| 12 |
+
idna/__pycache__/intranges.cpython-311.pyc,,
|
| 13 |
+
idna/__pycache__/package_data.cpython-311.pyc,,
|
| 14 |
+
idna/__pycache__/uts46data.cpython-311.pyc,,
|
| 15 |
+
idna/codec.py,sha256=PEew3ItwzjW4hymbasnty2N2OXvNcgHB-JjrBuxHPYY,3422
|
| 16 |
+
idna/compat.py,sha256=RzLy6QQCdl9784aFhb2EX9EKGCJjg0P3PilGdeXXcx8,316
|
| 17 |
+
idna/core.py,sha256=YJYyAMnwiQEPjVC4-Fqu_p4CJ6yKKuDGmppBNQNQpFs,13239
|
| 18 |
+
idna/idnadata.py,sha256=W30GcIGvtOWYwAjZj4ZjuouUutC6ffgNuyjJy7fZ-lo,78306
|
| 19 |
+
idna/intranges.py,sha256=amUtkdhYcQG8Zr-CoMM_kVRacxkivC1WgxN1b63KKdU,1898
|
| 20 |
+
idna/package_data.py,sha256=q59S3OXsc5VI8j6vSD0sGBMyk6zZ4vWFREE88yCJYKs,21
|
| 21 |
+
idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
| 22 |
+
idna/uts46data.py,sha256=rt90K9J40gUSwppDPCrhjgi5AA6pWM65dEGRSf6rIhM,239289
|
.venv/lib/python3.11/site-packages/idna-3.10.dist-info/WHEEL
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Wheel-Version: 1.0
|
| 2 |
+
Generator: flit 3.9.0
|
| 3 |
+
Root-Is-Purelib: true
|
| 4 |
+
Tag: py3-none-any
|
.venv/lib/python3.11/site-packages/prometheus_fastapi_instrumentator/__init__.py
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .instrumentation import PrometheusFastApiInstrumentator
|
| 2 |
+
|
| 3 |
+
__version__ = "7.0.2"
|
| 4 |
+
|
| 5 |
+
Instrumentator = PrometheusFastApiInstrumentator
|
.venv/lib/python3.11/site-packages/prometheus_fastapi_instrumentator/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (343 Bytes). View file
|
|
|
.venv/lib/python3.11/site-packages/prometheus_fastapi_instrumentator/__pycache__/instrumentation.cpython-311.pyc
ADDED
|
Binary file (15 kB). View file
|
|
|