Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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())