diff options
| -rw-r--r-- | app.py | 28 | ||||
| -rw-r--r-- | requirements.txt | 2 |
2 files changed, 22 insertions, 8 deletions
@@ -2,6 +2,7 @@ import json from flask import Flask, request from flask.ext import restful +from flask.ext.cache import Cache from flask.ext.restful import reqparse from flask.ext.sqlalchemy import SQLAlchemy @@ -12,6 +13,10 @@ from cors import crossdomain app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = environ.get('DATABASE_URL', 'postgres://localhost:5432/traces') +cache = Cache(app, config={ + 'CACHE_TYPE': 'redis', + 'CACHE_REDIS_URL': environ.get('REDISCLOUD_URL', 'redis://localhost') +}) db = SQLAlchemy(app) api = restful.Api(app) @@ -33,19 +38,26 @@ class Trace(db.Model): def __repr__(self): return '{} {}'.format(self.id, self.page) +@cache.memoize(timeout=60*2) +def _get_page_traces(page=None, limit=3): + print 'hit' + traces = Trace.query + if page: + traces = traces.filter_by(page=page) + traces = traces.order_by(Trace.id.desc()).limit(limit) + return json.dumps([{ + 'page': trace.page, + 'trace': json.loads(trace.trace) + } for trace in traces]) + class Traces(restful.Resource): @crossdomain(origin='*') def get(self): args = trace_parser.parse_args() - traces = Trace.query - if 'page' in request.args: - traces = traces.filter_by(page=request.args['page']) - traces = traces.order_by(Trace.id.desc()).limit(int(request.args.get('limit', '3'))) - return json.dumps([{ - 'page': trace.page, - 'trace': json.loads(trace.trace) - } for trace in traces]) + page = request.args.get('page') + limit = int(request.args.get('limit', '3')) + return _get_page_traces(page, limit) @crossdomain(origin='*') def post(self): diff --git a/requirements.txt b/requirements.txt index 2429179..060bcdd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ Flask==0.10.1 +Flask-Cache==0.12 Flask-RESTful==0.2.5 Flask-SQLAlchemy==1.0 Jinja2==2.7.1 @@ -8,5 +9,6 @@ Werkzeug==0.9.4 gunicorn==18.0 itsdangerous==0.23 psycopg2==2.5.1 +redis==2.8.0 six==1.4.1 wsgiref==0.1.2 |
