|
@@ -4,22 +4,42 @@
|
|
@time: 2022/10/24
|
|
@time: 2022/10/24
|
|
@desc: 指标计算相关
|
|
@desc: 指标计算相关
|
|
"""
|
|
"""
|
|
-from typing import Dict
|
|
|
|
|
|
|
|
-from commom import f_get_clazz_in_module
|
|
|
|
|
|
+import threading
|
|
|
|
+
|
|
|
|
+from commom import f_get_clazz_in_module, GeneralException
|
|
|
|
+from enums import ResultCodesEnum
|
|
from .metric_base import MetricBase
|
|
from .metric_base import MetricBase
|
|
from .metric_by_sql_general import MetricBySqlGeneral
|
|
from .metric_by_sql_general import MetricBySqlGeneral
|
|
|
|
|
|
-__all__ = ['f_get_metric_clazz_dict', 'MetricBase', '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():
|
|
def f_get_metric_clazz_dict():
|
|
- all_classes = f_get_clazz_in_module(__import__(__name__))
|
|
|
|
- metric_clazz_dict = {}
|
|
|
|
- for cls in all_classes:
|
|
|
|
- metric_clazz_dict[cls.__name__] = cls
|
|
|
|
return 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__":
|
|
if __name__ == "__main__":
|
|
pass
|
|
pass
|