mirror of
https://github.com/beetbox/beets.git
synced 2025-12-29 12:02:44 +01:00
Merge pull request #2010 from sumpfralle/web-api-unique-results
web: add API functions for retrieving unique values of specific keys
This commit is contained in:
commit
59435792e9
1 changed files with 32 additions and 0 deletions
|
|
@ -124,6 +124,16 @@ def resource_list(name):
|
|||
return make_responder
|
||||
|
||||
|
||||
def _get_unique_table_field_values(model, field, sort_field):
|
||||
""" retrieve all unique values belonging to a key from a model """
|
||||
if field not in model.all_keys() or sort_field not in model.all_keys():
|
||||
raise KeyError
|
||||
with g.lib.transaction() as tx:
|
||||
rows = tx.query('SELECT DISTINCT "{0}" FROM "{1}" ORDER BY "{2}"'
|
||||
.format(field, model._table, sort_field))
|
||||
return [row[0] for row in rows]
|
||||
|
||||
|
||||
class IdListConverter(BaseConverter):
|
||||
"""Converts comma separated lists of ids in urls to integer lists.
|
||||
"""
|
||||
|
|
@ -194,6 +204,17 @@ def item_query(queries):
|
|||
return g.lib.items(queries)
|
||||
|
||||
|
||||
@app.route('/item/values/<string:key>')
|
||||
def item_unique_field_values(key):
|
||||
sort_key = flask.request.args.get('sort_key', key)
|
||||
try:
|
||||
values = _get_unique_table_field_values(beets.library.Item, key,
|
||||
sort_key)
|
||||
except KeyError:
|
||||
return flask.abort(404)
|
||||
return flask.jsonify(values=values)
|
||||
|
||||
|
||||
# Albums.
|
||||
|
||||
@app.route('/album/<idlist:ids>')
|
||||
|
|
@ -224,6 +245,17 @@ def album_art(album_id):
|
|||
return flask.abort(404)
|
||||
|
||||
|
||||
@app.route('/album/values/<string:key>')
|
||||
def album_unique_field_values(key):
|
||||
sort_key = flask.request.args.get('sort_key', key)
|
||||
try:
|
||||
values = _get_unique_table_field_values(beets.library.Album, key,
|
||||
sort_key)
|
||||
except KeyError:
|
||||
return flask.abort(404)
|
||||
return flask.jsonify(values=values)
|
||||
|
||||
|
||||
# Artists.
|
||||
|
||||
@app.route('/artist/')
|
||||
|
|
|
|||
Loading…
Reference in a new issue