def get(self): """Handles REST GET verb and returns an object as JSON payload.""" assert is_editable_fs(self.app_context) key = self.request.get("key") if not FilesRights.can_view(self): transforms.send_json_response(self, 401, "Access denied.", {"key": key}) return # Load data if possible. fs = self.app_context.fs.impl filename = fs.physical_to_logical(key) try: stream = fs.get(filename) except: # pylint: disable=bare-except stream = None if not stream: transforms.send_json_response(self, 404, "Object not found.", {"key": key}) return # Prepare data. entity = {"key": key} if self.is_text_file(key): entity["encoding"] = self.FILE_ENCODING_TEXT entity["content"] = vfs.stream_to_string(stream) else: entity["encoding"] = self.FILE_ENCODING_BINARY entity["content"] = base64.b64encode(stream.read()) # Render JSON response. json_payload = transforms.dict_to_json(entity, FilesItemRESTHandler.SCHEMA_DICT) transforms.send_json_response( self, 200, "Success.", payload_dict=json_payload, xsrf_token=XsrfTokenManager.create_xsrf_token("file-put") )
def get(self): """Handles REST GET verb and returns an object as JSON payload.""" assert is_editable_fs(self.app_context) key = self.request.get('key') if not FilesRights.can_view(self): transforms.send_json_response(self, 401, 'Access denied.', {'key': key}) return # Load data if possible. fs = self.app_context.fs.impl filename = fs.physical_to_logical(key) try: stream = fs.get(filename) except: # pylint: disable=bare-except stream = None if not stream: transforms.send_json_response(self, 404, 'Object not found.', {'key': key}) return # Prepare data. entity = {'key': key} if self.is_text_file(key): entity['encoding'] = self.FILE_ENCODING_TEXT entity['content'] = vfs.stream_to_string(stream) else: entity['encoding'] = self.FILE_ENCODING_BINARY entity['content'] = base64.b64encode(stream.read()) # Render JSON response. json_payload = transforms.dict_to_json( entity, FilesItemRESTHandler.SCHEMA_DICT) transforms.send_json_response( self, 200, 'Success.', payload_dict=json_payload, xsrf_token=XsrfTokenManager.create_xsrf_token('file-put'))