Mercurial > wikked
changeset 98:8f785c5858c6
Added API endpoint for querying pages based on metadata.
It uses a very slow implementation, and needs some support from DB caching to be really usable.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 21 Apr 2013 08:11:14 -0700 |
parents | fa8f18c9be9a |
children | 58a1a7baca25 |
files | wikked/views.py |
diffstat | 1 files changed, 33 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/wikked/views.py Sun Apr 21 08:10:15 2013 -0700 +++ b/wikked/views.py Sun Apr 21 08:11:14 2013 -0700 @@ -17,8 +17,19 @@ CHECK_FOR_READ = 1 CHECK_FOR_WRITE = 2 + +def get_category_meta(category): + result = [] + for item in category: + result.append({ + 'url': Page.title_to_url(item), + 'name': item + }) + return result + COERCE_META = { - 'redirect': Page.title_to_url + 'redirect': Page.title_to_url, + 'category': get_category_meta } @@ -184,6 +195,27 @@ return make_auth_response(result) +@app.route('/api/query') +def api_query(): + query = dict(request.args) + + def makelower(i): + return i.lower() + + def filterfunc(p): + for k, v in query.iteritems(): + if not k.lower() in p.meta: + return False + if v is None: + return True + intersect = set(map(makelower, v)).intersection(map(makelower, p.meta[k])) + return len(intersect) > 0 + + pages = filter(filterfunc, g.wiki.getPages()) + result = {'pages': [get_page_meta(p) for p in pages]} + return make_auth_response(result) + + @app.route('/api/diff/<path:url>') def api_diff_page(url): rev1 = request.args.get('rev1')