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
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
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
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 )
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
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
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