Files
pypistats.org/pypistats/run.py
Flynn a5bb518b88 updates (#31)
* update ignore files

* setup poetry

* add db seeds

* black

* set up compose

* backfill script

* add makefile, update readme

* update poetry

* readme

* Fixes

* cleanup and rate limit changes

* poetry 1.0.5

* some more cleanup

* k8s

* k8s

* update yml

* cleanup and admin

* deploy
2020-08-15 18:36:37 -04:00

40 lines
1.1 KiB
Python

"""Run the application."""
import os
from flask import g
from flask import redirect
from flask import request
from flask import session
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
from werkzeug.middleware.proxy_fix import ProxyFix
from pypistats.application import create_app
from pypistats.config import configs
from pypistats.models.user import User
# change this for migrations
env = os.environ.get("ENV", "development")
app = create_app(configs[env])
# Rate limiting per IP/worker
app.wsgi_app = ProxyFix(app.wsgi_app)
limiter = Limiter(app, key_func=get_remote_address, application_limits=["5 per second", "30 per minute"])
app.logger.info(f"Environment: {env}")
@app.before_request
def before_request():
"""Execute before requests."""
# http -> https
scheme = request.headers.get("X-Forwarded-Proto")
if scheme and scheme == "http" and request.url.startswith("http://"):
url = request.url.replace("http://", "https://", 1)
return redirect(url, code=301)
# set user
g.user = None
if "user_id" in session:
g.user = User.query.get(session["user_id"])