aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tests/MyRule/core.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/MyRule/core.py')
-rw-r--r--tests/MyRule/core.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/MyRule/core.py b/tests/MyRule/core.py
new file mode 100644
index 00000000..acebe644
--- /dev/null
+++ b/tests/MyRule/core.py
@@ -0,0 +1,43 @@
+import os
+import importlib
+from typing import List
+from pydantic import BaseModel
+import asyncio
+
+class Rule(BaseModel):
+ name: str
+ config_name: str
+
+ async def success(self):
+ # 处理成功事件的逻辑
+ pass
+
+ async def fail(self):
+ # 处理失败事件的逻辑
+ pass
+
+async def load_rules_from_folder(folder_path: str) -> List[Rule]:
+ rules = []
+ for file_name in os.listdir(folder_path):
+ if file_name.endswith(".py"):
+ module_name = file_name[:-3]
+ module = importlib.import_module(module_name)
+ for name, obj in module.__dict__.items():
+ if isinstance(obj, type) and issubclass(obj, Rule) and obj != Rule:
+ rules.append(obj())
+ return rules
+
+async def process_event(rules: List[Rule], event: str):
+ tasks = []
+ for rule in rules:
+ if hasattr(rule, event):
+ task = getattr(rule, event)()
+ tasks.append(task)
+ await asyncio.gather(*tasks)
+
+async def main():
+ folder_path = "tests/MyRule/Rule"
+ rules = await load_rules_from_folder(folder_path)
+ await process_event(rules, "success")
+
+asyncio.run(main())