Reorganise structure

This commit is contained in:
Tom Christie 2019-05-01 16:21:04 +01:00
parent 2de053eff3
commit 0c6f6182cf
13 changed files with 35 additions and 35 deletions

View File

@ -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.*

View File

@ -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"

View File

@ -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):

View File

@ -0,0 +1,2 @@
"""
"""

View File

@ -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

View File

@ -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,

View File

@ -1,5 +1,11 @@
import enum
class Protocol(str, enum.Enum):
HTTP_11 = "HTTP/1.1"
HTTP_2 = "HTTP/2"
codes = enum.IntEnum(
"StatusCode",
[

View File

@ -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

View File

@ -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]]

View File

@ -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,

View File

@ -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]

View File

@ -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,

View File

@ -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: