From 004e9a8144cd120f6f245dd9865db469c243d34d Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Mon, 10 Feb 2014 13:30:57 +0100 Subject: [PATCH] Add query converter --- beetsplug/web/__init__.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/beetsplug/web/__init__.py b/beetsplug/web/__init__.py index 6d5ab3ee0..b2c835787 100644 --- a/beetsplug/web/__init__.py +++ b/beetsplug/web/__init__.py @@ -19,7 +19,7 @@ from beets import util import beets.library import flask from flask import g -from werkzeug.routing import BaseConverter +from werkzeug.routing import BaseConverter, PathConverter import os import json @@ -92,11 +92,9 @@ def resource_query(name): """Decorates a function to handle RESTful HTTP queries for resources. """ def make_responder(query_func): - def responder(query): - parts = query.split('/') - entities = query_func(parts) + def responder(queries): return app.response_class( - json_generator(entities, root='results'), + json_generator(query_func(queries), root='results'), mimetype='application/json') responder.__name__ = 'query_%s' % name return responder @@ -133,11 +131,22 @@ class IdListConverter(BaseConverter): return ','.join(value) +class QueryConverter(PathConverter): + """Converts slash separated lists of queries in the url to string list. + """ + + def to_python(self, value): + return value.split('/') + + def to_url(self, value): + return ','.join(value) + # Flask setup. app = flask.Flask(__name__) app.url_map.converters['idlist'] = IdListConverter +app.url_map.converters['query'] = QueryConverter @app.before_request def before_request(): @@ -166,7 +175,7 @@ def item_file(item_id): response.headers['Content-Length'] = os.path.getsize(item.path) return response -@app.route('/item/query/') +@app.route('/item/query/') @resource_query('items') def item_query(queries): return g.lib.items(queries) @@ -185,7 +194,7 @@ def get_album(id): def all_albums(): return g.lib.albums() -@app.route('/album/query/') +@app.route('/album/query/') @resource_query('albums') def album_query(queries): return g.lib.album(queries)