Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
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]
Beispiel #4
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]