53 lines
3.9 KiB
Python
53 lines
3.9 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','public-openreview'): ('paper_atlas.collectors.public_openreview', {}, '核验其他会议的公开拒稿及撤稿标签'),
|
|
('collect','icml-public-archive'): ('paper_atlas.collectors.icml_public_archive', {}, 'ICML 2026 公开拒稿原始投稿快照'),
|
|
('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 官方开放目录'),
|
|
('collect','dblp'): ('paper_atlas.collectors.dblp_records', {}, '核对并整理 DBLP 历史发表记录'),
|
|
('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', {}, '回填既有投稿的来源身份'),
|
|
('maintain','arxiv-tags'): ('paper_atlas.ingestion.arxiv_tags', {}, '恢复逐来源记录的 arXiv 类别证据'),
|
|
('audit','iclr'): ('paper_atlas.audits.iclr', {}, '核对 ICLR 快照与同届官方程序'),
|
|
('audit','iclr-legacy'): ('paper_atlas.audits.iclr_legacy', {}, '独立核验 ICLR 2020 旧目录投稿身份'),
|
|
('audit','arxiv'): ('paper_atlas.audits.arxiv', {}, '核验 arXiv 原始编号、重复行与 ZIP 完整性'),
|
|
('audit','public-openreview'): ('paper_atlas.audits.public_openreview', {}, '核对公开负面决定与已有投稿历史'),
|
|
}
|
|
|
|
|
|
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)
|