Source code for goatools.cli.fetch_associations

"""Download associations from GOlr for a given species."""

from __future__ import print_function

__copyright__ = "Copyright (C) 2010-present, H Tang et al. All rights reserved."
__author__ = "various"

import argparse
import sys


def _get_argparser():
    """Return the CLI argument parser."""
    parser = argparse.ArgumentParser(
        prog="goatools fetch_associations",
        description=__doc__,
        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
    )
    parser.add_argument(
        "--taxon_id",
        required=True,
        help=(
            "NCBI taxon ID. This must match the exact species or strain used by GO Central"
        ),
    )
    parser.add_argument(
        "--golr_url",
        default="http://golr.geneontology.org/solr/",
        help="GOlr endpoint URL",
    )
    parser.add_argument(
        "-o",
        default=None,
        help="Optional output filename. Defaults to stdout",
    )
    parser.add_argument(
        "--max_rows",
        default=100000,
        type=int,
        help="Maximum rows to fetch",
    )
    return parser


[docs] def main(args=None): """Fetch simple gene-term associations from GOlr.""" try: import pysolr except ImportError as exc: raise SystemExit( "fetch_associations requires the optional dependency 'pysolr'" ) from exc nspc = _get_argparser().parse_args(args) solr = pysolr.Solr(nspc.golr_url, timeout=30) sys.stderr.write("TAX:{TAX}\n".format(TAX=nspc.taxon_id)) results = solr.search( q='document_category:"bioentity" AND taxon:"NCBITaxon:{TAX}"'.format( TAX=nspc.taxon_id ), fl="bioentity_label,annotation_class_list", rows=nspc.max_rows, ) sys.stderr.write("NUM GENES:{N}\n".format(N=len(results))) if len(results) == 0: sys.stderr.write("NO RESULTS") raise SystemExit(1) if len(results) == nspc.max_rows: sys.stderr.write("max_rows set too low") raise SystemExit(1) file_out = sys.stdout if nspc.o is None else open(nspc.o, "w") try: for result in results: gene_symbol = result["bioentity_label"] sys.stderr.write("{GENE}\n".format(GENE=gene_symbol)) if "annotation_class_list" in result: file_out.write( "{GENE}\t{GOS}\n".format( GENE=gene_symbol, GOS=";".join(result["annotation_class_list"]), ) ) else: sys.stderr.write("no annotations for {GENE}\n".format(GENE=gene_symbol)) finally: if nspc.o is not None: file_out.close() if nspc.o is not None: sys.stdout.write(" WROTE: {}\n".format(nspc.o))