def _exportItem(self, id, clearRolesInherited=True):
     it_file = file(self.tmp_folder + '/' + id, 'wb')
     item = self.db.get_item(id)
     if clearRolesInherited:
         item.inheritRoles = False
     
     # load external attributes
     for prop in [getattr(item, x) for x in item.__props__]:
         if isinstance(prop, datatypes.ExternalAttribute):
             prop.getValue()
     
     it_file.write(persist.dumps(item))
     it_file.close()
     self.package_files.append(
         (
             self.package_file.gettarinfo(
                 it_file.name,
                 '_db/' + os.path.basename(it_file.name)
             ), it_file.name
         )
     ) 
     if item.isCollection:
         dummy = [
             self._exportItem(childid, False)
             for childid in item._subfolders.values() + item._items.values()
         ]
Example #2
0
 def put_item(self, item):
     try:
         self._itemdb.put(
             pack_value(item._pid) + b'_' + pack_value(item._id),
             persist.dumps(item), context._trans.txn)
     except (db.DBLockDeadlockError, db.DBLockNotGrantedError):
         context._trans.abort()
         raise exceptions.DBRetryTransaction
     except db.DBError as e:
         if e.args[0] == _err_unsupported_index_type:
             raise db.DBError('Unsupported indexed data type')
         else:
             raise
Example #3
0
 def put_item(self, item):
     try:
         self._itemdb.put(
             pack_value(item._pid) + b'_' + pack_value(item._id),
             persist.dumps(item),
             context._trans.txn)
     except (db.DBLockDeadlockError, db.DBLockNotGrantedError):
         context._trans.abort()
         raise exceptions.DBRetryTransaction
     except db.DBError as e:
         if e.args[0] == _err_unsupported_index_type:
             raise db.DBError('Unsupported indexed data type')
         else:
             raise
Example #4
0
 def _update(self):
     chunk = persist.dumps(self)
     if type(chunk) != str:
         # python 3: conver to str
         chunk = chunk.decode('latin-1')
     chunks = [chunk[i:i + 4000] for i in range(0, len(chunk), 4000)]
     for i in range(len(chunks)):
         context.response.cookies['_s%d' % i] = chunks[i]
         context.response.cookies['_s%d' % i]['path'] = \
             context.request.serverVariables['SCRIPT_NAME'] + '/'
     j = len(chunks)
     next = context.request.cookies.get('_s%d' % j, None)
     while next:
         context.response.cookies['_s%d' % j] = ''
         context.response.cookies['_s%d' % j]['path'] = \
             context.request.serverVariables['SCRIPT_NAME'] + '/'
         j += 1
         next = context.request.cookies.get('_s%d' % j, None)
 def _update(self):
     chunk = persist.dumps(self)
     if type(chunk) != str:
         # python 3: conver to str
         chunk = chunk.decode('latin-1')
     chunks = [chunk[i:i + 4000]
               for i in range(0, len(chunk), 4000)]
     for i in range(len(chunks)):
         context.response.cookies['_s%d' % i] = chunks[i]
         context.response.cookies['_s%d' % i]['path'] = \
             context.request.serverVariables['SCRIPT_NAME'] + '/'
     j = len(chunks)
     next = context.request.cookies.get('_s%d' % j, None)
     while next:
         context.response.cookies['_s%d' % j] = ''
         context.response.cookies['_s%d' % j]['path'] = \
             context.request.serverVariables['SCRIPT_NAME'] + '/'
         j += 1
         next = context.request.cookies.get('_s%d' % j, None)
Example #6
0
    def _export_item(self, item, clear_roles_inherited=True):
        it_file = open(self.tmp_folder + '/' + item._id, 'wb')
        if clear_roles_inherited:
            item.inheritRoles = False

        # load external attributes
        for prop in [getattr(item, x) for x in item.__props__]:
            if isinstance(prop, datatypes.ExternalAttribute):
                prop.get_value()

        it_file.write(persist.dumps(item))
        it_file.close()
        self.package_files.append((
                self.package_file.gettarinfo(
                    it_file.name,
                    '_db/' + os.path.basename(it_file.name)),
                it_file.name))
        if item.isCollection:
            cursor = db._db.get_children(item._id)
            cursor.enforce_permissions = False
            [self._export_item(child, False) for child in cursor]
            cursor.close()
def put_item(item, trans=None):
    try:
        _itemdb.put(item._id, persist.dumps(item), trans and trans.txn)
    except (db.DBLockDeadlockError, db.DBLockNotGrantedError):
        raise exceptions.DBTransactionIncomplete