unify redis config (closes #8)
also, not sure why brotli was being initialised in routes not in app
This commit is contained in:
parent
fda4428572
commit
146dd263c9
17
app.py
17
app.py
|
@ -9,18 +9,18 @@ from flask_limiter import Limiter
|
||||||
from lib.auth import get_viewer
|
from lib.auth import get_viewer
|
||||||
import os
|
import os
|
||||||
import mimetypes
|
import mimetypes
|
||||||
|
import lib.brotli
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
default_config = {
|
default_config = {
|
||||||
"SQLALCHEMY_TRACK_MODIFICATIONS": False,
|
"SQLALCHEMY_TRACK_MODIFICATIONS": False,
|
||||||
"SQLALCHEMY_DATABASE_URI": "postgresql+psycopg2:///forget",
|
"SQLALCHEMY_DATABASE_URI": "postgresql+psycopg2:///forget",
|
||||||
"CELERY_BROKER": "redis://",
|
|
||||||
"HTTPS": True,
|
"HTTPS": True,
|
||||||
"SENTRY_CONFIG": {},
|
"SENTRY_CONFIG": {},
|
||||||
"RATELIMIT_STORAGE_URL": "redis://",
|
|
||||||
"REPO_URL": "https://github.com/codl/forget",
|
"REPO_URL": "https://github.com/codl/forget",
|
||||||
"COMMIT_URL": "https://github.com/codl/forget/commits/{hash}",
|
"COMMIT_URL": "https://github.com/codl/forget/commits/{hash}",
|
||||||
|
"REDIS_URI": "redis://",
|
||||||
}
|
}
|
||||||
|
|
||||||
app.config.update(default_config)
|
app.config.update(default_config)
|
||||||
|
@ -38,6 +38,17 @@ metadata = MetaData(naming_convention={
|
||||||
db = SQLAlchemy(app, metadata=metadata)
|
db = SQLAlchemy(app, metadata=metadata)
|
||||||
migrate = Migrate(app, db)
|
migrate = Migrate(app, db)
|
||||||
|
|
||||||
|
if not 'RATELIMIT_STORAGE_URL' in app.config:
|
||||||
|
uri = app.config['REDIS_URI']
|
||||||
|
assert not uri.startswith('unix://'), "flask-limiter does not support redis over a unix socket"
|
||||||
|
app.config['RATELIMIT_STORAGE_URL'] = uri
|
||||||
|
|
||||||
|
if not 'CELERY_BROKER' in app.config:
|
||||||
|
uri = app.config['REDIS_URI']
|
||||||
|
if uri.startswith('unix://'):
|
||||||
|
uri = url.replace('unix', 'redis+socket', 1)
|
||||||
|
app.config['CELERY_BROKER'] = uri
|
||||||
|
|
||||||
sentry = None
|
sentry = None
|
||||||
if 'SENTRY_DSN' in app.config:
|
if 'SENTRY_DSN' in app.config:
|
||||||
from raven.contrib.flask import Sentry
|
from raven.contrib.flask import Sentry
|
||||||
|
@ -100,3 +111,5 @@ def install_security_headers(resp):
|
||||||
|
|
||||||
|
|
||||||
mimetypes.add_type('image/webp', '.webp')
|
mimetypes.add_type('image/webp', '.webp')
|
||||||
|
|
||||||
|
lib.brotli.brotli(app)
|
||||||
|
|
|
@ -13,6 +13,14 @@ only postgresql with psycopg2 driver is officially supported
|
||||||
"""
|
"""
|
||||||
# SQLALCHEMY_DATABASE_URI='postgresql+psycopg2:///forget'
|
# SQLALCHEMY_DATABASE_URI='postgresql+psycopg2:///forget'
|
||||||
|
|
||||||
|
"""
|
||||||
|
REDIS URI
|
||||||
|
|
||||||
|
see https://redis-py.readthedocs.io/en/latest/#redis.ConnectionPool.from_url
|
||||||
|
for syntax reference
|
||||||
|
"""
|
||||||
|
# REDIS_URI='redis://'
|
||||||
|
|
||||||
"""
|
"""
|
||||||
TWITTER CREDENTIALS
|
TWITTER CREDENTIALS
|
||||||
|
|
||||||
|
@ -27,32 +35,11 @@ this will be necessary so we can tell twitter where to redirect
|
||||||
"""
|
"""
|
||||||
# SERVER_NAME="localhost:5000"
|
# SERVER_NAME="localhost:5000"
|
||||||
|
|
||||||
# CELERY_BROKER='redis://'
|
|
||||||
|
|
||||||
# HTTPS=True
|
# HTTPS=True
|
||||||
|
|
||||||
# SENTRY_DSN='https://foo:bar@sentry.io/69420'
|
# SENTRY_DSN='https://foo:bar@sentry.io/69420'
|
||||||
|
|
||||||
'''
|
|
||||||
you can set this to memory:// if you only have one web process
|
|
||||||
or if you don't care about people exhausting your twitter api
|
|
||||||
key and your celery workers by making hundreds of login
|
|
||||||
requests and uploading hundreds of bogus tweet archives
|
|
||||||
|
|
||||||
docs here <https://flask-limiter.readthedocs.io/en/stable/#configuration>
|
|
||||||
'''
|
|
||||||
# RATELIMIT_STORAGE_URL='redis://'
|
|
||||||
|
|
||||||
# REDIS=dict(
|
|
||||||
# db=0
|
|
||||||
#
|
|
||||||
# host='localhost'
|
|
||||||
# port=6379
|
|
||||||
# # or...
|
|
||||||
# unix_socket_path='/var/run/redis/redis.sock'
|
|
||||||
# # see `pydoc redis.StrictRedis.__init__` for full list of arguments
|
|
||||||
# )
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
you can also use any config variable that flask expects here, such as
|
you can also use any config variable that flask expects here, such as
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -8,10 +8,8 @@ import mimetypes
|
||||||
|
|
||||||
|
|
||||||
class BrotliCache(object):
|
class BrotliCache(object):
|
||||||
def __init__(self, redis_kwargs=None, max_wait=0.020, expire=60*60*6):
|
def __init__(self, redis_uri='redis://', max_wait=0.020, expire=60*60*6):
|
||||||
if not redis_kwargs:
|
self.redis = redis.StrictRedis.from_url(redis_uri)
|
||||||
redis_kwargs = {}
|
|
||||||
self.redis = redis.StrictRedis(**redis_kwargs)
|
|
||||||
self.max_wait = max_wait
|
self.max_wait = max_wait
|
||||||
self.expire = expire
|
self.expire = expire
|
||||||
self.redis.client_setname('brotlicache')
|
self.redis.client_setname('brotlicache')
|
||||||
|
@ -81,5 +79,5 @@ def brotli(app, static=True, dynamic=True):
|
||||||
if static:
|
if static:
|
||||||
app.view_functions['static'] = static_maybe_gzip_brotli
|
app.view_functions['static'] = static_maybe_gzip_brotli
|
||||||
if dynamic:
|
if dynamic:
|
||||||
cache = BrotliCache()
|
cache = BrotliCache(redis_uri = app.config.get('REDIS_URI'))
|
||||||
app.after_request(cache.wrap_response)
|
app.after_request(cache.wrap_response)
|
||||||
|
|
|
@ -14,7 +14,6 @@ from twitter import TwitterError
|
||||||
from urllib.error import URLError
|
from urllib.error import URLError
|
||||||
import version
|
import version
|
||||||
import lib.version
|
import lib.version
|
||||||
import lib.brotli
|
|
||||||
import lib.settings
|
import lib.settings
|
||||||
import lib.json
|
import lib.json
|
||||||
|
|
||||||
|
@ -54,9 +53,6 @@ def touch_viewer(resp):
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
|
||||||
lib.brotli.brotli(app)
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
def index():
|
def index():
|
||||||
if g.viewer:
|
if g.viewer:
|
||||||
|
|
Loading…
Reference in New Issue