new add_builtins function and rename http_client classes
This commit is contained in:
parent
cdd35cef6e
commit
e349945918
|
@ -29,3 +29,29 @@ from .misc import *
|
|||
from .cache import *
|
||||
from .config import *
|
||||
from .connection import *
|
||||
from .http_client import (
|
||||
HttpClient,
|
||||
HttpClientRequest,
|
||||
HttpClientResponse
|
||||
)
|
||||
|
||||
|
||||
def add_builtins(*classes):
|
||||
new_builtins = [
|
||||
BaseConfig,
|
||||
DotDict,
|
||||
HttpClient,
|
||||
JsonConfig,
|
||||
LruCache,
|
||||
Path,
|
||||
TtlCache,
|
||||
Url,
|
||||
convert_to_boolean,
|
||||
convert_to_bytes,
|
||||
convert_to_string,
|
||||
logging,
|
||||
random_gen,
|
||||
*classes
|
||||
]
|
||||
|
||||
__builtins__.update({cls.__name__: cls for cls in new_builtins})
|
||||
|
|
|
@ -23,6 +23,6 @@ http_methods = {
|
|||
}
|
||||
|
||||
|
||||
from .client import Client
|
||||
from .request import Request
|
||||
from .response import Response
|
||||
from .client import HttpClient
|
||||
from .request import HttpClientRequest
|
||||
from .response import HttpClientResponse
|
||||
|
|
|
@ -11,8 +11,8 @@ from urllib.request import urlopen
|
|||
|
||||
from . import http_methods
|
||||
from .config import Config
|
||||
from .request import Request
|
||||
from .response import Response
|
||||
from .request import HttpClientRequest
|
||||
from .response import HttpClientResponse
|
||||
|
||||
from .. import izzylog, __version__
|
||||
from ..dotdict import DefaultDotDict, DotDict
|
||||
|
@ -32,7 +32,7 @@ from typing import *
|
|||
__pdoc__ = {f'Client.{method.lower()}': f'Send a {method.upper()} request' for method in http_methods}
|
||||
|
||||
|
||||
class Client:
|
||||
class HttpClient:
|
||||
'Basic HTTP client based on `urllib.request.urlopen`'
|
||||
|
||||
|
||||
|
@ -89,8 +89,8 @@ class Client:
|
|||
setattr(self, method.lower(), partial(self.request, method=method.upper()))
|
||||
|
||||
|
||||
def build_request(self, *args, **kwargs) -> Request:
|
||||
'Creates a new Request object. It can be used with `Client.send_request` See `izzylib.http_client.request.Request` for available arguments..'
|
||||
def build_request(self, *args, **kwargs) -> HttpClientRequest:
|
||||
'Creates a new HttpClientRequest object. It can be used with `Client.send_request` See `izzylib.http_client.request.HttpClientRequest` for available arguments..'
|
||||
|
||||
request = self.cfg.request_class(*args, **kwargs)
|
||||
request._set_params(self.cfg)
|
||||
|
@ -98,11 +98,11 @@ class Client:
|
|||
return request
|
||||
|
||||
|
||||
def send_request(self, request: Request) -> Response:
|
||||
def send_request(self, request: HttpClientRequest) -> HttpClientResponse:
|
||||
'Sends a request'
|
||||
|
||||
if not isinstance(request, Request):
|
||||
raise TypeError(f'Must be a barkshark_http_async.request.Request object (or subclassed), not {type(request).__name__}')
|
||||
if not isinstance(request, HttpClientRequest):
|
||||
raise TypeError(f'Must be a izzylib.http_client.request.HttpClientRequest object (or subclassed), not {type(request).__name__}')
|
||||
|
||||
if not request._params_set:
|
||||
request._set_params(self.cfg)
|
||||
|
@ -116,7 +116,7 @@ class Client:
|
|||
return self.cfg.response_class(response)
|
||||
|
||||
|
||||
def request(self, *args, **kwargs) -> Response:
|
||||
def request(self, *args, **kwargs) -> HttpClientResponse:
|
||||
'Create and send a request'
|
||||
|
||||
request = self.build_request(*args, **kwargs)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from .request import Request
|
||||
from .response import Response
|
||||
from .request import HttpClientRequest
|
||||
from .response import HttpClientResponse
|
||||
|
||||
from .. import __version__
|
||||
from ..config import BaseConfig
|
||||
|
|
|
@ -12,7 +12,7 @@ try: import magic
|
|||
except ImportError: magic = None
|
||||
|
||||
|
||||
class Request(PyRequest):
|
||||
class HttpClientRequest(PyRequest):
|
||||
def __init__(self, url:str, body:bytes=None, headers:dict={}, cookies:dict={}, method:str='GET'):
|
||||
'An HTTP request. Headers can be accessed, set, or deleted as dict items.'
|
||||
|
||||
|
@ -81,7 +81,7 @@ class Request(PyRequest):
|
|||
|
||||
@property
|
||||
def data(self):
|
||||
'Alias for `Request.body`'
|
||||
'Alias for `HttpClientRequest.body`'
|
||||
return self._data
|
||||
|
||||
|
||||
|
@ -183,7 +183,7 @@ class Request(PyRequest):
|
|||
|
||||
|
||||
def set_type_from_body(self) -> str:
|
||||
'Set the `Content-Type` header based on `Request.body` and return the mimetype.'
|
||||
'Set the `Content-Type` header based on `HttpClientRequest.body` and return the mimetype.'
|
||||
|
||||
if not self.body:
|
||||
return
|
||||
|
|
|
@ -5,7 +5,7 @@ from ..http_utils import Cookies, Headers
|
|||
from ..misc import Url
|
||||
|
||||
|
||||
class Response:
|
||||
class HttpClientResponse:
|
||||
headers = None
|
||||
cookies = None
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ from . import __version__
|
|||
from .config import BaseConfig
|
||||
from .dotdict import DotDict
|
||||
from .exceptions import HttpError
|
||||
from .http_client import Client
|
||||
from .http_client import HttpClient
|
||||
from .misc import DateString, Url
|
||||
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ __all__ = [
|
|||
'class_name',
|
||||
'convert_to_boolean',
|
||||
'convert_to_bytes',
|
||||
'convert_to_string',
|
||||
'get_current_user_info',
|
||||
'get_ip',
|
||||
'hasher',
|
||||
|
@ -174,19 +175,31 @@ def convert_to_bytes(data:Union[str,DotDict,dict,list,set,tuple,bytearray,bytes]
|
|||
if not data:
|
||||
return b''
|
||||
|
||||
if isinstance(data, str):
|
||||
return data.encode('utf-8')
|
||||
|
||||
elif isinstance(data, DotDict):
|
||||
return data.to_json().encode('utf-8')
|
||||
|
||||
elif any(map(isinstance, [data], [dict, list, set, tuple])):
|
||||
return json.dumps(data).encode('utf-8')
|
||||
|
||||
elif isinstance(data, bytearray):
|
||||
if isinstance(data, bytearray):
|
||||
return bytes(data)
|
||||
|
||||
elif not isinstance(data, bytes):
|
||||
return convert_to_string(data).encode('utf-8')
|
||||
|
||||
return data
|
||||
|
||||
|
||||
def convert_to_string(data:Union[str,DotDict,dict,list,set,tuple,bytearray,bytes]) -> str:
|
||||
'Attempt to convert an object to a str.'
|
||||
|
||||
if not data:
|
||||
return ''
|
||||
|
||||
if isinstance(data, DotDict):
|
||||
return data.to_json()
|
||||
|
||||
elif isinstance(data, (dict, list, set, tuple)):
|
||||
return json.dumps(data)
|
||||
|
||||
elif isinstance(data, (bytes, bytearray)):
|
||||
return data.decode('utf-8')
|
||||
|
||||
elif not isinstance(data, str):
|
||||
raise TypeError(f'Invalid data type: {class_name(data)}')
|
||||
|
||||
return data
|
||||
|
|
Loading…
Reference in a new issue