Source code for ncbitaxonomist.parser.arguments

"""
..
  Copyright 2020 The University of Sydney

.. moduleauthor:: Jan P Buchmann <jan.buchmann@sydney.edu.au>
"""


import os
import sys
import argparse


[docs]def version(basename): vfile=os.path.join((os.path.dirname(os.path.relpath(__file__))), '..', 'VERSION') if not os.path.exists(vfile): return "{} version: unknown".format(basename) fh = open(vfile, 'r') version = fh.readline().strip() fh.close() return "{} version: {}".format(basename, version)
[docs]def parse(basename): ap = argparse.ArgumentParser( add_help=False, epilog="{} <command> -h lists command specific options".format(basename)) ap._positionals.title = 'commands' # Not very clean, but whatddya want to do? ap.add_argument('--version', action='store_true', help='Show version and exit') ap.add_argument('-v', '--verbose', action='count', default=0) ap.add_argument('--apikey', type=str, default=None) db = argparse.ArgumentParser(add_help=False) db.add_argument('-db', '--database', type=str, default=None, metavar='<path>', help="Path for local database") outfmt = argparse.ArgumentParser(add_help=False) outfmt.add_argument('-x', '--xml', default=False, action='store_true', help='Output XML') taxa = argparse.ArgumentParser(add_help=False) taxa.add_argument('-t', '--taxids', type=str, nargs='*', default=None, metavar='<taxid>', help='Comma / space separated taxids') taxa.add_argument('-n', '--names', type=str, nargs='*', default=None, metavar='<name>', help='Comma separated names: \'Homo sapiens\', \'Influenza B virus \ (B/Acre/121609/2012)\'') remote = argparse.ArgumentParser(add_help=False) remote.add_argument('-r', '--remote', action='store_true', default=False, help='Use Entrez server') email = argparse.ArgumentParser(add_help=False) email.add_argument('-e', '--email', type=str, default=None, metavar='<email>', help='Email, required for remote queries') subparsers = ap.add_subparsers(dest='command') mapper = subparsers.add_parser('map', help='Map taxid to names and vice-versa', parents=[taxa, db, remote, email, outfmt]) mapper.add_argument('-a', '--accessions', type=str, nargs='*', default=None, metavar='<accs>', help='Map accessions to taxa') mapper.add_argument('-edb', '--entrezdb', type=str, metavar='<entrezdb>', default='nucleotide', help='Entrez database for accessions. Default: nucleotide') resolve = subparsers.add_parser('resolve', help='Resolve lineage', parents=[taxa, db, remote, email, outfmt]) resolve.add_argument('-m', '--mapping', default=False, action='store_true', help='Resolve accessions mapping from map via STDIN') importer = subparsers.add_parser('import', help='import taxa into SQLite database', parents=[db]) importer.set_defaults(email=None, xml=None) #importer.add_argument('-f', '--filter', default=None, type=str, metavar='<attribute>', #help='Set attribute to print to STDOUT after import: accs, taxid, lin') collector = subparsers.add_parser('collect', help='Collect taxa information from Entrez', parents=[taxa, email, outfmt]).set_defaults(database=None) subtree = subparsers.add_parser('subtree', help='Extract subtree from given taxa or lineages', parents=[taxa, db, outfmt]) subtree.set_defaults(email=None) subtree.add_argument('--rank', default=None, help='extract this rank') subtree.add_argument('--lrank', default=None, help='Extract from lower rank, further from root') subtree.add_argument('--hrank', default=None, help='Extract to higher rank, closer to root') group = subparsers.add_parser('group', help='Organize taxa groups in local database', parents=[taxa, db]) group.set_defaults(email=None, xml=None) group.add_argument('--add', type=str, metavar='<groupname>', help='Add to <groupname>') group.add_argument('--rm', type=str, metavar='<groupname>', help='Remove from <groupname>. \ Without given taxid or names remove group.') group.add_argument('--list', action='store_true', help='List groups') group.add_argument('--get', type=str, nargs='*', default=None, metavar='<groupname>', help='Get taxids for groups') if len(sys.argv) == 1: ap.print_help() sys.exit(0) args = ap.parse_args() if args.version: print(version(basename)) sys.exit(0) return args