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
scope
dictionary.-
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
Referer
HTTP 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.json
will raise an error.
-
property
body
¶ Read all the contents of the request body into the memory and return it.
-
property
json
¶ Call
await self.body
and usejson.loads
parse it.If
content_type
is 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_type
is equal tomultipart/form-data
, it will directly perform streaming analysis, and subsequent calls toself.body
orself.json
will raise errors.If
content_type
is not equal tomultipart/form-data
orapplication/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
]**kwargs
is used to accept all the parameters thatjson.loads
can 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.FileResponseMixin
File 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.Response
Server-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), )