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