ASGI (Asynchronous Server Gateway Interface)¶
HTTPConnection¶
-
class
baize.asgi.HTTPConnection(scope: MutableMapping[str, Any], receive: Callable[[], Awaitable[MutableMapping[str, Any]]] = <function empty_receive>, send: Callable[[MutableMapping[str, Any]], Awaitable[None]] = <function empty_send>)¶ A base class for incoming HTTP connections.
It is a valid Mapping type that allows you to directly access the values in any ASGI
scopedictionary.-
property
client¶ Client’s IP and Port.
Note that this depends on the “client” value given by the ASGI Server, and is not necessarily accurate.
-
property
url¶ The full URL of this request.
-
property
path_params¶ The path parameters parsed by the framework.
-
property
query_params¶ Query parameter. It is a multi-value mapping.
-
property
headers¶ A read-only case-independent mapping.
Note that in its internal storage, all keys are in lower case.
-
property
accepted_types¶ Request’s accepted types
-
accepts(media_type: str) → bool¶ e.g.
request.accepts("application/json")
-
property
content_length¶ Request’s content-length
-
property
content_type¶ Request’s content-type
Returns cookies in as a
dict.NOTE: Modifications to this dictionary will not affect the response value. In fact, this value should not be modified.
-
property
date¶ The sending time of the request.
NOTE: The datetime object is timezone-aware.
-
get(k[, d]) → D[k] if k in D, else d. d defaults to None.¶
-
items() → a set-like object providing a view on D’s items¶
-
keys() → a set-like object providing a view on D’s keys¶
-
property
referrer¶ The
RefererHTTP request header contains an absolute or partial address of the page making the request.
-
values() → an object providing a view on D’s values¶
-
property
Request¶
-
class
baize.asgi.Request(scope: MutableMapping[str, Any], receive: Callable[[], Awaitable[MutableMapping[str, Any]]] = <function empty_receive>, send: Callable[[MutableMapping[str, Any]], Awaitable[None]] = <function empty_send>)¶ -
property
method¶ HTTP method. Uppercase string.
-
stream() → AsyncIterator[bytes]¶ Streaming read request body. e.g.
async for chunk in request.stream(): ...If you access
.stream()then the byte chunks are provided without storing the entire body to memory. Any subsequent calls to.body,.form, or.jsonwill raise an error.
-
property
body¶ Read all the contents of the request body into the memory and return it.
-
property
json¶ Call
await self.bodyand usejson.loadsparse it.If
content_typeis not equal toapplication/json, an HTTPExcption exception will be thrown.
-
property
form¶ Parse the data in the form format and return it as a multi-value mapping.
If
content_typeis equal tomultipart/form-data, it will directly perform streaming analysis, and subsequent calls toself.bodyorself.jsonwill raise errors.If
content_typeis not equal tomultipart/form-dataorapplication/x-www-form-urlencoded, an HTTPExcption exception will be thrown.
-
async
close() → None¶ Close all temporary files in the
self.form.This can always be called, regardless of whether you use form or not.
-
async
is_disconnected() → bool¶ The method used to determine whether the connection is interrupted.
-
property
Response¶
-
class
baize.asgi.Response(status_code: int = 200, headers: Optional[Mapping[str, str]] = None)¶ The parent class of all responses, whose objects can be used directly as ASGI application.
SmallResponse¶
-
class
baize.asgi.SmallResponse(content: _ContentType, status_code: int = 200, headers: Optional[Mapping[str, str]] = None, media_type: Optional[str] = None, charset: Optional[str] = None)¶ Bases:
baize.asgi.Response,abc.ABC,Generic[baize.asgi._ContentType]Abstract base class for small response objects.
PlainTextResponse¶
-
class
baize.asgi.PlainTextResponse(content: _ContentType, status_code: int = 200, headers: Optional[Mapping[str, str]] = None, media_type: Optional[str] = None, charset: Optional[str] = None)¶ Bases:
baize.asgi.SmallResponse[Union[bytes,str]]
HTMLResponse¶
-
class
baize.asgi.HTMLResponse(content: _ContentType, status_code: int = 200, headers: Optional[Mapping[str, str]] = None, media_type: Optional[str] = None, charset: Optional[str] = None)¶ Bases:
baize.asgi.SmallResponse[Union[bytes,str]]
JSONResponse¶
-
class
baize.asgi.JSONResponse(content: Any, status_code: int = 200, headers: Optional[Mapping[str, str]] = None, **kwargs: Any)¶ Bases:
baize.asgi.SmallResponse[Any]**kwargsis used to accept all the parameters thatjson.loadscan accept.
RedirectResponse¶
-
class
baize.asgi.RedirectResponse(url: Union[str, baize.datastructures.URL], status_code: int = 307, headers: Optional[Mapping[str, str]] = None)¶ Bases:
baize.asgi.Response
StreamResponse¶
-
class
baize.asgi.StreamResponse(iterable: AsyncIterable[bytes], status_code: int = 200, headers: Optional[Mapping[str, str]] = None, content_type: str = 'application/octet-stream')¶ Bases:
baize.asgi.Response
FileResponse¶
-
class
baize.asgi.FileResponse(filepath: str, headers: Optional[Mapping[str, str]] = None, content_type: Optional[str] = None, download_name: Optional[str] = None, stat_result: Optional[os.stat_result] = None, chunk_size: int = 262144)¶ Bases:
baize.asgi.Response,baize.responses.FileResponseMixinFile response.
It will automatically determine whether to send only headers and the range of files that need to be sent.
SendEventResponse¶
-
class
baize.asgi.SendEventResponse(iterable: AsyncIterable[baize.typing.ServerSentEvent], status_code: int = 200, headers: Optional[Mapping[str, str]] = None, *, ping_interval: float = 3, charset: str = 'utf-8')¶ Bases:
baize.asgi.ResponseServer-sent events response.
- Parameters
ping_interval – This determines the time interval (in seconds) between sending ping messages.
WebSocket¶
-
class
baize.asgi.WebSocket(scope: MutableMapping[str, Any], receive: Callable[], Awaitable[MutableMapping[str, Any]]], send: Callable[[MutableMapping[str, Any]], Awaitable[None]])¶ -
async
receive() → MutableMapping[str, Any]¶ Receive ASGI websocket messages, ensuring valid state transitions.
-
async
send(message: MutableMapping[str, Any]) → None¶ Send ASGI websocket messages, ensuring valid state transitions.
-
async
accept(subprotocol: Optional[str] = None) → None¶ Accept websocket connection.
-
async
receive_text() → str¶ Receive a WebSocket text frame and return.
-
async
receive_bytes() → bytes¶ Receive a WebSocket binary frame and return.
-
iter_text() → AsyncIterator[str]¶ Keep receiving text frames until the WebSocket connection is disconnected.
-
iter_bytes() → AsyncIterator[bytes]¶ Keep receiving binary frames until the WebSocket connection is disconnected.
-
async
send_text(data: str) → None¶ Send a WebSocket text frame.
-
async
send_bytes(data: bytes) → None¶ Send a WebSocket binary frame.
-
async
close(code: int = 1000) → None¶ Close WebSocket connection. It can be called multiple times.
-
async
Router¶
-
class
baize.asgi.Router(*routes: Union[Tuple[str, Interface], Tuple[str, Interface, str]])¶ A router to assign different paths to different ASGI applications.
- Parameters
routes – A triple composed of path, endpoint, and name. The name is optional. If the name is not given, the corresponding URL cannot be constructed through build_url.
applications = Router( ("/static/{filepath:any}", static_files), ("/api/{_:any}", api_app), ("/about/{name}", about_page, "about"), ("/", homepage, "homepage"), )
-
build_url(name: str, params: Dict[str, Any]) → str¶ Find the corresponding route by the name of the route, and then construct the URL path.
Use {} to mark path parameters, the format is {name[:type]}. If type is not explicitly specified, it defaults to str.
The built-in types are str, int, decimal, uuid, date, any. Among them, str can match all strings except /, and any can match all strings.
If the built-in types are not enough, then you only need to write a class that inherits baize.routing.Convertor and register it in baize.routing.CONVERTOR_TYPES.
Subpaths¶
-
class
baize.asgi.Subpaths(*routes: Tuple[str, Interface])¶ A router allocates different prefix requests to different ASGI applications.
NOTE: This will change the values of
scope["root_path"]andscope["path"].applications = Subpaths( ("/static", static_files), ("/api", api_app), ("", default_app), )