diff options
| author | 2024-03-15 16:35:20 +0800 | |
|---|---|---|
| committer | 2024-03-15 16:35:20 +0800 | |
| commit | 22a12ca6a6462b452585b63e1e3cf4005e8a5f30 (patch) | |
| tree | 938b9ed317e75fb0fd77dffb469b65155d846d57 | |
| parent | 04c968db6519aec55c014e99199a39c5f2ad224d (diff) | |
| download | infini-22a12ca6a6462b452585b63e1e3cf4005e8a5f30.tar.gz infini-22a12ca6a6462b452585b63e1e3cf4005e8a5f30.zip | |
feat(doc): add document
| -rw-r--r-- | src/infini/doc.py | 22 | ||||
| -rw-r--r-- | src/infini/register.py | 80 |
2 files changed, 93 insertions, 9 deletions
diff --git a/src/infini/doc.py b/src/infini/doc.py new file mode 100644 index 00000000..d5e4aea3 --- /dev/null +++ b/src/infini/doc.py @@ -0,0 +1,22 @@ +from typing import Dict, Optional, TypedDict + + +class Annotation(TypedDict): + usage: Optional[str] + description: Optional[str] + epilog: Optional[str] + + +class Doc: + pre_interceptors: Dict[str, Annotation] + handlers: Dict[str, Annotation] + events: Dict[str, Annotation] + global_variables: Dict[str, Annotation] + interceptors: Dict[str, Annotation] + + def __init__(self) -> None: + self.pre_interceptors = {} + self.handlers = {} + self.events = {} + self.global_variables = {} + self.interceptors = {} diff --git a/src/infini/register.py b/src/infini/register.py index 8ccff3d6..ab6762e7 100644 --- a/src/infini/register.py +++ b/src/infini/register.py @@ -1,3 +1,4 @@ +from infini.doc import Doc from infini.typing import List, Dict, Any, Callable, RouterType, Optional, Union, Type from infini.input import Input from infini.output import Output @@ -14,6 +15,8 @@ class Register: interceptors: List[RouterType] generators: Dict[str, BaseGenerator] + doc: Doc + def __init__(self) -> None: self.pre_interceptors = [] self.handlers = [] @@ -21,6 +24,7 @@ class Register: self.global_variables = {} self.interceptors = [] self.generators = {} + self.doc = Doc() def pre_interceptor( self, @@ -28,20 +32,30 @@ class Register: *, priority: int = 0, namespace: Optional[str] = None, + usage: Optional[str] = None, + description: Optional[str] = None, + epilog: Optional[str] = None, ): def decorator(func): @wraps(func) def wrapper(*args, **kwargs) -> Union[Input, Output]: return func(*args, **kwargs) + _router = Contains(router) if isinstance(router, str) else router self.pre_interceptors.append( { "priority": priority, - "router": Contains(router) if isinstance(router, str) else router, + "router": _router, "handler": wrapper, - "namespace": namespace, } ) + self.doc.pre_interceptors[ + namespace or _router.namespace or func.__name__ + ] = { + "usage": usage, + "description": description, + "epilog": epilog, + } return wrapper return decorator @@ -52,37 +66,77 @@ class Register: *, priority: int = 0, namespace: Optional[str] = None, + usage: Optional[str] = None, + description: Optional[str] = None, + epilog: Optional[str] = None, ): + """注册一个业务函数""" + def decorator(func): @wraps(func) def wrapper(*args, **kwargs) -> Output: return func(*args, **kwargs) + _router = Contains(router) if isinstance(router, str) else router self.handlers.append( { "priority": priority, - "router": Contains(router) if isinstance(router, str) else router, + "router": _router, "handler": wrapper, - "namespace": namespace, } ) + self.doc.handlers[namespace or _router.namespace or func.__name__] = { + "usage": usage, + "description": description, + "epilog": epilog, + } return wrapper return decorator - def register_textevent(self, name: str, text: str): + def register_textevent( + self, name: str, text: str, *, description: Optional[str] = None + ): self.events[name] = text + self.doc.events[name] = { + "usage": None, + "description": description, + "epilog": None, + } - def register_variable(self, name: str, data: Any): + def register_variable( + self, + name: str, + data: Any, + *, + usage: Optional[str] = None, + description: Optional[str] = None, + ): self.global_variables[name] = data + self.doc.global_variables[name] = { + "usage": usage, + "description": description, + "epilog": None, + } - def dynamic_variable(self, name: Optional[str] = None): + def dynamic_variable( + self, + name: Optional[str] = None, + *, + usage: Optional[str] = None, + description: Optional[str] = None, + ): def decorator(func): @wraps(func) def wrapper(*args, **kwargs) -> str: return func(*args, **kwargs) self.global_variables[name or func.__name__] = wrapper + self.doc.global_variables[name or func.__name__] = { + "usage": usage, + "description": description, + "epilog": None, + } return wrapper return decorator @@ -93,20 +147,28 @@ class Register: *, priority: int = 0, namespace: Optional[str] = None, + usage: Optional[str] = None, + description: Optional[str] = None, + epilog: Optional[str] = None, ): def decorator(func): @wraps(func) def wrapper(*args, **kwargs) -> Union[Input, Output]: return func(*args, **kwargs) + _router = Contains(router) if isinstance(router, str) else router self.interceptors.append( { "priority": priority, - "router": Contains(router) if isinstance(router, str) else router, + "router": _router, "handler": wrapper, - "namespace": namespace, } ) + self.doc.interceptors[namespace or _router.namespace or func.__name__] = { + "usage": usage, + "description": description, + "epilog": epilog, + } return wrapper return decorator |
