跳转至

Reference

Bridge

Bridge.get_bridge

@staticmethod
def get_bridge(app: Application) -> 'Bridge':
    """
    从 aiohttp 应用实例中获取 Bridge 实例。

    参数:
        app (Application): aiohttp 应用实例

    返回:
        Bridge: Bridge 实例
    """

Bridge.__init__

def __init__(self, config: str | None = None, app: Application | None = None) -> None:
    """
    config: path to config file/directory
    app: aiohttp application
    """

Bridge.scan

def scan(self, *packages) -> None:
    """
    扫描指定包或模块,自动注册路由、服务和中间件。

    参数:
        *packages: 要扫描的包或模块
    """

Bridge.middlewares

def middlewares(self, *middlewares) -> None:
    """
    注册中间件到应用程序。

    参数:
        *middlewares: Middleware 子类或中间件函数
    """

Bridge.run_app

def run_app(self, ready=True, **kwargs) -> None:
    """
    启动 Web 应用服务器。

    参数:
        ready (bool): 是否调用 ready() 方法,默认为 True
        **kwargs: 传递给 aiohttp.web.run_app 的其他参数
    """

Bridge.beans

def beans(self, *beans) -> None:
    """
    注册 Bean 工厂函数,用于依赖注入。

    参数:
        *beans: 返回 Bean 实例的工厂函数
    """

Bridge.ready

def ready(self) -> None:
    """
    准备应用程序运行,设置 aiojobs 和信号处理器。
    """

Bridge.dump_openapi_components

def dump_openapi_components(self) -> dict:
    """
    生成应用程序的 OpenAPI 组件定义。

    返回:
        dict: 包含 schemas 定义的 OpenAPI 组件字典
    """

load_module_config

def load_module_config(app: Application, module_config_key: str, module_config_cls: Type[T]) -> T:
    """
    加载指定模块的配置。

    参数:
        app (Application): aiohttp的应用对象,包含全局配置信息。
        module_config_key (str): 在全局配置中查找模块配置的键名。
        module_config_cls (Type[T]): 用于校验和解析模块配置的Pydantic模型类,必须是pydantic.BaseModel的子类。

    返回:
        T: 解析后的模块配置实例。

    异常:
        TypeError: 如果module_config_cls不是pydantic.BaseModel的子类,则抛出此异常。
    """

Module

class Module:
    """
    进程级别的单例模块,兼容aiohttp的signals
    """
    def __init__(self) -> None: ...
    async def on_startup(self, app: Application) -> None: ...
    async def on_cleanup(self, app: Application) -> None: ...
    async def on_shutdown(self, app: Application) -> None: ...
    def load_config(self, app: Application) -> Any:
        """
        Example of override:
        >>> def load_config(self, app: Application) -> Annotated[MyAppConfig, 'myapp']:
        ...   return lessweb.load_module_config(app, 'myapp', MyAppConfig)
        """

Middleware

class Middleware:
    """
    请求级别的单例中间件,兼容aiohttp的middlewares
    """
    def __init__(self) -> None: ...
    async def on_request(self, request: Request, handler: HANDLER_TYPE) -> Response:
        """
        Example of override:
        >>> async def on_request(self, request: Request, handler: HANDLER_TYPE) -> Response:
        ...   return await handler(request)
        """

Service

class Service:
    """
    业务逻辑单例服务
    """
    def __init__(self) -> None: ...

autowire_module

def autowire_module(app: Application, cls: Type[T]) -> T:
    """
    进程级别单例模块注入,自动处理依赖关系。

    参数:
        app (Application): aiohttp 应用实例
        cls (Type[T]): 要注入的模块类

    返回:
        T: 模块实例
    """

autowire

def autowire(request: Request, cls: Type[U]) -> U:
    """
    请求级别的依赖注入,自动实例化中间件或服务对象。

    参数:
        request (Request): aiohttp 请求对象
        cls (Type[U]): 要注入的类

    返回:
        U: 类的实例
    """

rest_error

def rest_error(
        error: Type[HTTPError],
        data,
        *,
        headers: Optional[LooseHeaders] = None,
        **kwargs,
) -> HTTPError:
    return error(
        body=TypeCast.dumps(data),
        headers=headers,
        content_type='application/json',
        **kwargs,
    )

rest_response

def rest_response(
        data,
        *,
        status: int = 200,
        reason: Optional[str] = None,
        headers: Optional[LooseHeaders] = None,
) -> Response:
    response = Response(
        body=TypeCast.dumps(data),
        status=status,
        reason=reason,
        headers=headers,
        content_type='application/json',
    )
    return response

get_request_stack

def get_request_stack(request: Request) -> list[bytes]:
    """
    获取请求对象中保存的请求堆栈。

    参数:
        request (Request): aiohttp 的请求对象,通过 request 的字典属性存放中间件等过程中传递的数据堆栈,
                           该堆栈用于在处理请求过程中存放中间转换或验证后的数据(例如经过转换后的请求体)。

    返回:
        list[bytes]: 返回请求堆栈列表。如果请求对象中不存在该堆栈,则会在请求中初始化一个空列表后返回。
    """

push_request_stack

def push_request_stack(request: Request, value: bytes):
    """
    向请求对象的请求堆栈中添加一个值。

    参数:
        request (Request): aiohttp 的请求对象,其内部包含用于存储请求处理过程数据的堆栈。
        value (bytes): 要添加到堆栈中的数据值,必须为 bytes 类型。

    使用示例:
        在一个Middleware中,可能先对原始请求体进行读取和预处理:

            async def some_middleware(request, handler):
                raw_data = await request.read()
                push_request_stack(request, raw_data)
                # 对读取到的数据做进一步转换(例如转换为 JSON 后修改数据),转换后的数据也必须是 bytes 类型
                modified_data = ...
                push_request_stack(request, modified_data)
                return await handler(request)

        在后续处理 endpoint 中,可以使用 positional-only 参数,框架通过调用 get_request_stack(request) 
        获取堆栈列表,并对堆栈进行 pop 操作,将最后一次推入的数据提取出来作为 positional-only 参数传递给目标处理函数。
    """

