# HG changeset patch # User Ludovic Chabant # Date 1366557074 25200 # Node ID 8f785c5858c68d57294d602a5339db54fbca2091 # Parent fa8f18c9be9a4b21ea4cd290da489406a2943171 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. diff -r fa8f18c9be9a -r 8f785c5858c6 wikked/views.py --- 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/') def api_diff_page(url): rev1 = request.args.get('rev1')