def get_documents_by_external_id(project, external_id): """Retrieves a list of documents with a matching external ID. :param str project: Project code. :param str external_id: External ID to be resolved to a document. :returns: List of Document instances with matching external ID. :rtype: list """ qry = session.query(Document).join(DocumentExternalID) qry = text_filter(qry, Document.project, project) qry = like_filter(qry, DocumentExternalID.external_id, external_id.upper()) return qry.all()
def get_document_summaries( project, typeof, version, sub_project=None, institute=None, model=None, experiment=None ): """Returns document summary information. :param str project: Project code. :param str typeof: Document type. :param str version: Document version (latest | all). :param str sub_project: Sub-project code. :param str institute: Institute code. :param str model: Model code. :param str experiment: Experiment code. :returns: List of matching documents. :rtype: db.models.Document """ # Format params. if version: version = version.lower() typeof = typeof.upper() if model: model = model.upper() if experiment: experiment = experiment.upper() # Set query. qry = session.query( Document.experiment, Document.institute, Document.long_name, Document.model, Document.name, Document.canonical_name, Document.uid, Document.version, Document.alternative_name ) # Set filters. qry = text_filter(qry, Document.project, project) qry = qry.filter(Document.canonical_name != u"") if typeof != constants.DOCUMENT_TYPE_ALL: qry = text_filter(qry, Document.typeof, typeof) if version == constants.DOCUMENT_VERSION_LATEST: qry = qry.filter(Document.is_latest == True) if experiment: qry = text_filter(qry, Document.experiment, experiment) if institute: qry = text_filter(qry, Document.institute, institute) if model: qry = text_filter(qry, Document.model, model) if sub_project: qry = like_filter(qry, Document.sub_projects, "<{}>".format(sub_project.lower())) # Apply query limit. try: load_all = constants.MAPPED_DOCUMENT_TYPES[typeof]['loadAll'] except AttributeError: load_all = False if not load_all: qry = qry.limit(session.QUERY_LIMIT) return sort(Document, qry.all())