EventEmitter

class EventEmitter(Module):
    """
    事件发射器类,用于注册事件处理函数并触发事件。

    该类继承自 Module,在应用启动时会为所有标记为事件订阅(使用 OnEvent 装饰器)的处理函数构建 HTTP POST 路由,
    从而实现事件的统一管理。触发事件时,该类会模拟一个 HTTP POST 请求,将事件名称和负载数据传递给相应的处理函数,
    支持同步返回响应,也能将事件处理后台异步执行。
    """

EventEmitter.emit

async def emit(self, event: str, payload: Any) -> StreamResponse:
    """
    触发指定的事件。
    通过构造模拟的 HTTP POST 请求,将 payload 序列化为 JSON 数据传入对应的事件处理路由中,
    根据处理函数是否标记为后台异步执行,返回相应的响应(异步时返回 204 状态码)。
    """

TypeCast

TypeCast.init_orjson_option

@classmethod
def init_orjson_option(cls, option_text: str) -> None:
    """
    初始化 orjson 的序列化选项。

    参数:
        option_text (str): 逗号分隔的选项字符串,如 'INDENT_2,SORT_KEYS'
    """

TypeCast.dumps

@classmethod
def dumps(cls, data: Any) -> bytes:
    """
    将数据序列化为 JSON 字节串。

    参数:
        data (Any): 要序列化的数据

    返回:
        bytes: JSON 字节串
    """

TypeCast.validate_json

@classmethod
def validate_json(cls, data: Union[str, bytes], tp: Type[T]) -> T:
    """
    将 JSON 数据验证并转换为指定类型。

    支持的类型:
        - list[pydantic.BaseModel]
        - pydantic.BaseModel

    验证过程:
        - 如果 T 是 list[pydantic.BaseModel],则逐个验证列表项
        - 如果 T 是 pydantic.BaseModel,则使用 pydantic 的 model_validate_json 方法

    参数:
        data (Union[str, bytes]): JSON 数据
        tp (Type[T]): 目标类型

    返回:
        T: 验证后的对象

    异常:
        ValueError: 数据无法解析为指定类型(4xx 错误)
        TypeError: 不支持的类型(5xx 错误)
    """

TypeCast.validate_query

@classmethod
def validate_query(cls, data: str, tp: Type[T]) -> T:
    """
    将查询字符串转换为指定类型。

    参数:
        data (str): 查询字符串
        tp (Type[T]): 目标类型

    返回:
        T: 转换后的值

    异常:
        ValueError: 数据无法转换为指定类型(4xx 错误)
        TypeError: 不支持的类型(5xx 错误)
    """

annotation.Endpoint

class Endpoint:
    """
    HTTP 端点注解基类。

    属性:
        method (HTTP_METHOD_TYPE): HTTP 方法
        path (str): 路由路径
    """

annotation.Get

class Get(Endpoint):
    """
    GET 请求端点注解。

    参数:
        path (str): 路由路径
    """

annotation.Post

class Post(Endpoint):
    """
    POST 请求端点注解。

    参数:
        path (str): 路由路径
    """

annotation.Put

class Put(Endpoint):
    """
    PUT 请求端点注解。

    参数:
        path (str): 路由路径
    """

annotation.Delete

class Delete(Endpoint):
    """
    DELETE 请求端点注解。

    参数:
        path (str): 路由路径
    """

annotation.Patch

class Patch(Endpoint):
    """
    PATCH 请求端点注解。

    参数:
        path (str): 路由路径
    """

annotation.DefaultFactory

class DefaultFactory:
    """
    DefaultFactory 用于为函数参数提供默认值生成器,通过传入一个无参可调用对象,
    当需要默认值时调用该工厂函数生成默认值。该类常用于注解中,用于描述参数的默认生成逻辑,
    类似于 dataclasses 中的 default_factory。

    示例用法:
    >>> async def foo(*, ids: Annotated(list[str], DefaultFactory(list)) -> Annotated[dict, Get('/')]:
    ...   pass

    注意:
    - factory_func 必须是一个不接受任何参数的可调用对象;
    - 在参数默认值处理中,当未提供具体值时,框架会调用该工厂函数返回默认值实例。
    """
    def __init__(self, factory_func) -> None: ...

annotation.OnEvent

class OnEvent:
    """
    OnEvent 是一个用于标记事件订阅的注解类。它允许开发者在定义endpoint函数时,
    标记函数为事件订阅,从而实现事件的统一管理。

    示例用法:
    async def foo_handle_event(request: Request) -> Annotated[dict, OnEvent('my_event_name')]:
        ...
    """
    def __init__(self, event: str, background: bool = False): ...

annotation.TextResponse

class TextResponse:
    """
    TextResponse 是一个用于指定 HTTP 响应内容类型的注解类。它允许开发者在定义endpoint函数时,
    明确指定返回的响应数据的 MIME 类型,默认为 'text/plain'。

    示例用法:
    async def text_endpoint() -> Annotated[str, TextResponse()]:
        return 'This is a text response.'
    """

annotation.Html

class Html(TextResponse):
    def __init__(self):
        super().__init__('text/html')

annotation.PlainText

class PlainText(TextResponse):
    """
    纯文本响应注解,内容类型为 'text/plain'。
    """
    def __init__(self):
        super().__init__('text/plain')