def update(self, doc, username=None, direct=False): assert '_id' in doc, "Cannot update document without _id attribute" data = DBDoc(self._collection.find_one(doc['_id'])) old = deepcopy(data) if direct: data = doc else: merge(data, doc) enforce_ids(data, doc['_id']) result = self._collection.update({'_id': doc['_id']}, data) if result.get('ok', False): changes = diff_recursive(data, old) if changes: self._db.history_update(collection=self._collection.name, id=doc['_id'], username=username, diff=changes) return result
def update(self, doc, username=None, direct=False): assert '_id' in doc, "Cannot update document without _id attribute" data = DBDoc(self._collection.find_one(doc['_id'])) old = deepcopy(data) if direct: data = doc else: merge(data, doc) enforce_ids(data, doc['_id']) result = self._collection.update({'_id': doc['_id']}, data) if result.get('ok', False): changes = diff_recursive(data, old) if changes: self._db.history_update( collection = self._collection.name, id = doc['_id'], username = username, diff = changes ) return result
def insert(self, doc_or_docs, username=None): if not isinstance(doc_or_docs, list): if isinstance(doc_or_docs, DBDoc): docs = [doc_or_docs] elif isinstance(doc_or_docs, dict): docs = [DBDoc(doc_or_docs)] else: raise TypeError, item else: docs = [] for item in doc_or_docs: if isinstance(item, DBDoc): docs.append(item) elif isinstance(item, dict): docs.append(DBDoc(item)) else: raise TypeError, item ids = [] new_id = self._db.get_next_id(self._collection.name) assert not any( x.get('_id', 0) in x for x in docs), "Cannot insert document with _id attribute" try: for item in docs: new_id = enforce_ids(item, new_id) id = self._collection.insert(item) if id: self._db.history_insert(collection=self._collection.name, id=id, username=username) ids.append(id) finally: if ids: self._db.set_last_id(self._collection.name, max(ids)) if isinstance(doc_or_docs, list): return ids else: return ids[0]
def insert(self, doc_or_docs, username=None): if not isinstance(doc_or_docs, list): if isinstance(doc_or_docs, DBDoc): docs = [doc_or_docs] elif isinstance(doc_or_docs, dict): docs = [DBDoc(doc_or_docs)] else: raise TypeError, item else: docs = [] for item in doc_or_docs: if isinstance(item, DBDoc): docs.append(item) elif isinstance(item, dict): docs.append(DBDoc(item)) else: raise TypeError, item ids = [] new_id = self._db.get_next_id(self._collection.name) assert not any(x.get('_id', 0) in x for x in docs), "Cannot insert document with _id attribute" try: for item in docs: new_id = enforce_ids(item, new_id) id = self._collection.insert(item) if id: self._db.history_insert( collection = self._collection.name, id = id, username = username ) ids.append(id) finally: if ids: self._db.set_last_id(self._collection.name, max(ids)) if isinstance(doc_or_docs, list): return ids else: return ids[0]