Skip to content
Snippets Groups Projects
Commit 7c177516 authored by ale's avatar ale
Browse files

Try to do memoization without Flask-Caching

Flask-Caching is Python 3 only, and we need Python 2 support.
parent 613b9699
No related branches found
No related tags found
No related merge requests found
......@@ -5,9 +5,7 @@ import re
import ssl
import subprocess
import sys
from functools import wraps
from flask import Flask, request, abort, make_response, jsonify, g
from flask_caching import Cache
from .sso_api import sso_api_auth_required, init_sso
from .tls_auth import tls_auth, init_tls_auth, PeerCertWSGIRequestHandler
......@@ -23,8 +21,6 @@ app.config['TLS_AUTH_ACLS'] = [
('/', 'client'),
]
cache = Cache(config={'CACHE_TYPE': 'SimpleCache'})
# Set up environment for Mailman processes: if we don't explicitly
# control LANG, we're going to get locale setup errors.
mm_env = dict(os.environ)
......@@ -133,10 +129,24 @@ def regenerate_archives():
### Instrumentation.
def cache(timeout):
_store = {'deadline': 0, 'value': None}
def _cache_wrapper(fn):
@wraps(fn)
def _cache(*args, **kwargs):
now = time.time()
if now > _store['deadline']:
_store['value'] = fn(*args, **kwargs)
_store['deadline'] = now + timeout
return _store['value']
return _cache
return _cache_wrapper
@app.route('/metrics')
@cache.cached(timeout=900)
@cache(900)
def metrics():
def _dump_metrics():
out = []
list_names = Utils.list_names()
for list_name in list_names:
try:
......@@ -147,10 +157,10 @@ def metrics():
num_rmembers = len(mlist.getRegularMemberKeys())
num_dmembers = len(mlist.getDigestMemberKeys())
yield 'mailman_subscribers{list="%s"} %d\n' % (
list_name.lower(), num_rmembers + num_dmembers)
out.append('mailman_subscribers{list="%s"} %d\n' % (
list_name.lower(), num_rmembers + num_dmembers))
return app.response_class(_dump_metrics(), mimetype='text/plain')
return app.response_class(''.join(out), mimetype='text/plain')
### SSL server with the right parameters.
......@@ -182,7 +192,6 @@ def main():
parser.error('Too many arguments')
app.config.from_pyfile(opts.config)
cache.init_app(app)
init_sso(app)
init_tls_auth(app)
serve_ssl(app, host=opts.addr, port=opts.port)
......
git+https://git.autistici.org/ai/sso.git#egg=sso&subdirectory=src/python
Flask
Flask-Caching
......@@ -11,7 +11,6 @@ setup(
author_email="info@autistici.org",
url="https://git.autistici.org/ai3/python-mailman-api",
install_requires=["Flask",
"Flask-Caching",
"sso"],
packages=find_packages(),
entry_points={
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment