From 0527195e7d0f000d10227f25d43caaa12a91a6e1 Mon Sep 17 00:00:00 2001 From: Alliumcepa Date: Thu, 9 Nov 2017 23:39:27 -0500 Subject: [PATCH] 2.018 add "force" cli option and "ignored_errors" config option #34 --- CHANGELOG.md | 1 + README.MD | 4 +++- xeHentai/cli.py | 20 ++++++++++++++++++++ xeHentai/core.py | 6 +++++- xeHentai/i18n/en_us.py | 1 + xeHentai/i18n/zh_hans.py | 3 ++- xeHentai/i18n/zh_hant.py | 3 ++- 7 files changed, 34 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3e12dc..91c315e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - 增加`download_range`选项,选择下载范围 - 增加`timeout`选项,设置下载图片的超时 - 增加`proxy_image_only`选项,设置仅使用代理下载图片 +- 命令行增加`--force`选项,设置忽略配额继续下载; 配置增加`ignored_errors`选项,设置忽略的错误码 - 检查下载的图片是否完整 - 识别`socks5h`代理字符串 diff --git a/README.MD b/README.MD index f130b73..d1f651e 100644 --- a/README.MD +++ b/README.MD @@ -47,6 +47,7 @@ xeH - **scan_thread_cnt** 扫描线程数,默认为1 - **download_thread_cnt** 下载线程数,默认为5 - **download_timeout** 设置下载图片的超时,默认为10 + - **ignored_errors** 设置忽略的错误码, 默认为空, 错误码可以从`const.py`中获得 - **log_path** 日志路径,默认为`eh.log` - **log_verbose** 日志等级,可选1-3,值越大输出越详细,默认为2 - **save_tasks** 是否保存任务到`h.json`,默认为否 @@ -94,7 +95,8 @@ xeH 设置下载的图片范围, 格式为 开始位置-结束位置, 或者单张图片的位置, 使用逗号来分隔多个范围, 例如 5-10,15,20-25, 默认为下载所有 -t N, --thread N 下载线程数 (默认: 5) - --timeout N 设置下载图片的超时 (默认: 10s) + --timeout N 设置下载图片的超时 (默认: 10秒) + -f, --force 忽略配额判断,继续下载 (默认: False) -l /path/to/eh.log, --logpath /path/to/eh.log 保存日志的路径 (默认: eh.log) -v, --verbose 设置日志装逼等级 (默认: 2) diff --git a/xeHentai/cli.py b/xeHentai/cli.py index ee2e751..351b863 100644 --- a/xeHentai/cli.py +++ b/xeHentai/cli.py @@ -106,6 +106,21 @@ def _parse_range(s): rg.append((start, end)) return sorted(rg) +class _AddToListAction(argparse.Action): + ''' This action add a value 'add_value' to the list 'dest' ''' + def __init__(self, option_strings, dest, add_value=None, current=None, nargs=None, **kwargs): + super(_AddToListAction, self).__init__(option_strings, dest, default=None, nargs=0, **kwargs) + self.add_value = add_value + # to use in formatting output + self.current = current + + def __call__(self, parser, namespace, values, option_string=None): + if getattr(namespace, self.dest, None) is None: + setattr(namespace, self.dest, []) + items = list(getattr(namespace, self.dest)) + items.append(self.add_value) + setattr(namespace, self.dest, items) + def parse_opt(): _def = {k:v for k,v in default_config.__dict__.items() if not k.startswith("_")} _def.update({k:v for k,v in config.__dict__.items() if not k.startswith("_")}) @@ -158,6 +173,11 @@ def parse_opt(): help = i18n.XEH_OPT_t) parser.add_argument('--timeout', type = int, metavar = "N", default = _def['download_timeout'], dest = 'download_timeout', help = i18n.XEH_OPT_timeout) + parser.add_argument('-f', '--force', action = _AddToListAction, + current = ERR_QUOTA_EXCEEDED in _def['ignored_errors'], + add_value = ERR_QUOTA_EXCEEDED, dest='ignored_errors', + help = i18n.XEH_OPT_f) + parser.add_argument('-l', '--logpath', metavar = '/path/to/eh.log', default = os.path.abspath(_def['log_path']), help = i18n.XEH_OPT_l) diff --git a/xeHentai/core.py b/xeHentai/core.py index 9dc835b..a3a72f5 100644 --- a/xeHentai/core.py +++ b/xeHentai/core.py @@ -44,6 +44,7 @@ def __init__(self): self._all_tasks = {} # for saving states self._all_threads = [[] for i in range(20)] self.cfg = {k:v for k,v in default_config.__dict__.items() if not k.startswith("_")} + # note that ignored_errors are overwritten using val from custom config self.cfg.update({k:v for k,v in config.__dict__.items() if not k.startswith("_")}) self.proxy = None self.cookies = {"nw": "1"} @@ -58,7 +59,10 @@ def __init__(self): self.rpc = None def update_config(self, cfg_dict): - self.cfg.update({k:v for k, v in cfg_dict.items() if k in cfg_dict}) + self.cfg.update({k:v for k, v in cfg_dict.items() if k in cfg_dict and k not in ('ignored_errors',)}) + # merge ignored errors list + if 'ignored_errors' in cfg_dict and cfg_dict['ignored_errors']: + self.cfg['ignored_errors'] = list(set(self.cfg['ignored_errors'] + cfg_dict['ignored_errors'])) self.logger.set_level(logger.Logger.WARNING - self.cfg['log_verbose']) self.logger.verbose("cfg %s" % self.cfg) if cfg_dict['proxy']: diff --git a/xeHentai/i18n/en_us.py b/xeHentai/i18n/en_us.py index b00e4da..ef910a0 100644 --- a/xeHentai/i18n/en_us.py +++ b/xeHentai/i18n/en_us.py @@ -63,6 +63,7 @@ XEH_OPT_download_range = "specify ranges of images to be downloaded, in format start-end, or single index, " \ "use comma to concat multiple ranges, e.g.: 5-10,15,20-25, default to download all images" XEH_OPT_timeout = "set image download timeout (current: %(default)ss)" +XEH_OPT_f = "download regardless of quota exceeded warning (current: %(current)s)" XEH_OPT_h = "show this help message and exit" XEH_OPT_version = "show program's version number and exit" XEH_OPT_IGNORING_I = "ignoring -i option in daemon mode" diff --git a/xeHentai/i18n/zh_hans.py b/xeHentai/i18n/zh_hans.py index 50b640c..e48371e 100644 --- a/xeHentai/i18n/zh_hans.py +++ b/xeHentai/i18n/zh_hans.py @@ -60,7 +60,8 @@ XEH_OPT_j = "使用日语标题, 如果关闭则使用英文或罗马字标题 (当前: %(default)s)" XEH_OPT_download_range = "设置下载的图片范围, 格式为 开始位置-结束位置, 或者单张图片的位置, " \ "使用逗号来分隔多个范围, 例如 5-10,15,20-25, 默认为下载所有" -XEH_OPT_timeout = "设置下载图片的超时 (当前: %(default)ss)" +XEH_OPT_timeout = "设置下载图片的超时 (当前: %(default)s秒)" +XEH_OPT_f = "忽略配额判断,继续下载 (当前: %(current)s)" XEH_OPT_h = "显示本帮助信息" XEH_OPT_version = "显示版本信息" XEH_OPT_IGNORING_I = "后台模式已忽略 -i 参数" diff --git a/xeHentai/i18n/zh_hant.py b/xeHentai/i18n/zh_hant.py index 6f5b52f..5d667b5 100644 --- a/xeHentai/i18n/zh_hant.py +++ b/xeHentai/i18n/zh_hant.py @@ -60,7 +60,8 @@ XEH_OPT_j = "使用日語標題, 如果關閉則使用英文或羅馬字標題 (當前: %(default)s)" XEH_OPT_download_range = "設置下載的圖片範圍, 格式為 開始位置-結束位置, 或者單張圖片的位置, " \ "使用逗號來分隔多個範圍, 例如 5-10,15,20-25, 默認為下載所有" -XEH_OPT_timeout = "設置下載圖片的超時 (當前: %(default)ss)" +XEH_OPT_timeout = "設置下載圖片的超時 (當前: %(default)s秒)" +XEH_OPT_f = "忽略配額判斷,繼續下載 (當前: %(current)s)" XEH_OPT_h = "顯示本幫助信息" XEH_OPT_version = "顯示版本信息" XEH_OPT_IGNORING_I = "後台模式已忽略 -i 參數"