Source code for appyter.profiles.default.blueprints.StorageFileField

'''
WARNING: This blueprint may open an XSS vulnerability, and is thus opt-in through the storage-file-field extra, use with caution.
'''
import logging
logger = logging.getLogger(__name__)

[docs]def StorageFileField(flask_app, url_prefix=None): if 'storage-file-field' in flask_app.config['EXTRAS']: logger.info("Enabling storage file field...") from flask import Blueprint, abort, jsonify, request import traceback from appyter.ext.fsspec.core import url_to_fs_ex from appyter.ext.flask import route_join_with_or_without_slash blueprint = Blueprint('StorageFileField', __name__) @route_join_with_or_without_slash(blueprint, '', methods=['GET']) def index(): abort(404) @route_join_with_or_without_slash(blueprint, 'ls', methods=['GET']) @route_join_with_or_without_slash(blueprint, 'ls', '<path:path>', methods=['GET']) def ls(path=''): try: fs, fs_path = url_to_fs_ex(path + '#?' + request.query_string.decode()) return jsonify(fs.ls(fs_path)) except KeyboardInterrupt: raise except Exception: logger.error(traceback.format_exc()) abort(500) @route_join_with_or_without_slash(blueprint, 'info', methods=['GET']) @route_join_with_or_without_slash(blueprint, 'info', '<path:path>', methods=['GET']) def info(path=''): try: fs, fs_path = url_to_fs_ex(path + '#?' + request.query_string.decode()) return jsonify(fs.info(fs_path)) except KeyboardInterrupt: raise except Exception: logger.error(traceback.format_exc()) abort(500) # @route_join_with_or_without_slash(blueprint, 'cat', methods=['GET']) # @route_join_with_or_without_slash(blueprint, 'cat', '<path:path>', methods=['GET']) # def cat(path=''): # try: # fs, fs_path = url_to_fs_ex(path + '#?' + request.query_string.decode()) # return fs.cat(fs_path) # except KeyboardInterrupt: # raise # except Exception: # logger.error(traceback.format_exc()) # abort(500) # @route_join_with_or_without_slash(blueprint, 'read_block', methods=['GET']) # @route_join_with_or_without_slash(blueprint, 'read_block', '<path:path>', methods=['GET']) # def read_block(path=''): # try: # m = re.match(r'^(bytes )?(\d+)-(\d+)$', request.headers['Range']) # _, start, end = m.groups() # fs, fs_path = url_to_fs_ex(path + '#?' + request.query_string.decode()) # return fs.read_block(fs_path, start, end - start) # except KeyboardInterrupt: # raise # except Exception: # logger.error(traceback.format_exc()) # abort(500) flask_app.register_blueprint(blueprint, url_prefix=url_prefix)