aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author苏向夜 <fu050409@163.com>2024-03-15 16:35:20 +0800
committer苏向夜 <fu050409@163.com>2024-03-15 16:35:20 +0800
commit22a12ca6a6462b452585b63e1e3cf4005e8a5f30 (patch)
tree938b9ed317e75fb0fd77dffb469b65155d846d57
parent04c968db6519aec55c014e99199a39c5f2ad224d (diff)
downloadinfini-22a12ca6a6462b452585b63e1e3cf4005e8a5f30.tar.gz
infini-22a12ca6a6462b452585b63e1e3cf4005e8a5f30.zip
feat(doc): add document
-rw-r--r--src/infini/doc.py22
-rw-r--r--src/infini/register.py80
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