46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
from argparse import ArgumentParser
|
|
|
|
from loguru import logger
|
|
|
|
from .info import Info
|
|
from .providers import get_provider
|
|
|
|
|
|
class Parser:
|
|
params = None
|
|
provider = None
|
|
|
|
def __init__(self, args):
|
|
self.params = {}
|
|
self.args = args
|
|
self._add_params(args)
|
|
|
|
def _add_params(self, params: ArgumentParser = None):
|
|
if params is None:
|
|
params = self.args.parse_args()
|
|
else:
|
|
params = params.parse_args()
|
|
self.params = params.__dict__
|
|
|
|
def init_provider(
|
|
self,
|
|
progress: callable = None,
|
|
log: callable = None,
|
|
quest: callable = None,
|
|
info: Info = None,
|
|
quest_password: callable = None,
|
|
):
|
|
provider = get_provider(self.params.get('url', ''))
|
|
if isinstance(provider, bool):
|
|
raise AttributeError('Provider not found')
|
|
self.provider = provider(info) # provider __init__
|
|
|
|
self.provider.set_progress_callback(None if self.params['quiet'] else progress)
|
|
self.provider.set_log_callback(log)
|
|
self.provider.set_quest_callback(quest)
|
|
self.provider.set_quest_password_callback(quest_password)
|
|
|
|
@logger.catch
|
|
def start(self):
|
|
self.provider.process(self.params['url'], self.params)
|