__init__.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # -*- coding:utf-8 -*-
  2. """
  3. @author: yq
  4. @time: 2022/10/24
  5. @desc: 指标计算相关
  6. """
  7. import threading
  8. from commom import f_get_clazz_in_module, GeneralException
  9. from enums import ResultCodesEnum
  10. from .metric_base import MetricBase
  11. from .metric_by_sql_general import MetricBySqlGeneral
  12. __all__ = ['f_get_metric_clazz_dict', 'f_register_metric_func', 'MetricBase', 'MetricBySqlGeneral']
  13. lock = threading.Lock()
  14. metric_clazz_dict = {}
  15. def _update_metric_clazz_dict(key, value):
  16. with lock:
  17. if key in metric_clazz_dict.keys():
  18. raise GeneralException(ResultCodesEnum.ILLEGAL_PARAMS, message=f"自定义指标函数【{key}】已注册或出现重名")
  19. metric_clazz_dict[key] = value
  20. def f_register_metric_func(clazz: MetricBase):
  21. if not hasattr(clazz, '_symbol') or not clazz._symbol == MetricBase._symbol:
  22. raise GeneralException(ResultCodesEnum.ILLEGAL_PARAMS, message=f"自定义指标函数没有继承类【MetricBase】")
  23. _update_metric_clazz_dict(clazz.__name__, clazz)
  24. def f_get_metric_clazz_dict():
  25. return metric_clazz_dict
  26. all_classes = f_get_clazz_in_module(__import__(__name__))
  27. for clazz in all_classes:
  28. if not hasattr(clazz, '_symbol') or not clazz._symbol == MetricBase._symbol:
  29. continue
  30. f_register_metric_func(clazz)
  31. if __name__ == "__main__":
  32. pass