From 1d9a500b727e8879cdaeb9c378ac717001c56ccc Mon Sep 17 00:00:00 2001 From: 苏向夜 Date: Sat, 27 Jan 2024 22:27:41 +0800 Subject: :sparkles: feat(router): supports alias router --- src/infini/register.py | 8 ++++---- src/infini/router.py | 25 ++++++++++++++++--------- 2 files changed, 20 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/infini/register.py b/src/infini/register.py index 3be22343..391fcf63 100644 --- a/src/infini/register.py +++ b/src/infini/register.py @@ -1,6 +1,6 @@ from infini.input import Input from infini.output import Output -from infini.router import ContainsRouter, Router +from infini.router import Contains, Router from infini.typing import List, Dict, Any, Callable, RouterType from functools import wraps @@ -28,7 +28,7 @@ class Register: self.pre_interceptors.append( { "priority": priority, - "router": ContainsRouter(router) + "router": Contains(router) if isinstance(router, str) else router, "handler": wrapper, @@ -47,7 +47,7 @@ class Register: self.handlers.append( { "priority": priority, - "router": ContainsRouter(router) + "router": Contains(router) if isinstance(router, str) else router, "handler": wrapper, @@ -83,7 +83,7 @@ class Register: self.interceptors.append( { "priority": priority, - "router": ContainsRouter(router) + "router": Contains(router) if isinstance(router, str) else router, "handler": wrapper, diff --git a/src/infini/router.py b/src/infini/router.py index 1174721e..4b781ad9 100644 --- a/src/infini/router.py +++ b/src/infini/router.py @@ -1,23 +1,30 @@ +from infini.typing import Sequence, List + + class Router: - sign: str + signs: List[str] - def __init__(self, sign: str) -> None: - self.sign = sign + def __init__(self, sign: str, alias: Sequence[str] = []) -> None: + self.signs = [sign] + self.signs.extend(alias) def match(self, input: str) -> bool: - return self.sign == input.strip() + return any([input == sign for sign in self.signs]) -class StartswithRouter(Router): +class Startswith(Router): def match(self, input: str) -> bool: - return input.strip().startswith(self.sign) + input = input.strip() + return any([input.startswith(sign) for sign in self.signs]) -class ContainsRouter(Router): +class Contains(Router): def match(self, input: str) -> bool: - return self.sign in input.strip() + input = input.strip() + return any([sign in input for sign in self.signs]) class Endswith(Router): def match(self, input: str) -> bool: - return input.strip().endswith(self.sign) + input = input.strip() + return any([input.endswith(sign) for sign in self.signs]) -- cgit v1.2.3-70-g09d2