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 commit(self): with db.session.begin_nested(): list(functions('recordext')) 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.merge(self.model) toposort_send(after_record_update, self) return self
def create(cls, data, schema=None): with db.session.begin_nested(): record = cls(unicodifier(data)) 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)) toposort_send(after_record_insert, record) return record
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