46 lines
3.0 KiB
Python
46 lines
3.0 KiB
Python
"""One command tree; adapters are imported only when their command is selected."""
|
|
import argparse
|
|
from importlib import import_module
|
|
|
|
from paper_atlas import __version__
|
|
|
|
|
|
COMMANDS = {
|
|
('query',): ('paper_atlas.querying', {}, '查询论文、标签和投稿历史'),
|
|
('coverage',): ('paper_atlas.audits.coverage', {}, '查看全部候选会议的覆盖情况'),
|
|
('download',): ('paper_atlas.io.snapshots', {}, '下载并校验固定版本快照'),
|
|
('collect','pmlr'): ('paper_atlas.collectors.pmlr', {}, 'PMLR 官方元数据'),
|
|
('collect','acl'): ('paper_atlas.collectors.acl', {}, 'ACL Anthology XML'),
|
|
('collect','iclr-program'): ('paper_atlas.collectors.iclr', {}, 'ICLR 官方公开程序'),
|
|
('collect','iclr-snapshot'): ('paper_atlas.collectors.openreview', {}, 'ICLR 公开投稿与决定快照'),
|
|
('collect','peerread'): ('paper_atlas.collectors.peerread', {}, 'PeerRead 历史决定补充'),
|
|
('collect','colm'): ('paper_atlas.collectors.proceedings', {'source':'colm'}, 'COLM 官方论文集'),
|
|
('collect','neurips'): ('paper_atlas.collectors.proceedings', {'source':'neurips'}, 'NeurIPS 官方论文集'),
|
|
('collect','cvf'): ('paper_atlas.collectors.vision', {'source':'cvf'}, 'CVPR / ICCV 官方开放目录'),
|
|
('collect','ecva'): ('paper_atlas.collectors.vision', {'source':'ecva'}, 'ECCV 官方开放目录'),
|
|
('catalogue','dblp'): ('paper_atlas.collectors.dblp', {}, '盘点 DBLP 历史会议目录'),
|
|
('import','arxiv'): ('paper_atlas.ingestion.arxiv', {}, '导入 arXiv 元数据 ZIP'),
|
|
('import','records'): ('paper_atlas.ingestion.records', {}, '导入核验过的会议文件'),
|
|
('maintain','merge'): ('paper_atlas.ingestion.maintenance', {}, '协调单写入合并与恢复'),
|
|
('maintain','backfill'): ('paper_atlas.ingestion.backfill', {}, '回填既有投稿的来源身份'),
|
|
('audit','iclr'): ('paper_atlas.audits.iclr', {}, '核对 ICLR 快照与同届官方程序'),
|
|
}
|
|
|
|
|
|
def main(argv=None):
|
|
parser=argparse.ArgumentParser(prog='paper-atlas',description='Paper Atlas · 论文元数据与公开投稿历史')
|
|
parser.add_argument('--version',action='version',version='paper-atlas '+__version__)
|
|
commands=parser.add_subparsers(dest='command',required=True);groups={}
|
|
for route,(module,kwargs,help_text) in COMMANDS.items():
|
|
if len(route)==1:
|
|
leaf=commands.add_parser(route[0],help=help_text,add_help=False)
|
|
else:
|
|
if route[0] not in groups:
|
|
group=commands.add_parser(route[0],help={'collect':'采集来源元数据','catalogue':'盘点历史目录','import':'导入数据库','maintain':'维护数据库','audit':'核验数据'}[route[0]])
|
|
groups[route[0]]=group.add_subparsers(dest='operation',required=True)
|
|
leaf=groups[route[0]].add_parser(route[1],help=help_text,add_help=False)
|
|
leaf.set_defaults(handler=(route,module,kwargs))
|
|
args,forwarded=parser.parse_known_args(argv)
|
|
route,module,kwargs=args.handler
|
|
return import_module(module).main(forwarded,prog='paper-atlas '+' '.join(route),**kwargs)
|