From be8de118db913711eb72ae5187d26e54a0055727 Mon Sep 17 00:00:00 2001 From: 简律纯 Date: Fri, 15 Dec 2023 09:11:47 +0800 Subject: refactor(docs): optmst `docs` dir & `deps` --- src/hydrorollcore/__init__.py | 6 --- src/hydrorollcore/cli.py | 45 --------------------- src/hydrorollcore/consts/__init__.py | 0 src/hydrorollcore/consts/templates.py | 69 -------------------------------- src/hydrorollcore/event.py | 43 -------------------- src/hydrorollcore/exceptions.py | 6 --- src/hydrorollcore/logging.py | 40 ------------------- src/hydrorollcore/manager.py | 18 --------- src/hydrorollcore/rule.py | 75 ----------------------------------- src/hydrorollcore/settings.py | 1 - src/hydrorollcore/typing.py | 41 ------------------- 11 files changed, 344 deletions(-) delete mode 100644 src/hydrorollcore/__init__.py delete mode 100644 src/hydrorollcore/cli.py delete mode 100644 src/hydrorollcore/consts/__init__.py delete mode 100644 src/hydrorollcore/consts/templates.py delete mode 100644 src/hydrorollcore/event.py delete mode 100644 src/hydrorollcore/exceptions.py delete mode 100644 src/hydrorollcore/logging.py delete mode 100644 src/hydrorollcore/manager.py delete mode 100644 src/hydrorollcore/rule.py delete mode 100644 src/hydrorollcore/settings.py delete mode 100644 src/hydrorollcore/typing.py (limited to 'src/hydrorollcore') diff --git a/src/hydrorollcore/__init__.py b/src/hydrorollcore/__init__.py deleted file mode 100644 index 9c88b4f9..00000000 --- a/src/hydrorollcore/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from infini.cli import Cli -from infini.rule import Rule, Result, Dice -from infini.typing import Config as ConfigTyping -from infini.event import Event - -__all__ = ["Rule", "Cli", "Result", "Dice", "Event", "ConfigTyping"] diff --git a/src/hydrorollcore/cli.py b/src/hydrorollcore/cli.py deleted file mode 100644 index e372b4b4..00000000 --- a/src/hydrorollcore/cli.py +++ /dev/null @@ -1,45 +0,0 @@ -from pathlib import Path -from .consts import templates -from .logging import logger - -import argparse -import os -import sys -import importlib - - -class Cli: - def parse_args(self, argv: list[str] | None = None): - parser = argparse.ArgumentParser(description="HydroRoll 命令行工具") - - parser.add_argument("--new", action="store_true", help="创建一个 HydroRoll 规则包模板") - parser.add_argument("--run", action="store_true", help="运行 HydroRoll 规则包") - parser.add_argument("--gui", action="store_true", help="显示弹窗") - parser.add_argument("--path", help="指定路径") - - args = parser.parse_args(argv if argv else sys.argv[1:]) - - if args.gui: - logger.critical("选项[--gui]尚未被支持!") - sys.exit(1) - - path = Path(args.path).resolve() if args.path else Path(os.getcwd()).resolve() - if args.new and args.run: - logger.error("无法确定的指令要求: 你同时指定了new与run指令。") - sys.exit(1) - - if args.new: - if path.exists(): - logger.error("指定的文件夹已经存在!") - sys.exit(1) - - path.mkdir(parents=True, exist_ok=True) - (path / "rule.py").write_text(templates.RULE, encoding="utf-8") - (path / "event.py").write_text(templates.EVENT, encoding="utf-8") - (path / "dice.py").write_text(templates.DICE, encoding="utf-8") - - logger.success("HydroRoll 规则包模板已创建!") - - if args.run: - sys.path.append(str(path)) - importlib.import_module("event") diff --git a/src/hydrorollcore/consts/__init__.py b/src/hydrorollcore/consts/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/hydrorollcore/consts/templates.py b/src/hydrorollcore/consts/templates.py deleted file mode 100644 index e2edc2d6..00000000 --- a/src/hydrorollcore/consts/templates.py +++ /dev/null @@ -1,69 +0,0 @@ -RULE = """from infini import Rule, Result, Dice - - -class MyRule(Rule): - \"\"\"自设规则包\"\"\" - - name = "MyRule" - priority: int = 0 - - def __init__(self) -> None: - \"\"\"初始化你的规则包\"\"\" - - def check(self, dice: Dice) -> Result: - \"\"\"声明规则包检定方式\"\"\" - return Result("myevent.event1", True) -""" - -EVENT = """from infini import Event - -__events__ = ["MyEvent"] - - -class MyEvent(Event): - name = "event1" - output = "检定成功!" -""" - -DICE = """from infini import Dice - -import random -import re - - -class BaseDice(Dice): - \"\"\"多面骰\"\"\" - - def __init__(self, roll_string: str = "") -> None: - self.roll_string = roll_string - self.parse() - - def parse(self) -> "Dice": - self.dices = [] - split = re.split(r"[dD]", self.roll_string) - - if split[0]: - self.a = int(split[0]) - else: - self.a = 1 - - if split[1]: - self.b = int(split[1]) - else: - self.b = 100 - - self.db = f"{self.a}D{self.b}" - self.dices += [f"D{self.b}"] * self.a - return self - - def roll(self) -> int: - self.results = [] - - for _ in range(self.a): - result = random.randint(1, self.b) - - self.results.append(result) - - self.outcome = sum(self.results) - return self.outcome -""" diff --git a/src/hydrorollcore/event.py b/src/hydrorollcore/event.py deleted file mode 100644 index 9ce34bd9..00000000 --- a/src/hydrorollcore/event.py +++ /dev/null @@ -1,43 +0,0 @@ -from .typing import Dict -from .logging import logger - -import re - -__all__ = ["Event", "events"] - - -class Events: - """事件集合""" - - _events: Dict[str, str] = {} - - def regist(self, name: str, output: str) -> None: - self._events[name.lower()] = output - - def process(self, name: str, **kwargs) -> str: - if string := self._events.get(name.lower()): - return self._format(string, **kwargs) - logger.warning(f"事件[{name.lower()}]不存在,将返回空字符串!") - return "" - - def _format(self, string: str, **kwargs): - pattern = r"{(.*?)}" - values = re.findall(pattern, string) - for value in values: - kwarg = kwargs.get(value) - value = kwarg if kwarg else "" - string = re.sub(pattern, value, string) - return string - - -class Event: - """事件基类""" - - name: str - output: str - - def __init_subclass__(cls) -> None: - events.regist(cls.name, cls.output) - - -events = Events() diff --git a/src/hydrorollcore/exceptions.py b/src/hydrorollcore/exceptions.py deleted file mode 100644 index 62c88fa1..00000000 --- a/src/hydrorollcore/exceptions.py +++ /dev/null @@ -1,6 +0,0 @@ -class HydroError(Exception): - """HydroRoll 异常基类""" - - -class RuleLoadError(HydroError): - """规则导入错误""" diff --git a/src/hydrorollcore/logging.py b/src/hydrorollcore/logging.py deleted file mode 100644 index a1458ef4..00000000 --- a/src/hydrorollcore/logging.py +++ /dev/null @@ -1,40 +0,0 @@ -"""infini 日志。 - -infini 使用 [loguru](https://github.com/Delgan/loguru) 来记录日志信息。 -自定义 logger 请参考 [loguru](https://github.com/Delgan/loguru) 文档。 -""" -from datetime import datetime -from multilogging import multilogger -from pathlib import Path -from .settings import DEBUG - - -__all__ = ["logger", "error_or_exception"] - -logger = multilogger( - name="HydroRoll", payload="Core", level="DEBUG" if DEBUG else "INFO" -) -current_path = Path(__file__).resolve().parent -LOG_PATH = current_path / "logs" -if not LOG_PATH.exists(): - LOG_PATH.mkdir(parents=True, exist_ok=True) -logger.add( - sink=LOG_PATH / (datetime.now().strftime("%Y-%m-%d") + ".log"), - level="INFO", - rotation="10 MB", -) # 每个日志文件最大为 10MB - - -def error_or_exception(message: str, exception: Exception, verbose: bool = True): - # 弃用的方法 - # logger.remove() - # logger.add( - # sys.stderr, - # format="{time:YYYY-MM-DD HH:mm:ss.SSS} [{level}] > {name}:{function}:{line} - {message}", - # ) - - if verbose: - logger.exception(exception) - logger.critical(message) - else: - logger.critical(f"{message} {exception!r}") diff --git a/src/hydrorollcore/manager.py b/src/hydrorollcore/manager.py deleted file mode 100644 index 42e79563..00000000 --- a/src/hydrorollcore/manager.py +++ /dev/null @@ -1,18 +0,0 @@ -from .event import Events, events -from .logging import logger -from .typing import Dict - - -class Manager: - """事件处理单元""" - - events: Events - - def __init__(self, _events: Events = None) -> None: - self.events = _events if _events else events - - def roll(self): - ... - - -manager = Manager() diff --git a/src/hydrorollcore/rule.py b/src/hydrorollcore/rule.py deleted file mode 100644 index a1f04151..00000000 --- a/src/hydrorollcore/rule.py +++ /dev/null @@ -1,75 +0,0 @@ -from abc import ABCMeta, abstractmethod -from enum import Enum -from .exceptions import HydroError -from .typing import Dict - -__all__ = ["RuleLoadType", "Result", "Dice", "Rule"] - - -class RuleLoadType(Enum): - """The Type Of Rules To Be Loaded""" - - DIR = "dir" - NAME = "name" - FILE = "file" - CLASS = "class" - - -class Result(metaclass=ABCMeta): - """规则检定结果基类""" - - event: str - status: bool - exception: HydroError | None = None - - def __init__(self, event: str, status: bool, exception: HydroError | None) -> None: - self.event = event - self.status = status - self.exception = exception - - def ok(self): - """规则执行期间是否产生异常""" - return isinstance(self.exception, HydroError) - - -class Dice(metaclass=ABCMeta): - """掷骰基类""" - - roll_string: str - db: str - outcome: int - - def __repr__(self) -> str: - return f'' - - def __str__(self) -> str: - return self.db.upper() - - def __int__(self) -> int: - return self.outcome - - @abstractmethod - def parse(self) -> "Dice": - """解析传入的掷骰字符串`roll_string`,返回一个`Dice`对象""" - raise NotImplementedError - - @abstractmethod - def roll(self) -> int: - """掷骰方法,返回掷骰结果""" - raise NotImplementedError - - -class Rule(metaclass=ABCMeta): - """规则基类""" - - name: str - dices: Dict[str, str] = {} - priority: int = 0 - - @abstractmethod - def __init__(self) -> None: - raise NotImplementedError - - @abstractmethod - def check(self, dice: Dice) -> Result: - raise NotImplementedError diff --git a/src/hydrorollcore/settings.py b/src/hydrorollcore/settings.py deleted file mode 100644 index 51c64dd2..00000000 --- a/src/hydrorollcore/settings.py +++ /dev/null @@ -1 +0,0 @@ -DEBUG = True diff --git a/src/hydrorollcore/typing.py b/src/hydrorollcore/typing.py deleted file mode 100644 index 333a763b..00000000 --- a/src/hydrorollcore/typing.py +++ /dev/null @@ -1,41 +0,0 @@ -from pydantic import BaseModel -from typing import ( - Dict as Dict, - TYPE_CHECKING as TYPE_CHECKING, - TypeVar as TypeVar, - Callable as Callable, - NoReturn as NoReturn, - Awaitable as Awaitable, -) - - -class Config(BaseModel): - rule_dir: list = [] - rules: list = [] - - -class DiceConfig(BaseModel): - sides: int - counts: int - init_dice_pool: int - - -class PlayerCard(BaseModel): - name: str - traits: list - - -class Bonus(BaseModel): - level: int - cost: int - - -class WikiPage(BaseModel): - title: str - content: str - tags: list = [] - - -class WikiModel: - class Setting(BaseModel): - desc: str -- cgit v1.2.3-70-g09d2