def update_folder_info(self, folder_id): folder = get_folder_by_id(self._db_session, folder_id) params = json.load(request.body) for key, value in params.items(): if not hasattr(FolderModel, key): abort(400, "Folder has no attribute {0}.".format(key)) if key == "parent": # Move parent_id = value["id"] parent_folder = get_folder_by_id(self._db_session, parent_id) folder.parent_id = parent_folder.id self._db_session.add( EventModel(event_type="ITEM_MOVE", source_id=folder.folder_id, source_type="folder") ) else: setattr(folder, key, value) if key == "name": self._db_session.add( EventModel(event_type="ITEM_RENAME", source_id=folder.folder_id, source_type="folder") ) elif key == "sync_state": event_type = "ITEM_SYNC" if value == FolderSyncState.IS_SYNCED else "ITEM_UNSYNC" self._db_session.add( EventModel(event_type=event_type, source_id=folder.folder_id, source_type="folder") ) self._db_session.commit() return json.dumps(folder)
def update_folder_info(self, folder_id): folder = get_folder_by_id(self._db_session, folder_id) params = json.load(request.body) for key, value in params.items(): if not hasattr(FolderModel, key): abort(400, 'Folder has no attribute {0}.'.format(key)) if key == 'parent': # Move parent_id = value['id'] parent_folder = get_folder_by_id(self._db_session, parent_id) folder.parent_id = parent_folder.id self._db_session.add( EventModel(event_type='ITEM_MOVE', source_id=folder.folder_id, source_type='folder'), ) else: setattr(folder, key, value) if key == 'name': self._db_session.add( EventModel(event_type='ITEM_RENAME', source_id=folder.folder_id, source_type='folder'), ) elif key == 'sync_state': event_type = 'ITEM_SYNC' if value == FolderSyncState.IS_SYNCED else 'ITEM_UNSYNC' self._db_session.add( EventModel(event_type=event_type, source_id=folder.folder_id, source_type='folder'), ) self._db_session.commit() return json.dumps(folder)
def _get_parent(self): params = json.load(request.body) parent = params.get('parent') if parent is None or 'id' not in parent: abort(400, 'Missing parameter: parent(id)') parent_id = parent['id'] return get_folder_by_id(self._db_session, parent_id)
def update_file_info(self, file_id): file_object = get_file_by_id(self._db_session, file_id) self._check_file_lock(file_object) params = json.load(request.body) for key, value in params.items(): if not hasattr(FileModel, key): abort(400, 'File has no attribute {0}.'.format(key)) if key == 'parent': # Move parent_id = value['id'] parent_folder = get_folder_by_id(self._db_session, parent_id) file_object.parent_id = parent_folder.id self._db_session.add( EventModel(event_type='ITEM_MOVE', source_id=file_object.file_id, source_type='file'), ) else: setattr(file_object, key, value) if key == 'name': self._db_session.add( EventModel(event_type='ITEM_RENAME', source_id=file_object.file_id, source_type='file'), ) elif key == 'sync_state': event_type = 'ITEM_SYNC' if value == 'synced' else 'ITEM_UNSYNC' self._db_session.add( EventModel(event_type=event_type, source_id=file_object.file_id, source_type='file'), ) self._db_session.commit() return json.dumps(file_object)
def upload_file(self): """ https://developers.box.com/docs/#files-upload-a-file """ attributes = request.forms.get('attributes') or request.forms.get( 'metadata') if not attributes: abort(400, 'Missing parameter: attributes') attributes = json.loads(attributes) parent = attributes.get('parent') if parent is None or 'id' not in parent: abort(400, 'Missing parameter: parent(id)') parent_id = parent['id'] folder = get_folder_by_id(self._db_session, parent_id) content = request.files.file.file.read() file_hash = sha1() file_hash.update(content) owner = get_user_from_header(self._db_session) file_object = FileModel( content=content, name=attributes.get('name', request.files.file.name), parent_id=folder.id, sha1=file_hash.hexdigest(), size=len(content), owned_by=owner, created_by=owner, ) self._db_session.add(file_object) self._db_session.commit() self._db_session.add( EventModel(event_type='ITEM_UPLOAD', source_id=file_object.file_id, source_type='file')) self._db_session.commit() return json.dumps({'entries': [file_object]})
def update_file_info(self, file_id): file_object = get_file_by_id(self._db_session, file_id) self._check_file_lock(file_object) params = json.load(request.body) for key, value in params.items(): if not hasattr(FileModel, key): abort(400, 'File has no attribute {0}.'.format(key)) if key == 'parent': # Move parent_id = value['id'] parent_folder = get_folder_by_id(self._db_session, parent_id) file_object.parent_id = parent_folder.id self._db_session.add( EventModel(event_type='ITEM_MOVE', source_id=file_object.file_id, source_type='file'), ) else: setattr(file_object, key, value) if key == 'name': self._db_session.add( EventModel(event_type='ITEM_RENAME', source_id=file_object.file_id, source_type='file'), ) elif key == 'sync_state': event_type = 'ITEM_SYNC' if value == 'synced' else 'ITEM_UNSYNC' self._db_session.add( EventModel(event_type=event_type, source_id=file_object.file_id, source_type='file'), ) self._db_session.commit() return json.dumps(file_object)
def upload_file(self): """ https://developers.box.com/docs/#files-upload-a-file """ attributes = request.forms.get('attributes') or request.forms.get('metadata') if not attributes: abort(400, 'Missing parameter: attributes') attributes = json.loads(attributes) parent = attributes.get('parent') if parent is None or 'id' not in parent: abort(400, 'Missing parameter: parent(id)') parent_id = parent['id'] folder = get_folder_by_id(self._db_session, parent_id) content = request.files.file.file.read() file_hash = sha1() file_hash.update(content) owner = get_user_from_header(self._db_session) file_object = FileModel( content=content, name=attributes.get('name', request.files.file.name), parent_id=folder.id, sha1=file_hash.hexdigest(), size=len(content), owned_by=owner, created_by=owner, ) self._db_session.add(file_object) self._db_session.commit() self._db_session.add(EventModel(event_type='ITEM_UPLOAD', source_id=file_object.file_id, source_type='file')) self._db_session.commit() return json.dumps({'entries': [file_object]})
def delete_folder(self, folder_id): folder = get_folder_by_id(self._db_session, folder_id) self._db_session.delete(folder) self._db_session.commit() self._db_session.add( EventModel(event_type='ITEM_TRASH', source_id=folder.folder_id, source_type='folder')) response.status = 204
def copy_folder(self, folder_id): folder = get_folder_by_id(self._db_session, folder_id) parent_folder = self._get_parent() self._db_session.expunge(folder) make_transient(folder) folder.id = None folder.folder_id = None folder.parent_id = parent_folder.id self._db_session.add(folder) self._db_session.commit() self._db_session.add(EventModel(event_type='ITEM_COPY', source_id=folder.folder_id, source_type='folder')) self._db_session.commit() return json.dumps(folder)
def copy_folder(self, folder_id): folder = get_folder_by_id(self._db_session, folder_id) parent_folder = self._get_parent() self._db_session.expunge(folder) make_transient(folder) folder.id = None folder.folder_id = None folder.parent_id = parent_folder.id self._db_session.add(folder) self._db_session.commit() self._db_session.add(EventModel(event_type="ITEM_COPY", source_id=folder.folder_id, source_type="folder")) self._db_session.commit() return json.dumps(folder)
def get_folder_items(self, folder_id): view = request.params.get('view', None) if view is not None and view == 'subfolder_sync_forked_tree': return self._gat(folder_id) limit = int(request.params.get('limit', 100)) offset = int(request.params.get('offset', 0)) # fields = request.params.get('fields') # fields = set(fields.split(',')) if fields else set() | set(['name']) folder = get_folder_by_id(self._db_session, folder_id) folder_count = self._db_session.query(FolderModel).filter_by(parent_id=folder.id).count() folders = [] if folder_count > offset: folders = self._db_session.query( FolderModel, ).filter_by(parent_id=folder.id).limit(limit).offset(offset).all() files = [] if len(folders) < limit: limit -= len(folders) offset -= folder_count files = self._db_session.query(FileModel).filter_by(parent_id=folder.id).limit(limit).offset(offset).all() items = folders + files return json.dumps({'total_count': len(items), 'entries': items})
def get_folder_items(self, folder_id): view = request.params.get("view", None) if view is not None and view == "subfolder_sync_forked_tree": return self._gat(folder_id) limit = int(request.params.get("limit", 100)) offset = int(request.params.get("offset", 0)) # fields = request.params.get('fields') # fields = set(fields.split(',')) if fields else set() | set(['name']) folder = get_folder_by_id(self._db_session, folder_id) folder_count = self._db_session.query(FolderModel).filter_by(parent_id=folder.id).count() folders = [] if folder_count > offset: folders = ( self._db_session.query(FolderModel).filter_by(parent_id=folder.id).limit(limit).offset(offset).all() ) files = [] if len(folders) < limit: limit -= len(folders) offset -= folder_count files = self._db_session.query(FileModel).filter_by(parent_id=folder.id).limit(limit).offset(offset).all() items = folders + files return json.dumps({"total_count": len(items), "entries": items})
def get_folder_info(self, folder_id): """ https://developers.box.com/docs/#folders-get-information-about-a-folder """ folder = get_folder_by_id(self._db_session, folder_id) return json.dumps(folder)
def delete_folder(self, folder_id): folder = get_folder_by_id(self._db_session, folder_id) self._db_session.delete(folder) self._db_session.commit() self._db_session.add(EventModel(event_type="ITEM_TRASH", source_id=folder.folder_id, source_type="folder")) response.status = 204
def get_folder_info(self, folder_id): """ https://developers.box.com/docs/#folders-get-information-about-a-folder """ folder = get_folder_by_id(self._db_session, folder_id) return json.dumps(folder)