def GET(request, api_library, app): """ GET /file/:file_id/data Download file data To retrieve file data, an application submits an HTTP GET request to the file data resource that represents the data for the file. """ try: _, _, file_id, _, version, _ = split_path(request.path, 4, 6, False) except: app.logger.error("StackSync API: data_resource GET: Wrong resource path: %s path_info: %s", str(400), str(request.path_info)) return create_error_response(400, "Wrong resource path. Expected /file/:file_id/data[/version/:version_id]]") app.logger.info('StackSync API: data_resource GET: path info: %s ', str(request.path_info)) user_id = request.environ["stacksync_user_id"] metadata = api_library.get_metadata(user_id, file_id, include_chunks=True, specific_version=version, is_folder=False) response = create_response(metadata, status_code=200) if not is_valid_status(response.status_int): app.logger.error("StackSync API: data_resource GET: status code: %s. body: %s", str(response.status_int), str(response.body)) return response metadata = json.loads(metadata) data_handler = DataHandler(app) workspace_info = api_library.get_workspace_info(user_id, file_id) response = create_response(workspace_info, status_code=200) if not is_valid_status(response.status_int): app.logger.error("StackSync API: data_resource GET: status code: %s. body: %s", str(response.status_int), str(response.body)) return response workspace_info = json.loads(workspace_info) container_name = workspace_info['swift_container'] print 'chunks to retrieve', metadata['chunks'] file_compress_content, status = data_handler.get_chunks(request.environ, metadata['chunks'], container_name) if is_valid_status(status): if len(file_compress_content) > 0: joined_file = BuildFile("", file_compress_content) joined_file.join() headers = {'Content-Type': metadata['mimetype']} return HTTPOk(body=joined_file.content, headers=headers) elif len(metadata['chunks']) == 0: return HTTPOk(body='') else: app.logger.error("StackSync API: data_resource GET: Unexpected case. File_id: %s.", str(file_id)) return create_error_response(500, "Could not retrieve file. Please contact an administrator.") else: app.logger.error("StackSync API: data_resource GET: Cannot retrieve chunks. File_id: %s. Status: %s", str(file_id), str(status)) return create_error_response(status, "Cannot retrieve chunks from storage backend.")
def GET(request, api_library, app): """ GET /file/:file_id/data Download file data To retrieve file data, an application submits an HTTP GET request to the file data resource that represents the data for the file. """ try: _, _, file_id, _, version, _ = split_path(request.path, 4, 6, False) except: app.logger.error( "StackSync API: data_resource GET: Wrong resource path: %s path_info: %s", str(400), str(request.path_info)) return create_error_response( 400, "Wrong resource path. Expected /file/:file_id/data[/version/:version_id]]" ) app.logger.info('StackSync API: data_resource GET: path info: %s ', str(request.path_info)) user_id = request.environ["stacksync_user_id"] metadata = api_library.get_metadata(user_id, file_id, include_chunks=True, specific_version=version, is_folder=False) response = create_response(metadata, status_code=200) if not is_valid_status(response.status_int): app.logger.error( "StackSync API: data_resource GET: status code: %s. body: %s", str(response.status_int), str(response.body)) return response metadata = json.loads(metadata) data_handler = DataHandler(app) workspace_info = api_library.get_workspace_info(user_id, file_id) response = create_response(workspace_info, status_code=200) if not is_valid_status(response.status_int): app.logger.error( "StackSync API: data_resource GET: status code: %s. body: %s", str(response.status_int), str(response.body)) return response workspace_info = json.loads(workspace_info) container_name = workspace_info['swift_container'] print 'chunks to retrieve', metadata['chunks'] file_compress_content, status = data_handler.get_chunks( request.environ, metadata['chunks'], container_name) if is_valid_status(status): if len(file_compress_content) > 0: joined_file = BuildFile("", file_compress_content) joined_file.join() headers = {'Content-Type': metadata['mimetype']} return HTTPOk(body=joined_file.content, headers=headers) elif len(metadata['chunks']) == 0: return HTTPOk(body='') else: app.logger.error( "StackSync API: data_resource GET: Unexpected case. File_id: %s.", str(file_id)) return create_error_response( 500, "Could not retrieve file. Please contact an administrator.") else: app.logger.error( "StackSync API: data_resource GET: Cannot retrieve chunks. File_id: %s. Status: %s", str(file_id), str(status)) return create_error_response( status, "Cannot retrieve chunks from storage backend.")