mirror of
https://github.com/krateng/maloja.git
synced 2025-07-09 03:04:07 -04:00
Experimental pagination feedback for API
This commit is contained in:
parent
7ac6473ce3
commit
f613abaa20
@ -18,7 +18,7 @@ from ..pkg_global.conf import malojaconfig, data_dir
|
|||||||
|
|
||||||
|
|
||||||
from ..__pkginfo__ import VERSION
|
from ..__pkginfo__ import VERSION
|
||||||
from ..malojauri import uri_to_internal, compose_querystring, internal_to_uri
|
from ..malojauri import uri_to_internal, compose_querystring, internal_to_uri, create_uri
|
||||||
from .. import images
|
from .. import images
|
||||||
from ._apikeys import apikeystore, api_key_correct
|
from ._apikeys import apikeystore, api_key_correct
|
||||||
|
|
||||||
@ -142,6 +142,37 @@ def add_common_args_to_docstring(filterkeys=False,limitkeys=False,delimitkeys=Fa
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def add_pagination(endpoint,filterkeys=False,limitkeys=False,delimitkeys=False):
|
||||||
|
|
||||||
|
def decorator(func):
|
||||||
|
def wrapper(*args,**kwargs):
|
||||||
|
|
||||||
|
k_filter, k_limit, k_delimit, k_amount, _ = uri_to_internal(kwargs,api=True)
|
||||||
|
keydicts = []
|
||||||
|
if filterkeys: keydicts.append(k_filter)
|
||||||
|
if limitkeys: keydicts.append(k_limit)
|
||||||
|
if delimitkeys: keydicts.append(k_delimit)
|
||||||
|
keydicts.append(k_amount)
|
||||||
|
|
||||||
|
|
||||||
|
result = func(*args,**kwargs)
|
||||||
|
|
||||||
|
result['pagination'] = {
|
||||||
|
'page': k_amount['page'],
|
||||||
|
'perpage': k_amount['perpage'] if (k_amount['perpage'] is not math.inf) else None,
|
||||||
|
'next_page': create_uri(api.pathprefix + '/' + endpoint,*keydicts,{'page':k_amount['page']+1}) if len(result.get('list',[]))==k_amount['perpage'] else None,
|
||||||
|
'prev_page': create_uri(api.pathprefix + '/' + endpoint,*keydicts,{'page':k_amount['page']-1}) if k_amount['page'] > 0 else None
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
wrapper.__doc__ = func.__doc__
|
||||||
|
wrapper.__annotations__ = func.__annotations__
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
return decorator
|
||||||
|
|
||||||
@api.get("test")
|
@api.get("test")
|
||||||
@catch_exceptions
|
@catch_exceptions
|
||||||
def test_server(key=None):
|
def test_server(key=None):
|
||||||
@ -194,6 +225,7 @@ def server_info():
|
|||||||
@api.get("scrobbles")
|
@api.get("scrobbles")
|
||||||
@catch_exceptions
|
@catch_exceptions
|
||||||
@add_common_args_to_docstring(filterkeys=True,limitkeys=True,amountkeys=True)
|
@add_common_args_to_docstring(filterkeys=True,limitkeys=True,amountkeys=True)
|
||||||
|
@add_pagination("scrobbles",filterkeys=True,limitkeys=True)
|
||||||
def get_scrobbles_external(**keys):
|
def get_scrobbles_external(**keys):
|
||||||
"""Returns a list of scrobbles.
|
"""Returns a list of scrobbles.
|
||||||
|
|
||||||
|
@ -73,7 +73,11 @@ def uri_to_internal(keys,forceTrack=False,forceArtist=False,forceAlbum=False,api
|
|||||||
#different max than the internal one! the user doesn't get to disable pagination
|
#different max than the internal one! the user doesn't get to disable pagination
|
||||||
if "page" in keys: amountkeys["page"] = int(keys["page"])
|
if "page" in keys: amountkeys["page"] = int(keys["page"])
|
||||||
if "perpage" in keys: amountkeys["perpage"] = int(keys["perpage"])
|
if "perpage" in keys: amountkeys["perpage"] = int(keys["perpage"])
|
||||||
|
#amountkeys["reverse"] = (keys.get("reverse","no").lower() == "yes")
|
||||||
|
# we have different defaults for different things, so here we need to actually pass true false or nothing dependent
|
||||||
|
# on whether its specified
|
||||||
|
if keys.get("reverse","").lower() == 'yes': amountkeys['reverse'] = True
|
||||||
|
elif keys.get("reverse","").lower() == 'no': amountkeys['reverse'] = False
|
||||||
|
|
||||||
#5
|
#5
|
||||||
specialkeys = {}
|
specialkeys = {}
|
||||||
@ -144,6 +148,8 @@ def internal_to_uri(keys):
|
|||||||
urikeys.append("page",str(keys["page"]))
|
urikeys.append("page",str(keys["page"]))
|
||||||
if "perpage" in keys:
|
if "perpage" in keys:
|
||||||
urikeys.append("perpage",str(keys["perpage"]))
|
urikeys.append("perpage",str(keys["perpage"]))
|
||||||
|
if "reverse" in keys:
|
||||||
|
urikeys.append("reverse","yes" if keys['reverse'] else "no")
|
||||||
|
|
||||||
if keys.get("separate",False):
|
if keys.get("separate",False):
|
||||||
urikeys.append("separate","yes")
|
urikeys.append("separate","yes")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user