39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
import click
|
|
from os import environ
|
|
from flask import current_app
|
|
from flask.cli import with_appcontext, run_command
|
|
|
|
|
|
class PrefixMiddleware(object):
|
|
def __init__(self, app, prefix=""):
|
|
self.app = app
|
|
self.prefix = prefix
|
|
|
|
def __call__(self, environ, start_response):
|
|
|
|
if environ["PATH_INFO"].startswith(self.prefix):
|
|
environ["PATH_INFO"] = environ["PATH_INFO"][len(self.prefix) :]
|
|
environ["SCRIPT_NAME"] = self.prefix
|
|
return self.app(environ, start_response)
|
|
else:
|
|
start_response("404", [("Content-Type", "text/plain")])
|
|
return ["This url does not belong to the app.".encode()]
|
|
|
|
|
|
@click.command()
|
|
@click.option("--host", help="set hostname to listen on", default="127.0.0.1", show_default=True)
|
|
@click.option("--port", help="set port to listen on", type=int, default=5000, show_default=True)
|
|
@click.option("--debug", help="run in debug mode", is_flag=True)
|
|
@with_appcontext
|
|
@click.pass_context
|
|
def run(ctx, host, port, debug):
|
|
"""Run Flaschengeist using a development server."""
|
|
from flaschengeist.config import config
|
|
|
|
current_app.wsgi_app = PrefixMiddleware(current_app.wsgi_app, prefix=config["FLASCHENGEIST"].get("root", ""))
|
|
if debug:
|
|
environ["FLASK_DEBUG"] = "1"
|
|
environ["FLASK_ENV"] = "development"
|
|
|
|
ctx.invoke(run_command, reload=True, host=host, port=port, debugger=debug)
|