Created
September 2, 2009 14:02
-
-
Save idan/179730 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def since(fn): | |
def decorated(self, request, **kwargs): | |
since = request.GET.get('since', None) | |
since_id = request.GET.get('since_id', None) | |
#if not since and not since_id: | |
# return fn(self, request, **kwargs) | |
if since and since_id: | |
# overconstrained | |
return rc.BAD_REQUEST | |
try: | |
if since_id: | |
since_id = int(since_id) | |
except ValueError: | |
return rc.BAD_REQUEST | |
if since: | |
try: | |
# validate date | |
since = iso8601.parse_date(since) | |
except iso8601.ParseError: | |
return rc.BAD_REQUEST | |
qs = fn(self, request, **kwargs) | |
if isinstance(qs, QuerySet): | |
if since: | |
qs = qs.filter(timestamp__gte=since) | |
elif since_id: | |
qs = qs.filter(id__gte=since_id) | |
return qs | |
return decorated | |
def paginated(default_count=50): | |
def decorated(fn): | |
def wrap(self, request, **kwargs): | |
page = request.GET.get('page', 1) | |
count = request.GET.get('count', default_count) | |
try: | |
# validate numbers | |
page = int(page) | |
count = int(count) | |
except ValueError: | |
return rc.BAD_REQUEST | |
qs = fn(self, request, **kwargs) | |
if isinstance(qs, QuerySet): | |
startindex = (page-1)*count | |
endindex = page*count | |
return qs[startindex:endindex] | |
else: | |
return qs | |
return wrap | |
return decorated | |
def argcheck(fn_arg, get_param, argtype=None, required=True): | |
def decorated(fn): | |
def wrap(self, request, **kwargs): | |
arg = kwargs.get(fn_arg, None) | |
param = request.GET.get(get_param, arg) | |
if required and not arg and not param: | |
return rc.BAD_REQUEST | |
if arg and param and arg != param: | |
return rc.BAD_REQUEST | |
if argtype and param: | |
try: | |
param = argtype(param) | |
except ValueError: | |
return rc.BAD_REQUEST | |
return fn(self, request, **kwargs) | |
return wrap | |
return decorated |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment