.. code-block:: python

	#!/usr/bin/env python
	# -*- coding: utf-8 -*-
	
	
	import argparse
	from collections import defaultdict
	
	import pymzml.obo
	
	
	FIELDNAMES = ["id", "name", "def", "is_a"]
	
	
	def main(args):
	    """
	    Use this script to interrogate the OBO database files.
	
	    usage:
	
	        ./queryOBO.py [-h] [-v VERSION] query
	
	    Example::
	
	      $ ./queryOBO.py'scan time'
	      MS:1000016
	      scan time
	      'The time taken for an acquisition by scanning analyzers.' [PSI:MS]
	      Is a: MS:1000503 ! scan attribute
	
	    Example::
	
	        $ ./queryOBO.py 1000016
	        MS:1000016
	        scan time
	        "The time taken for an acquisition by scanning analyzers." [PSI:MS]
	        MS:1000503 ! scan attribute
	
	
	    """
	    obo = pymzml.obo.OboTranslator(version=args.version)
	    obo.parseOBO()
	    if args.query.isdigit():
	        print(search_by_id(obo, args.query))
	    else:
	        for ix, match in enumerate(search_by_name(obo, args.query)):
	            print("#{0}".format(ix))
	
	            for fieldname in ("id", "name", "def"):
	                print(match[fieldname])
	
	            if "is_a" in match:
	                print("Is a:", match["is_a"])
	
	
	def search_by_name(obo, name):
	    print("Searching for {0}".format(name.lower()))
	    matches = []
	    for lookup in obo.lookups:
	        for key in lookup.keys():
	            if name.lower() in key.lower():
	                match = defaultdict(str)
	
	                for fieldname in FIELDNAMES:
	                    if fieldname in lookup[key].keys():
	                        match[fieldname] = lookup[key][fieldname]
	
	                matches.append(match)
	
	    return matches
	
	
	def search_by_id(obo, id):
	    key = "MS:{0}".format(id)
	    return_value = ""
	    for lookup in obo.lookups:
	        if key in lookup:
	            if obo.MS_tag_regex.match(key):
	                for fn in FIELDNAMES:
	                    if fn in lookup[key].keys():
	                        return_value += "{0}\n".format(lookup[key][fn])
	    return return_value
	
	
	if __name__ == "__main__":
	    argparser = argparse.ArgumentParser(usage=__doc__)
	    argparser.add_argument(
	        "query", help="an accession or part of an OBO term name to look for"
	    )
	    argparser.add_argument(
	        "-v",
	        "--version",
	        default="1.1.0",
	        help="""
	            the version of the OBO to use; valid options are 1.0.0, 1.1.0, and 1.2,
	            default is 1.1.0
	        """,
	    )
	
	    args = argparser.parse_args()
	
	    main(args)
