Example #1
0
    def post(self, prefix, file_path):
        if not self.check_post_etag(prefix, file_path, self.request.headers.get('If-Match')):
            return

        file_size = self.temp.tell()
        yield self._authorize_upload_request(file_path, file_size, prefix)
        self.finish_database()

        self.temp.seek(0)
        storage_object, size_diff = yield self.store_file(prefix, file_path, self.temp.name)
        self.temp.close()
        mon.TRAFFIC_REQUEST.inc(storage_object.size)
        yield self.save_size_log(prefix, size_diff)
        self.set_status(204)
        self.set_header('ETag', storage_object.etag)

        path = '{}/{}'.format(prefix, file_path)
        pubsub = self.get_pubsub_cls()()
        yield pubsub.publish(path.encode(), {
            'operation': 'POST',
            'prefix': prefix,
            'path': path,
            'etag': storage_object.etag,
        })
        self.finish()
Example #2
0
 def delete(self, prefix, file_path):
     size = yield self.delete_file(prefix, file_path)
     yield self.save_size_log(prefix, -size)
     self.set_status(204)
     path = '{}/{}'.format(prefix, file_path)
     pubsub = self.get_pubsub_cls()()
     yield pubsub.publish(path.encode(), {
         'operation': 'DELETE',
         'prefix': prefix,
         'path': path,
     })
     self.finish()