Example #1
0
    def create(cls, data, schema=None):
        db.session.begin(subtransactions=True)
        try:
            record = cls(unicodifier(data))

            from invenio.modules.jsonalchemy.registry import functions
            list(functions('recordext'))

            toposort_send(before_record_insert, record)

            if schema is not None:
                validate(record, schema)

            metadata = dict(json=dict(record))
            if record.get('recid', None) is not None:
                metadata['id'] = record.get('recid')

            db.session.add(RecordMetadata(**metadata))
            db.session.commit()

            toposort_send(after_record_insert, record)

            return record
        except Exception:
            current_app.logger.exception("Problem creating a record.")
            db.session.rollback()
            raise
Example #2
0
    def create(cls, data, schema=None):
        db.session.begin(subtransactions=True)
        try:
            record = cls(unicodifier(data))

            from invenio.modules.jsonalchemy.registry import functions

            list(functions("recordext"))

            toposort_send(before_record_insert, record)

            if schema is not None:
                validate(record, schema)

            metadata = dict(json=dict(record))
            if record.get("recid", None) is not None:
                metadata["id"] = record.get("recid")

            db.session.add(RecordMetadata(**metadata))
            db.session.commit()

            toposort_send(after_record_insert, record)

            return record
        except Exception:
            current_app.logger.exception("Problem creating a record.")
            db.session.rollback()
            raise
Example #3
0
    def create(cls, data, schema=None, **kwargs):
        db.session.begin(subtransactions=True)
        try:
            data.setdefault('_id', str(uuid.uuid4()))
            data.setdefault('creation_date', datetime.now().isoformat())

            document = cls(data)

            from invenio.modules.jsonalchemy.registry import functions
            list(functions('documentext'))

            toposort_send(signals.before_document_insert, document)

            if schema is not None:
                validate(document, schema)

            model = DocumentMetadata(id=document['_id'], json=dict(document))
            db.session.add(model)
            db.session.commit()

            document.model = model

            toposort_send(signals.after_document_insert, document)
            return document
        except Exception:
            current_app.logger.exception("Problem creating a document.")
            db.session.rollback()
            raise
Example #4
0
    def create(cls, data, schema=None, **kwargs):
        db.session.begin(subtransactions=True)
        try:
            data.setdefault('_id', str(uuid.uuid4()))
            data.setdefault('creation_date', datetime.now().isoformat())

            document = cls(data)

            from invenio.modules.jsonalchemy.registry import functions
            list(functions('documentext'))

            toposort_send(signals.before_document_insert, document)

            if schema is not None:
                validate(document, schema)

            model = DocumentMetadata(id=document['_id'], json=dict(document))
            db.session.add(model)
            db.session.commit()

            document.model = model

            toposort_send(signals.after_document_insert, document)
            return document
        except Exception:
            current_app.logger.exception("Problem creating a document.")
            db.session.rollback()
            raise
Example #5
0
def index_holdingpen_record(sender, **kwargs):
    """Index a Holding Pen record."""
    from invenio.ext.es import es

    from invenio_records.api import Record
    from invenio_records.signals import before_record_insert

    from .registry import workflows
    from .models import ObjectVersion

    if not sender.workflow:
        # No workflow registered to object yet. Skip indexing
        return

    workflow = workflows.get(sender.workflow.name)
    if not workflow:
        current_app.logger.error(
            "No workflow found for sender: {0}".format(sender.id)
        )
        return

    if not hasattr(sender, 'data'):
        sender.data = sender.get_data()
    if not hasattr(sender, 'extra_data'):
        sender.extra_data = sender.get_extra_data()

    record = Record({})
    record["version"] = ObjectVersion.name_from_version(sender.version)
    record["type"] = sender.data_type
    record["status"] = sender.status
    record["created"] = sender.created.isoformat()
    record["modified"] = sender.modified.isoformat()
    record["uri"] = sender.uri
    record["id_workflow"] = sender.id_workflow
    record["id_user"] = sender.id_user
    record["id_parent"] = sender.id_parent
    record["workflow"] = sender.workflow.name
    try:
        record.update(workflow.get_record(sender))
    except Exception as err:
        current_app.logger.exception(err)

    try:
        record.update(workflow.get_sort_data(sender))
    except Exception as err:
        current_app.logger.exception(err)

    from invenio.modules.jsonalchemy.registry import functions
    list(functions('recordext'))

    toposort_send(before_record_insert, record)

    es.index(
        index=current_app.config.get("WORKFLOWS_HOLDING_PEN_INDEX"),
        doc_type='record',
        body=dict(record),
        id=sender.id
    )
Example #6
0
    def commit(self):
        db.session.begin(subtransactions=True)
        try:
            toposort_send(before_record_update, self)

            if self.model is None:
                self.model = RecordMetadata.query.get(self["recid"])

            self.model.json = dict(self)

            db.session.add(self.model)
            db.session.commit()

            toposort_send(after_record_update, self)

            return self
        except Exception:
            db.session.rollback()
            raise
Example #7
0
    def commit(self):
        db.session.begin(subtransactions=True)
        try:
            toposort_send(before_record_update, self)

            if self.model is None:
                self.model = RecordMetadata.query.get(self['recid'])

            self.model.json = dict(self)

            db.session.add(self.model)
            db.session.commit()

            toposort_send(after_record_update, self)

            return self
        except Exception:
            db.session.rollback()
            raise
Example #8
0
    def commit(self):
        db.session.begin(subtransactions=True)
        try:
            toposort_send(signals.before_document_update, self)

            if self.model is None:
                self.model = DocumentMetadata.query.get(self['_id'])

            self.model.json = self.dumps()

            db.session.add(self.model)
            db.session.commit()

            toposort_send(signals.after_document_update, self)

            return self
        except Exception:
            db.session.rollback()
            raise
Example #9
0
    def commit(self):
        db.session.begin(subtransactions=True)
        try:
            toposort_send(signals.before_document_update, self)

            if self.model is None:
                self.model = DocumentMetadata.query.get(self['_id'])

            self.model.json = self.dumps()

            db.session.add(self.model)
            db.session.commit()

            toposort_send(signals.after_document_update, self)

            return self
        except Exception:
            db.session.rollback()
            raise