class TestWebFileStore(unittest.TestCase, SimpleUrlKVTest): def setUp(self): self.tmpdir = tempfile.mkdtemp() self.url_prefix = 'http://some/url/root/' self.store = WebFilesystemStore(self.tmpdir, self.url_prefix) def tearDown(self): shutil.rmtree(self.tmpdir) def test_url(self): key = 'some_key' expected = self.url_prefix + 'some_key' self.assertEqual(self.store.url_for(key), expected) def test_url_callable(self): prefix = 'http://some.prefix.invalid/' mock_callable = Mock(return_value=prefix) self.store = WebFilesystemStore(self.tmpdir, mock_callable) key = 'mykey' expected = prefix + key self.assertEqual(self.store.url_for(key), expected) mock_callable.assert_called_with(self.store, key)
def __init__(self, path, storage_url_prefix=None): if not os.path.exists(path): raise RuntimeError('Path {} does not exist'.format(path)) if storage_url_prefix is None: self.store = FilesystemStore(path) else: self.store = WebFilesystemStore(path, storage_url_prefix)
def test_url_callable(self, tmpdir, key): prefix = 'http://some.prefix.invalid/' mock_callable = Mock(return_value=prefix) store = WebFilesystemStore(tmpdir, mock_callable) expected = prefix + url_quote(key) assert store.url_for(key) == expected mock_callable.assert_called_with(store, key)
class FilesystemStorage(Storage): def __init__(self, path, storage_url_prefix=None): if not os.path.exists(path): raise RuntimeError('Path {} does not exist'.format(path)) if storage_url_prefix is None: self.store = FilesystemStore(path) else: self.store = WebFilesystemStore(path, storage_url_prefix) def _store_file(self, hash, file): self.store.put_file(hash, file) def get_download_url(self, file): if hasattr(self.store, 'url_for'): return self.store.url_for(file.hash)
def test_url_callable(self): prefix = 'http://some.prefix.invalid/' mock_callable = Mock(return_value=prefix) self.store = WebFilesystemStore(self.tmpdir, mock_callable) key = 'mykey' expected = prefix + key self.assertEqual(self.store.url_for(key), expected) mock_callable.assert_called_with(self.store, key)
def store(self, tmpdir, url_prefix): return WebFilesystemStore(tmpdir, url_prefix)
from flask_app.middleware import * from flask_app.middleware.csrf import CSRFProtectionExtension load_dotenv() # get environment variables configure_logging() # configure loggers before starting app app = Flask(__name__) app.config.update(**config) # Configure Session using standard web session files, # more store types available in simplekv package # Hash Decorator provides session id session_store = HashDecorator( WebFilesystemStore(os.getenv("FLASK_SESSION_FILE_PATH"), os.getenv("FLASK_SESSION_URL_PREFIX"))) KVSessionExtension(session_store, app) # Add CSRFProtect extension to flask app # NOTE: this extends flask_wtf.CSRFProtect class; see class definition for details CSRFProtectionExtension(app) # Create Api blueprint and add resources (routes) api_blueprint = Blueprint('api', __name__) api = ElectroAPI(api_blueprint, catch_all_404s=True) # contains custom error handler api.add_resource(BillResource, "/bills", "/bills/<int:id>", endpoint="bill") api.add_resource(UserResource, "/login", "/logout", endpoint="login") # Register blueprint to app app.register_blueprint(api_blueprint, url_prefix="/api")
def setUp(self): self.tmpdir = tempfile.mkdtemp() self.url_prefix = 'http://some/url/root/' self.store = WebFilesystemStore(self.tmpdir, self.url_prefix)