Reorganise structure
This commit is contained in:
parent
2de053eff3
commit
0c6f6182cf
16
README.md
16
README.md
@ -77,7 +77,7 @@ Additionally, credit is due to for `urllib3` for plenty of design inspiration.
|
||||
|
||||
## API Reference
|
||||
|
||||
#### Client
|
||||
### `Client`
|
||||
|
||||
*An HTTP client, with connection pooling, redirects, cookie persistence, etc.*
|
||||
|
||||
@ -99,11 +99,7 @@ Additionally, credit is due to for `urllib3` for plenty of design inspiration.
|
||||
* `async def .send(request, [stream], [allow_redirects], [ssl], [timeout])`
|
||||
* `async def .close()`
|
||||
|
||||
### Models
|
||||
|
||||
*Data-structures for HTTP primitives...*
|
||||
|
||||
#### Response
|
||||
### `Response`
|
||||
|
||||
*An HTTP response.*
|
||||
|
||||
@ -128,7 +124,7 @@ Additionally, credit is due to for `urllib3` for plenty of design inspiration.
|
||||
* `async def .close()` - **None**
|
||||
* `async def .next()` - **Response**
|
||||
|
||||
#### Request
|
||||
### `Request`
|
||||
|
||||
*An HTTP request. Can be constructed explicitly for more control over exactly
|
||||
what gets sent over the wire.*
|
||||
@ -144,7 +140,7 @@ what gets sent over the wire.*
|
||||
* `.content` - **byte** or **byte async iterator**
|
||||
* `.headers` - **Headers**
|
||||
|
||||
#### URL
|
||||
### `URL`
|
||||
|
||||
*A normalized, IDNA supporting URL.*
|
||||
|
||||
@ -170,7 +166,7 @@ what gets sent over the wire.*
|
||||
* `def .copy_with([scheme], [authority], [path], [query], [fragment])` - **URL**
|
||||
* `def .resolve_with(url)` - **URL**
|
||||
|
||||
#### Origin
|
||||
### `Origin`
|
||||
|
||||
*A normalized, IDNA supporting set of scheme/host/port info.*
|
||||
|
||||
@ -184,7 +180,7 @@ True
|
||||
* `.host` - **str**
|
||||
* `.port` - **int**
|
||||
|
||||
#### `Headers`
|
||||
### `Headers`
|
||||
|
||||
*A case-insensitive multi-dict.*
|
||||
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
from .adapters.redirects import RedirectAdapter
|
||||
from .backends.sync import SyncClient
|
||||
from .client import Client
|
||||
from .config import PoolLimits, SSLConfig, TimeoutConfig
|
||||
from .constants import Protocol, codes
|
||||
from .dispatch.connection import HTTPConnection
|
||||
from .dispatch.connection_pool import ConnectionPool
|
||||
from .dispatch.http2 import HTTP2Connection
|
||||
@ -20,10 +22,7 @@ from .exceptions import (
|
||||
Timeout,
|
||||
TooManyRedirects,
|
||||
)
|
||||
from .interfaces import Adapter
|
||||
from .interfaces import Adapter, BaseReader, BaseWriter
|
||||
from .models import URL, Headers, Origin, Request, Response
|
||||
from .status_codes import codes
|
||||
from .streams import BaseReader, BaseWriter, Protocol, Reader, Writer, connect
|
||||
from .sync import SyncClient
|
||||
|
||||
__version__ = "0.2.1"
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
import typing
|
||||
|
||||
from ..config import DEFAULT_MAX_REDIRECTS
|
||||
from ..constants import codes
|
||||
from ..exceptions import RedirectBodyUnavailable, RedirectLoop, TooManyRedirects
|
||||
from ..interfaces import Adapter
|
||||
from ..models import URL, Headers, Request, Response
|
||||
from ..status_codes import codes
|
||||
|
||||
|
||||
class RedirectAdapter(Adapter):
|
||||
|
||||
2
httpcore/backends/__init__.py
Normal file
2
httpcore/backends/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
"""
|
||||
"""
|
||||
@ -9,22 +9,17 @@ protocols, and help keep the rest of the package more `async`/`await`
|
||||
based, and less strictly `asyncio`-specific.
|
||||
"""
|
||||
import asyncio
|
||||
import enum
|
||||
import ssl
|
||||
import typing
|
||||
|
||||
from .config import DEFAULT_TIMEOUT_CONFIG, PoolLimits, TimeoutConfig
|
||||
from .exceptions import ConnectTimeout, PoolTimeout, ReadTimeout, WriteTimeout
|
||||
from .interfaces import BasePoolSemaphore, BaseReader, BaseWriter
|
||||
from ..config import DEFAULT_TIMEOUT_CONFIG, PoolLimits, TimeoutConfig
|
||||
from ..constants import Protocol
|
||||
from ..exceptions import ConnectTimeout, PoolTimeout, ReadTimeout, WriteTimeout
|
||||
from ..interfaces import BasePoolSemaphore, BaseReader, BaseWriter
|
||||
|
||||
OptionalTimeout = typing.Optional[TimeoutConfig]
|
||||
|
||||
|
||||
class Protocol(enum.Enum):
|
||||
HTTP_11 = 1
|
||||
HTTP_2 = 2
|
||||
|
||||
|
||||
class Reader(BaseReader):
|
||||
def __init__(
|
||||
self, stream_reader: asyncio.StreamReader, timeout: TimeoutConfig
|
||||
@ -2,8 +2,8 @@ import asyncio
|
||||
import typing
|
||||
from types import TracebackType
|
||||
|
||||
from .client import Client
|
||||
from .config import (
|
||||
from ..client import Client
|
||||
from ..config import (
|
||||
DEFAULT_MAX_REDIRECTS,
|
||||
DEFAULT_POOL_LIMITS,
|
||||
DEFAULT_SSL_CONFIG,
|
||||
@ -12,7 +12,7 @@ from .config import (
|
||||
SSLConfig,
|
||||
TimeoutConfig,
|
||||
)
|
||||
from .models import (
|
||||
from ..models import (
|
||||
URL,
|
||||
ByteOrByteStream,
|
||||
Headers,
|
||||
@ -1,5 +1,11 @@
|
||||
import enum
|
||||
|
||||
|
||||
class Protocol(str, enum.Enum):
|
||||
HTTP_11 = "HTTP/1.1"
|
||||
HTTP_2 = "HTTP/2"
|
||||
|
||||
|
||||
codes = enum.IntEnum(
|
||||
"StatusCode",
|
||||
[
|
||||
@ -4,16 +4,17 @@ import typing
|
||||
import h2.connection
|
||||
import h11
|
||||
|
||||
from ..backends.default import connect
|
||||
from ..config import (
|
||||
DEFAULT_SSL_CONFIG,
|
||||
DEFAULT_TIMEOUT_CONFIG,
|
||||
SSLConfig,
|
||||
TimeoutConfig,
|
||||
)
|
||||
from ..constants import Protocol
|
||||
from ..exceptions import ConnectTimeout
|
||||
from ..interfaces import Adapter
|
||||
from ..models import Origin, Request, Response
|
||||
from ..streams import Protocol, connect
|
||||
from .http2 import HTTP2Connection
|
||||
from .http11 import HTTP11Connection
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import collections.abc
|
||||
import typing
|
||||
|
||||
from ..backends.default import PoolSemaphore
|
||||
from ..config import (
|
||||
DEFAULT_CA_BUNDLE_PATH,
|
||||
DEFAULT_POOL_LIMITS,
|
||||
@ -14,7 +15,6 @@ from ..decoders import ACCEPT_ENCODING
|
||||
from ..exceptions import PoolTimeout
|
||||
from ..interfaces import Adapter
|
||||
from ..models import Origin, Request, Response
|
||||
from ..streams import PoolSemaphore
|
||||
from .connection import HTTPConnection
|
||||
|
||||
CONNECTIONS_DICT = typing.Dict[Origin, typing.List[HTTPConnection]]
|
||||
|
||||
@ -9,9 +9,8 @@ from ..config import (
|
||||
TimeoutConfig,
|
||||
)
|
||||
from ..exceptions import ConnectTimeout, ReadTimeout
|
||||
from ..interfaces import Adapter
|
||||
from ..interfaces import Adapter, BaseReader, BaseWriter
|
||||
from ..models import Request, Response
|
||||
from ..streams import BaseReader, BaseWriter
|
||||
|
||||
H11Event = typing.Union[
|
||||
h11.Request,
|
||||
|
||||
@ -11,9 +11,8 @@ from ..config import (
|
||||
TimeoutConfig,
|
||||
)
|
||||
from ..exceptions import ConnectTimeout, ReadTimeout
|
||||
from ..interfaces import Adapter
|
||||
from ..interfaces import Adapter, BaseReader, BaseWriter
|
||||
from ..models import Request, Response
|
||||
from ..streams import BaseReader, BaseWriter
|
||||
|
||||
OptionalTimeout = typing.Optional[TimeoutConfig]
|
||||
|
||||
|
||||
@ -6,6 +6,7 @@ import idna
|
||||
import rfc3986
|
||||
|
||||
from .config import SSLConfig, TimeoutConfig
|
||||
from .constants import codes
|
||||
from .decoders import (
|
||||
ACCEPT_ENCODING,
|
||||
SUPPORTED_DECODERS,
|
||||
@ -14,7 +15,6 @@ from .decoders import (
|
||||
MultiDecoder,
|
||||
)
|
||||
from .exceptions import InvalidURL, ResponseClosed, ResponseNotRead, StreamConsumed
|
||||
from .status_codes import codes
|
||||
from .utils import (
|
||||
get_reason_phrase,
|
||||
is_known_encoding,
|
||||
|
||||
@ -23,7 +23,7 @@ def normalize_header_value(value: typing.AnyStr, encoding: str = None) -> bytes:
|
||||
|
||||
def get_reason_phrase(status_code: int) -> str:
|
||||
"""
|
||||
Return an HTTP reason phrase, eg. "OK" for 200, or "Not Found" for 404.
|
||||
Return an HTTP reason phrase such as "OK" for 200, or "Not Found" for 404.
|
||||
"""
|
||||
try:
|
||||
return http.HTTPStatus(status_code).phrase
|
||||
@ -32,6 +32,9 @@ def get_reason_phrase(status_code: int) -> str:
|
||||
|
||||
|
||||
def is_known_encoding(encoding: str) -> bool:
|
||||
"""
|
||||
Return `True` if `encoding` is a known codec.
|
||||
"""
|
||||
try:
|
||||
codecs.lookup(encoding)
|
||||
except LookupError:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user