123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- # -*- coding:utf-8 -*-
- """
- @author: yq
- @time: 2022/10/24
- @desc: 指标计算相关
- """
- import threading
- from commom import f_get_clazz_in_module, GeneralException
- from enums import ResultCodesEnum
- from .metric_base import MetricBase
- from .metric_by_sql_general import MetricBySqlGeneral
- __all__ = ['f_get_metric_clazz_dict', 'f_register_metric_func', 'MetricBase', 'MetricBySqlGeneral']
- lock = threading.Lock()
- metric_clazz_dict = {}
- def _update_metric_clazz_dict(key, value):
- with lock:
- if key in metric_clazz_dict.keys():
- raise GeneralException(ResultCodesEnum.ILLEGAL_PARAMS, message=f"自定义指标函数【{key}】已注册或出现重名")
- metric_clazz_dict[key] = value
- def f_register_metric_func(clazz: MetricBase):
- if not hasattr(clazz, '_symbol') or not clazz._symbol == MetricBase._symbol:
- raise GeneralException(ResultCodesEnum.ILLEGAL_PARAMS, message=f"自定义指标函数没有继承类【MetricBase】")
- _update_metric_clazz_dict(clazz.__name__, clazz)
- def f_get_metric_clazz_dict():
- return metric_clazz_dict
- all_classes = f_get_clazz_in_module(__import__(__name__))
- for clazz in all_classes:
- if not hasattr(clazz, '_symbol') or not clazz._symbol == MetricBase._symbol:
- continue
- f_register_metric_func(clazz)
- if __name__ == "__main__":
- pass
|