aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mediagoblin/decorators.py19
-rw-r--r--mediagoblin/user_pages/views.py11
-rw-r--r--mediagoblin/util.py6
3 files changed, 28 insertions, 8 deletions
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