__init__.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. from ._api import request, stream
  2. from ._async import (
  3. AsyncConnectionInterface,
  4. AsyncConnectionPool,
  5. AsyncHTTP2Connection,
  6. AsyncHTTP11Connection,
  7. AsyncHTTPConnection,
  8. AsyncHTTPProxy,
  9. AsyncSOCKSProxy,
  10. )
  11. from ._backends.base import (
  12. SOCKET_OPTION,
  13. AsyncNetworkBackend,
  14. AsyncNetworkStream,
  15. NetworkBackend,
  16. NetworkStream,
  17. )
  18. from ._backends.mock import AsyncMockBackend, AsyncMockStream, MockBackend, MockStream
  19. from ._backends.sync import SyncBackend
  20. from ._exceptions import (
  21. ConnectError,
  22. ConnectionNotAvailable,
  23. ConnectTimeout,
  24. LocalProtocolError,
  25. NetworkError,
  26. PoolTimeout,
  27. ProtocolError,
  28. ProxyError,
  29. ReadError,
  30. ReadTimeout,
  31. RemoteProtocolError,
  32. TimeoutException,
  33. UnsupportedProtocol,
  34. WriteError,
  35. WriteTimeout,
  36. )
  37. from ._models import URL, Origin, Proxy, Request, Response
  38. from ._ssl import default_ssl_context
  39. from ._sync import (
  40. ConnectionInterface,
  41. ConnectionPool,
  42. HTTP2Connection,
  43. HTTP11Connection,
  44. HTTPConnection,
  45. HTTPProxy,
  46. SOCKSProxy,
  47. )
  48. # The 'httpcore.AnyIOBackend' class is conditional on 'anyio' being installed.
  49. try:
  50. from ._backends.anyio import AnyIOBackend
  51. except ImportError: # pragma: nocover
  52. class AnyIOBackend: # type: ignore
  53. def __init__(self, *args, **kwargs): # type: ignore
  54. msg = (
  55. "Attempted to use 'httpcore.AnyIOBackend' but 'anyio' is not installed."
  56. )
  57. raise RuntimeError(msg)
  58. # The 'httpcore.TrioBackend' class is conditional on 'trio' being installed.
  59. try:
  60. from ._backends.trio import TrioBackend
  61. except ImportError: # pragma: nocover
  62. class TrioBackend: # type: ignore
  63. def __init__(self, *args, **kwargs): # type: ignore
  64. msg = "Attempted to use 'httpcore.TrioBackend' but 'trio' is not installed."
  65. raise RuntimeError(msg)
  66. __all__ = [
  67. # top-level requests
  68. "request",
  69. "stream",
  70. # models
  71. "Origin",
  72. "URL",
  73. "Request",
  74. "Response",
  75. "Proxy",
  76. # async
  77. "AsyncHTTPConnection",
  78. "AsyncConnectionPool",
  79. "AsyncHTTPProxy",
  80. "AsyncHTTP11Connection",
  81. "AsyncHTTP2Connection",
  82. "AsyncConnectionInterface",
  83. "AsyncSOCKSProxy",
  84. # sync
  85. "HTTPConnection",
  86. "ConnectionPool",
  87. "HTTPProxy",
  88. "HTTP11Connection",
  89. "HTTP2Connection",
  90. "ConnectionInterface",
  91. "SOCKSProxy",
  92. # network backends, implementations
  93. "SyncBackend",
  94. "AnyIOBackend",
  95. "TrioBackend",
  96. # network backends, mock implementations
  97. "AsyncMockBackend",
  98. "AsyncMockStream",
  99. "MockBackend",
  100. "MockStream",
  101. # network backends, interface
  102. "AsyncNetworkStream",
  103. "AsyncNetworkBackend",
  104. "NetworkStream",
  105. "NetworkBackend",
  106. # util
  107. "default_ssl_context",
  108. "SOCKET_OPTION",
  109. # exceptions
  110. "ConnectionNotAvailable",
  111. "ProxyError",
  112. "ProtocolError",
  113. "LocalProtocolError",
  114. "RemoteProtocolError",
  115. "UnsupportedProtocol",
  116. "TimeoutException",
  117. "PoolTimeout",
  118. "ConnectTimeout",
  119. "ReadTimeout",
  120. "WriteTimeout",
  121. "NetworkError",
  122. "ConnectError",
  123. "ReadError",
  124. "WriteError",
  125. ]
  126. __version__ = "1.0.8"
  127. __locals = locals()
  128. for __name in __all__:
  129. # Exclude SOCKET_OPTION, it causes AttributeError on Python 3.14
  130. if not __name.startswith(("__", "SOCKET_OPTION")):
  131. setattr(__locals[__name], "__module__", "httpcore") # noqa