koichi12 commited on
Commit
09a76c8
·
verified ·
1 Parent(s): 9255ced

Add files using upload-large-folder tool

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .venv/lib/python3.11/site-packages/_yaml/__init__.py +33 -0
  2. .venv/lib/python3.11/site-packages/_yaml/__pycache__/__init__.cpython-311.pyc +0 -0
  3. .venv/lib/python3.11/site-packages/aiosignal/__init__.py +36 -0
  4. .venv/lib/python3.11/site-packages/aiosignal/__init__.pyi +12 -0
  5. .venv/lib/python3.11/site-packages/aiosignal/__pycache__/__init__.cpython-311.pyc +0 -0
  6. .venv/lib/python3.11/site-packages/aiosignal/py.typed +0 -0
  7. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi +103 -0
  8. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi +18 -0
  9. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi +52 -0
  10. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi +12 -0
  11. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi +12 -0
  12. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi +21 -0
  13. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi +22 -0
  14. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi +13 -0
  15. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi +55 -0
  16. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__init__.py +3 -0
  17. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-311.pyc +0 -0
  18. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-311.pyc +0 -0
  19. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-311.pyc +0 -0
  20. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py +183 -0
  21. .venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/binding.py +121 -0
  22. .venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/INSTALLER +1 -0
  23. .venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/LICENSE +202 -0
  24. .venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/METADATA +74 -0
  25. .venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/RECORD +125 -0
  26. .venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/WHEEL +5 -0
  27. .venv/lib/python3.11/site-packages/google_api_core-2.24.0.dist-info/top_level.txt +1 -0
  28. .venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/INSTALLER +1 -0
  29. .venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/METADATA +616 -0
  30. .venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/RECORD +68 -0
  31. .venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/WHEEL +4 -0
  32. .venv/lib/python3.11/site-packages/httpcore-1.0.7.dist-info/licenses/LICENSE.md +27 -0
  33. .venv/lib/python3.11/site-packages/httpcore/_backends/__init__.py +0 -0
  34. .venv/lib/python3.11/site-packages/httpcore/_backends/__pycache__/auto.cpython-311.pyc +0 -0
  35. .venv/lib/python3.11/site-packages/httpcore/_backends/__pycache__/base.cpython-311.pyc +0 -0
  36. .venv/lib/python3.11/site-packages/httpcore/_backends/__pycache__/mock.cpython-311.pyc +0 -0
  37. .venv/lib/python3.11/site-packages/httpcore/_backends/__pycache__/sync.cpython-311.pyc +0 -0
  38. .venv/lib/python3.11/site-packages/httpcore/_backends/anyio.py +146 -0
  39. .venv/lib/python3.11/site-packages/httpcore/_backends/base.py +101 -0
  40. .venv/lib/python3.11/site-packages/httpcore/_ssl.py +9 -0
  41. .venv/lib/python3.11/site-packages/httpcore/_synchronization.py +318 -0
  42. .venv/lib/python3.11/site-packages/httpcore/py.typed +0 -0
  43. .venv/lib/python3.11/site-packages/idna-3.10.dist-info/INSTALLER +1 -0
  44. .venv/lib/python3.11/site-packages/idna-3.10.dist-info/LICENSE.md +31 -0
  45. .venv/lib/python3.11/site-packages/idna-3.10.dist-info/METADATA +250 -0
  46. .venv/lib/python3.11/site-packages/idna-3.10.dist-info/RECORD +22 -0
  47. .venv/lib/python3.11/site-packages/idna-3.10.dist-info/WHEEL +4 -0
  48. .venv/lib/python3.11/site-packages/prometheus_fastapi_instrumentator/__init__.py +5 -0
  49. .venv/lib/python3.11/site-packages/prometheus_fastapi_instrumentator/__pycache__/__init__.cpython-311.pyc +0 -0
  50. .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
+ [![Test Suite](https://github.com/encode/httpcore/workflows/Test%20Suite/badge.svg)](https://github.com/encode/httpcore/actions)
41
+ [![Package version](https://badge.fury.io/py/httpcore.svg)](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