--- a +++ b/qiita_db/handlers/reference.py @@ -0,0 +1,83 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2014--, The Qiita Development Team. +# +# Distributed under the terms of the BSD 3-clause License. +# +# The full license is in the file LICENSE, distributed with this software. +# ----------------------------------------------------------------------------- + +from tornado.web import HTTPError + +from .oauth2 import OauthBaseHandler, authenticate_oauth +import qiita_db as qdb + + +def _get_reference(r_id): + """Returns the reference with the given id if exists + + Parameters + ---------- + r_id : int + The reference id + + Returns + ------- + qiita_db.reference.Reference + The requested reference + + Raises + ------ + HTTPError + If the reference does not exist, with error code 404 + If there is a problem instantiating the reference, with error code 500 + """ + try: + reference = qdb.reference.Reference(r_id) + except qdb.exceptions.QiitaDBUnknownIDError: + raise HTTPError(404) + except Exception as e: + raise HTTPError(500, reason='Error instantiating the reference: ' + '%s' % str(e)) + + return reference + + +class ReferenceHandler(OauthBaseHandler): + @authenticate_oauth + def get(self, reference_id): + """Retrieves the filepath information of the given reference + + Parameters + ---------- + reference_id : str + The id of the reference whose filepath information is being + retrieved + + Returns + ------- + dict + 'name': str + the reference name + 'version': str + the reference version + 'filepaths': dict of {str: str} + The filepaths attached to the reference keyed by filepath type + """ + with qdb.sql_connection.TRN: + reference = _get_reference(reference_id) + + fps = {'reference_seqs': reference.sequence_fp} + tax_fp = reference.taxonomy_fp + if tax_fp: + fps["reference_tax"] = tax_fp + tree_fp = reference.tree_fp + if tree_fp: + fps["reference_tree"] = tree_fp + + response = { + 'name': reference.name, + 'version': reference.version, + 'files': fps + } + + self.write(response)