コード例 #1
0
ファイル: set_drs.py プロジェクト: ES-DOC/esdoc-api
def execute(ctx):
    """Creates document index.

    :param object ctx: Document processing context information.

    """
    # Escape if there are no DRS keys defined.
    if not ctx.doc.meta.drs_path:
        return

    # Instantiate.
    idx = models.DocumentDRS()
    idx.document_id = ctx.primary.id
    idx.path = unicode(ctx.doc.meta.drs_path)
    idx.project = ctx.primary.project

    # Set keys.
    for index, key in enumerate(ctx.doc.meta.drs_keys):
        if index > 7:
            break
        elif key is not None:
            key = unicode(key).upper()
            setattr(idx, "key_0" + str(index + 1), key)

    # Insert.
    try:
        session.insert(idx)
    except sqlalchemy.exc.IntegrityError:
        session.rollback()
コード例 #2
0
ファイル: set_primary.py プロジェクト: ES-DOC/esdoc-api
def execute(ctx):
    """Creates document index.

    :param object ctx: Document processing context information.

    """
    # Instantiate.
    instance = models.Document()
    instance.description = str_to_unicode(ctx.doc.ext.description)
    instance.institute = ctx.doc.meta.institute
    instance.name = unicode(ctx.doc.ext.display_name)
    instance.project = ctx.doc.meta.project.strip().lower()
    if ctx.doc.meta.sub_projects:
        instance.sub_projects = ",".join([u"<{}>".format(i.lower()) for i in sorted(ctx.doc.meta.sub_projects)])
    instance.typeof = unicode(ctx.doc.meta.type)
    instance.uid = unicode(ctx.doc.meta.id)
    instance.version = ctx.doc.meta.version

    # Set alternative name.
    if hasattr(ctx.doc, "alternative_name"):
        if ctx.doc.alternative_name:
            instance.alternative_name = ctx.doc.alternative_name
    elif hasattr(ctx.doc, "alternative_names"):
        if ctx.doc.alternative_names:
            instance.alternative_name = ctx.doc.alternative_names[0]

    # Set short/long names.
    fields = [f for f in ctx.doc.ext.summary_fields if f is not None]
    try:
        instance.canonical_name = fields[0]
    except IndexError:
        pass
    try:
        instance.long_name = fields[1]
    except IndexError:
        pass

    # Set other fields.
    try:
        parser = _PARSERS[type(ctx.doc)]
    except KeyError:
        pass
    else:
        parser(instance, ctx.doc)

    # Persist.
    try:
        session.insert(instance)
    except sqlalchemy.exc.IntegrityError:
        session.rollback()
        print instance.uid, instance.version, instance.typeof
        raise StopIteration("Document already ingested")
    else:
        ctx.primary = instance
コード例 #3
0
ファイル: db_flush.py プロジェクト: allynt/esdoc-shell
def _main(project_code, source):
    """Main entry point.

    """
    if source == "*" or len(source) == 0:
    	source = None

    session.start(config.db)
    try:
        _execute(project_code, source)
    except Exception as err:
        session.rollback()
        logger.log_db_error(err)
    else:
        session.commit()
    finally:
        session.end()
コード例 #4
0
ファイル: db_flush.py プロジェクト: allynt/esdoc-shell-fork
def _main(project_code, source):
    """Main entry point.

    """
    if source == "*" or len(source) == 0:
        source = None

    session.start(config.db)
    try:
        _execute(project_code, source)
    except Exception as err:
        session.rollback()
        logger.log_db_error(err)
    else:
        session.commit()
    finally:
        session.end()
コード例 #5
0
ファイル: set_sub_project.py プロジェクト: ES-DOC/esdoc-api
def execute(ctx):
    """Creates document index.

    :param object ctx: Document processing context information.

    """
    # Escape if there are no sub-projects to index.
    if not ctx.doc.meta.sub_projects:
        return

    for sub_project in ctx.doc.meta.sub_projects:
        idx = models.DocumentSubProject()
        idx.project = ctx.doc.meta.project.lower()
        idx.document_id = ctx.primary.id
        idx.sub_project = sub_project.lower()

        # Insert.
        try:
            session.insert(idx)
        except sqlalchemy.exc.IntegrityError:
            session.rollback()
コード例 #6
0
ファイル: set_external_id.py プロジェクト: ES-DOC/esdoc-api
def execute(ctx):
    """Creates document index.

    :param object ctx: Document processing context information.

    """
    # Escape if there is no external id defined.
    if not len(ctx.doc.meta.external_ids):
    	return

    # Pick up first external id.
    external_id = unicode(ctx.doc.meta.external_ids[0].value).upper()

    # Insert.
    idx = models.DocumentExternalID()
    idx.project = ctx.primary.project
    idx.document_id = ctx.primary.id
    idx.external_id = external_id

    # Insert.
    try:
        session.insert(idx)
    except sqlalchemy.exc.IntegrityError:
        session.rollback()