Commit 36651735 authored by jichao's avatar jichao

依赖注入实现中

parent 228349ea
from abc import ABCMeta, abstractmethod
class BaseBean(metaclass=ABCMeta):
@abstractmethod
def do_something(self):
pass
class ServiceBean(metaclass=ABCMeta):
@abstractmethod
def do_service(self):
pass
from api import BaseBean
from framework import component
@component(bean_name="one")
class OneImplBean(BaseBean):
def do_something(self):
print("one bean")
@component(bean_name="two")
class TwoImplBean(BaseBean):
def do_something(self):
print("two bean")
\ No newline at end of file
import os import os
import re import re
from functools import partial from functools import partial, reduce
from .base import * from .base import *
import yaml import yaml
...@@ -72,7 +72,7 @@ def env_var_constructor(loader, node, raw=False): ...@@ -72,7 +72,7 @@ def env_var_constructor(loader, node, raw=False):
return value if raw else yaml.safe_load(value) return value if raw else yaml.safe_load(value)
def get_config(config_name=None): def build_config(config_name=None):
CONFIG_NAME = config_name or 'config.yml' CONFIG_NAME = config_name or 'config.yml'
path = f'{get_project_path()}{os.path.sep}{CONFIG_NAME}' path = f'{get_project_path()}{os.path.sep}{CONFIG_NAME}'
with open(path, 'r', encoding='utf-8') as f: with open(path, 'r', encoding='utf-8') as f:
...@@ -89,4 +89,12 @@ yaml.add_implicit_resolver( ...@@ -89,4 +89,12 @@ yaml.add_implicit_resolver(
'!env_var', IMPLICIT_ENV_VAR_MATCHER, Loader=yaml.SafeLoader '!env_var', IMPLICIT_ENV_VAR_MATCHER, Loader=yaml.SafeLoader
) )
config = get_config() config = build_config()
def get_config(module: str):
result = config
if module:
for name in module.split('.'):
result = result[name] if name in result else {}
return result
import pandas as pd import pandas as pd
from framework import filter_weekend, config, dict_remove from framework import filter_weekend, config, dict_remove, get_config
from datas import navs from datas import navs
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from empyrical import sortino_ratio from empyrical import sortino_ratio
optimize_config = config['fund_pool']['fund_optimize'] if 'fund_pool' in config and 'fund_optimize' in config['fund_pool'] else {}
optimize_config = get_config(__name__)
sortino_config = [{**x, 'name': [f"sortino_{y[1]}_{y[0]}" for y in x.items() if y[0] != 'weight'][0]} for x in optimize_config['sortino_weight']] \ sortino_config = [{**x, 'name': [f"sortino_{y[1]}_{y[0]}" for y in x.items() if y[0] != 'weight'][0]} for x in optimize_config['sortino_weight']] \
if 'sortino_weight' in optimize_config else [] if 'sortino_weight' in optimize_config else []
......
from api import BaseBean, ServiceBean
from framework import autowired, component
@component
class ServiceImpl(ServiceBean):
@autowired
def __init__(self, base: BaseBean = None):
self._base = base
def do_service(self):
self._base.do_something()
\ No newline at end of file
from framework import logger, autowired from framework import logger
from api import ServiceBean
@autowired
def test(service: ServiceBean = None):
service.do_service()
if __name__ == '__main__': if __name__ == '__main__':
logger.info(dir()) logger.info(dir())
test()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment