12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #!/usr/bin/env python
- # -*- encoding: utf-8 -*-
- """
- @Contact : liuyuqi.gov@msn.cn
- @Time : 2023/11/01 00:01:04
- @License : Copyright © 2017-2022 liuyuqi. All Rights Reserved.
- @Desc : 命令行参数,或配置文件
- """
- import argparse
- import os
- import shlex
- import dotenv
- from collections import OrderedDict
- from .utils.str_util import preferredencoding
- from crawl_yuque.utils.frozen_dir import get_app_path
- def parser_args(overrideArguments=None):
- """解析参数"""
- argparser = argparse.ArgumentParser()
- argparser.add_argument(
- 'command',
- help='command: ',
- choices=['markdown', 'pdf', 'serve', 'version', 'help'],
- )
- argparser.add_argument('-url', '--url', help='please input a url', type=str)
- args = argparser.parse_args()
- # remove None
- command_line_conf = OrderedDict(
- {k: v for k, v in args.__dict__.items() if v is not None}
- )
- system_conf = user_conf = custom_conf = OrderedDict()
- user_conf = _read_user_conf()
- try:
- if args.config:
- custom_conf = _read_custom_conf(args.config)
- except Exception as e:
- pass
- system_conf.update(user_conf)
- system_conf.update(command_line_conf)
- app_path = get_app_path()
- system_conf["app_path"] = app_path
- # if args.command == None and args.extractor == None:
- # raise 'Error, please input cmd and extractor params11'
- return system_conf
- def _read_custom_conf(config_path: str) -> OrderedDict:
- """读取自定义配置文件 config.yaml"""
- def compat_shlex_split(s, comments=False, posix=True):
- if isinstance(s, str):
- s = s.encode('utf-8')
- return list(map(lambda s: s.decode('utf-8'), shlex.split(s, comments, posix)))
- try:
- with open(config_path, 'r', encoding=preferredencoding()) as f:
- contents: str = f.read()
- res = compat_shlex_split(contents, comments=True)
- except Exception as e:
- return []
- return res
- def _read_user_conf() -> OrderedDict:
- """读取用户配置文件: .env 文件"""
- user_conf = OrderedDict()
- dotenv_path = os.path.join(get_app_path(), '.env')
- if os.path.exists(dotenv_path):
- user_conf = dotenv.dotenv_values(dotenv_path)
- return OrderedDict(user_conf)
|