result.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from typing import TYPE_CHECKING, List, Literal, Tuple, TypedDict
  2. from loguru import logger
  3. if TYPE_CHECKING:
  4. from .unit import TimeUnit # noqa: F401
  5. class DeltaType(TypedDict):
  6. year: int
  7. month: int
  8. day: int
  9. hour: int
  10. minute: int
  11. second: int
  12. class Result(dict):
  13. @staticmethod
  14. def from_invalid() -> "Error":
  15. return Error(error="no time pattern could be extracted.")
  16. @staticmethod
  17. def from_timedelta(delta_dict: DeltaType) -> "Delta":
  18. # logger.debug(f"time_delta: {delta_dict}")
  19. return Delta(delta_dict)
  20. @staticmethod
  21. def from_timestamp(result: List["TimeUnit"]) -> "Stamp":
  22. return Stamp(result[0].time.format("YYYY-MM-DD HH:mm:ss"))
  23. @staticmethod
  24. def from_timespan(result: List["TimeUnit"]) -> "Span":
  25. return Span(
  26. timespan=[
  27. result[0].time.format("YYYY-MM-DD HH:mm:ss"),
  28. result[1].time.format("YYYY-MM-DD HH:mm:ss"),
  29. ]
  30. )
  31. @property
  32. def type(
  33. self,
  34. ) -> Tuple[
  35. Literal["error"],
  36. Literal["timestamp"],
  37. Literal["timedelta"],
  38. Literal["timespan"],
  39. ]:
  40. """
  41. 结果类型,有 ``error``、``timespan``、``timedelta``、``timestamp``。
  42. """
  43. return self["type"]
  44. class Error(Result):
  45. __slot__ = "type", "error"
  46. def __init__(self, error) -> None:
  47. self["type"] = "error"
  48. self["error"] = error
  49. class Delta(Result):
  50. __slot__ = "type", "timedelta"
  51. def __init__(self, timedelta: DeltaType) -> None:
  52. self["type"] = "timedelta"
  53. self["timedelta"] = timedelta
  54. class Stamp(Result):
  55. __slot__ = "type", "timestamp"
  56. def __init__(self, timestamp: str) -> None:
  57. self["type"] = "timestamp"
  58. self["timestamp"] = timestamp
  59. class Span(Result):
  60. __slot__ = "type", "timespan"
  61. def __init__(self, timespan) -> None:
  62. self["type"] = "timespan"
  63. self["timespan"] = timespan