Skip to content

Commit

Permalink
hub add help_part, get_part_module method
Browse files Browse the repository at this point in the history
  • Loading branch information
fasiondog committed Feb 23, 2025
1 parent c4b746f commit 4eb1f81
Showing 1 changed file with 43 additions and 4 deletions.
47 changes: 43 additions & 4 deletions hikyuu/hub.py
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,30 @@ def get_part(self, name, **kwargs):
pass
return part

@dbsession
def get_part_module(self, name):
"""获取指定策略部件
:param str name: 策略部件名称
:param kwargs: 其他部件相关参数
"""
name_parts = name.split('.')
checkif(
len(name_parts) < 2
or (name_parts[-2] not in ('af', 'cn', 'ev', 'mf', 'mm', 'pg', 'se', 'sg', 'sp', 'st', 'pf', 'sys', 'ind', 'other')),
name, PartNameError
)

# 未指定仓库名,则默认使用 'default' 仓库
part_name = 'default.{}'.format(name) if len(name_parts) == 2 else name
part_model = self._session.query(PartModel).filter_by(name=part_name).first()
checkif(part_model is None, part_name, PartNotFoundError, cause='仓库中不存在')
try:
part_module = importlib.import_module(part_model.module_name)
except ModuleNotFoundError:
raise PartNotFoundError(part_name, '请检查部件对应路径是否存在')
return part_module

@dbsession
def get_part_info(self, name):
"""获取策略部件信息
Expand All @@ -434,11 +458,15 @@ def get_part_info(self, name):
"""
part_model = self._session.query(PartModel).filter_by(name=name).first()
checkif(part_model is None, name, PartNotFoundError, cause='仓库中不存在')
try:
part_module = importlib.import_module(part_model.module_name)
except ModuleNotFoundError:
raise PartNotFoundError(name, '请检查部件对应路径是否存在')
return {
'name': name,
'author': part_model.author,
'version': part_model.version,
'doc': part_model.doc,
'doc': part_module.part.__doc__,
}

def print_part_info(self, name):
Expand All @@ -450,10 +478,7 @@ def print_part_info(self, name):
print('+---------+------------------------------------------------')
print('| version | ', info['version'])
print('+---------+------------------------------------------------')
# print('\n')
print(info['doc'])
# print('\n')
# print('----------------------------------------------------------')

@dbsession
def get_hub_path(self, name):
Expand Down Expand Up @@ -575,6 +600,9 @@ def print_part_info(name):
HubManager().print_part_info(name)


help_part = print_part_info


def get_hub_name_list():
"""返回仓库名称列表"""
return HubManager().get_hub_name_list()
Expand All @@ -588,6 +616,15 @@ def get_part_name_list(hub=None, part_type=None):
return HubManager().get_part_name_list(hub, part_type)


def get_part_module(part_name: str):
"""获取部件模块
:param str part_name: 部件名称
:return: 部件模块
:rtype: module
"""
return HubManager().get_part_module(part_name)


def get_current_hub(filename):
"""用于在仓库part.py中获取当前所在的仓库名。
示例: get_current_hub(__file__)
Expand All @@ -607,9 +644,11 @@ def get_current_hub(filename):
'update_hub',
'remove_hub',
'build_hub',
'help_part',
'get_part',
'get_hub_path',
'get_part_info',
'get_part_module',
'print_part_info',
'get_hub_name_list',
'get_part_name_list',
Expand Down

0 comments on commit 4eb1f81

Please sign in to comment.