From: Bernhard Keller Date: Thu, 19 May 2011 20:52:18 +0000 (+0200) Subject: moved check for correct page values into decorator for view function X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=3eb6fc4f2f2b0a41677ab88bdd941b79e3e87b39;p=mediagoblin.git moved check for correct page values into decorator for view function --- diff --git a/mediagoblin/decorators.py b/mediagoblin/decorators.py index 1774ce4e..161d99ff 100644 --- a/mediagoblin/decorators.py +++ b/mediagoblin/decorators.py @@ -44,3 +44,22 @@ def require_active_login(controller): return controller(request, *args, **kwargs) return _make_safe(new_controller_func, controller) + + +def uses_pagination(controller): + """ + Check request GET 'page' key for wrong values + """ + def wrapper(request, *args, **kwargs): + try: + page = int(request.str_GET['page']) + if page < 0: + return exc.HTTPNotFound() + except ValueError: + return exc.HTTPNotFound() + except KeyError: + request.str_GET['page'] = 1 + + return controller(request, *args, **kwargs) + + return _make_safe(wrapper,controller) diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 76f96cf9..cb2c5875 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -21,6 +21,9 @@ import wtforms from mediagoblin.util import Pagination from pymongo import ASCENDING, DESCENDING +from mediagoblin.decorators import uses_pagination + +@uses_pagination def user_home(request): """'Homepage' of a User()""" user = request.db.User.find_one({ @@ -32,13 +35,9 @@ def user_home(request): cursor = request.db.MediaEntry \ .find({'uploader': user, 'state': 'processed'}) \ .sort('created', DESCENDING) + - try: - page = int(request.str_GET['page']) - except KeyError: - page = 1 - - pagination = Pagination(cursor, page) + pagination = Pagination( int(request.str_GET['page']), cursor) media_entries = pagination() #if no data is available, return NotFound diff --git a/mediagoblin/util.py b/mediagoblin/util.py index 9247ac19..5f5c59fb 100644 --- a/mediagoblin/util.py +++ b/mediagoblin/util.py @@ -29,6 +29,8 @@ from mediagoblin import globals as mgoblin_globals import urllib from math import ceil import copy +import decorators +from webob import exc TESTS_ENABLED = False def _activate_testing(): @@ -298,11 +300,11 @@ def setup_gettext(locale): class Pagination(object): """ Pagination class, - initialization through __init__(self, page=1, per_page=2, cursor) + initialization through __init__(self, cursor, page=1, per_page=2): get actual data slice through __call__() """ - def __init__(self, cursor, page=1, per_page=2): + def __init__(self, page, cursor, per_page=2): """ initializes Pagination -- page, requested page