Files
biliup/engine/__init__.py
T
2020-12-03 18:17:04 +08:00

60 lines
1.8 KiB
Python

import asyncio
import yaml
from common.decorators import Plugin
from common.event import Event, event_manager
from common.reload import AutoReload
from common.timer import Timer
with open(r'config.yaml', encoding='utf-8') as stream:
config = yaml.load(stream, Loader=yaml.FullLoader)
def invert_dict(d: dict):
inverse_dict = {}
for k, v in d.items():
for item in v:
inverse_dict[item] = k
return inverse_dict
async def main():
import engine.plugins
streamers = config['streamers']
streamer_url = {k: v['url'] for k, v in streamers.items()}
inverted_index = invert_dict(streamer_url)
urls = list(inverted_index.keys())
url_status = dict.fromkeys(inverted_index, 0)
checker = Plugin(engine.plugins).sorted_checker(urls)
# 初始化事件管理器
context = {**config, 'urls': urls, 'url_status': url_status,
'checker': checker, 'inverted_index': inverted_index, 'streamer_url': streamer_url}
event_manager.context = context
import engine.handler
event_manager.start()
platforms = checker.keys()
def check_timer():
event_manager.send_event(Event(CHECK_UPLOAD))
for k in platforms:
event_manager.send_event(Event(CHECK, (k,)))
# 初始化定时器
timer = Timer(func=check_timer, interval=40)
# 模块更新自动重启
detector = AutoReload(event_manager, timer, interval=15)
await asyncio.gather(detector.astart(), timer.astart(), return_exceptions=True)
CHECK = 'check'
CHECK_UPLOAD = 'check_upload'
TO_MODIFY = 'to_modify'
DOWNLOAD = 'download'
BE_MODIFIED = 'be_modified'
UPLOAD = 'upload'
__all__ = ['downloader', 'uploader', 'plugins', 'main',
'CHECK', 'BE_MODIFIED', 'DOWNLOAD', 'TO_MODIFY', 'UPLOAD', 'CHECK_UPLOAD']