"""
|
代码板块管理
|
"""
|
from local_api.log_module import async_log_util, log_export
|
from local_api.log_module.log import logger_kpl_block, printlog
|
from local_api.util import kpl_api, constant, kpl_util, tool
|
from local_api.util.juejin_util import JueJinApi
|
|
|
class CodeKPLBlockManager:
|
__instance = None
|
# 代码板块管理
|
__code_block_cache_dict = {}
|
# 上一个交易日的板块
|
__code_before_block_cache_dict = {}
|
|
def __new__(cls, *args, **kwargs):
|
if not cls.__instance:
|
cls.__instance = super(CodeKPLBlockManager, cls).__new__(cls, *args, **kwargs)
|
cls.__load_datas()
|
return cls.__instance
|
|
@classmethod
|
def __load_datas(cls):
|
# 加载今日和上个交易日的数据
|
today = tool.get_now_date_str()
|
last_day = JueJinApi().get_previous_trading_date(today)
|
printlog("获取上个交易日", last_day)
|
block_dict = log_export.load_kpl_blocks(today)
|
for code in block_dict:
|
cls.__code_block_cache_dict[code] = block_dict[code]
|
|
block_dict = log_export.load_kpl_blocks(last_day)
|
for code in block_dict:
|
cls.__code_before_block_cache_dict[code] = block_dict[code]
|
|
def get_blocks(self, code):
|
"""
|
获取代码的板块,优先今日获取到的板块
|
:param code:
|
:return:
|
"""
|
blocks = self.__code_block_cache_dict.get(code)
|
if blocks:
|
return blocks
|
blocks = self.__code_before_block_cache_dict.get(code)
|
return blocks
|
|
|
def get_codes_count_info(self):
|
"""
|
获取代码数量信息
|
:return:(当日板块的代码数量,上个交易日的代码数量)
|
"""
|
return len(self.__code_block_cache_dict), len(self.__code_before_block_cache_dict)
|
|
def __request_block(self, code, force=False):
|
if code in self.__code_block_cache_dict and not force:
|
return
|
blocks = kpl_api.getCodeBlocks(code)
|
fblocks = set()
|
if blocks:
|
for b in blocks:
|
if b not in constant.KPL_INVALID_BLOCKS:
|
fblocks.add(kpl_util.filter_block(b))
|
self.__code_block_cache_dict[code] = fblocks
|
async_log_util.info(logger_kpl_block, f"{code}#{fblocks}")
|
|
def request_block(self, codes, force=False):
|
"""
|
请求板块
|
:param codes: 代码集合
|
:param force: 是否强制求情
|
:return:
|
"""
|
if type(codes) == str:
|
self.__request_block(codes, force)
|
else:
|
for code in codes:
|
self.__request_block(code, force)
|