diff options
-rw-r--r-- | mediagoblin/decorators.py | 26 | ||||
-rw-r--r-- | mediagoblin/user_pages/routing.py | 2 | ||||
-rw-r--r-- | mediagoblin/user_pages/views.py | 13 |
3 files changed, 31 insertions, 10 deletions
diff --git a/mediagoblin/decorators.py b/mediagoblin/decorators.py index 156a745f..07140831 100644 --- a/mediagoblin/decorators.py +++ b/mediagoblin/decorators.py @@ -17,6 +17,8 @@ from webob import exc +from mediagoblin.db.util import ObjectId + def _make_safe(decorator, original): """ @@ -61,3 +63,27 @@ def uses_pagination(controller): return controller(request, page=page, *args, **kwargs) return _make_safe(wrapper, controller) + + +def get_media_entry(controller): + """ + Pass in a MediaEntry based off of a url component + """ + def wrapper(request, *args, **kwargs): + media = request.db.MediaEntry.find_one( + {'slug': request.matchdict['media'], + 'state': 'processed'}) + + # no media via slug? Grab it via ObjectId + if not media: + media = request.db.MediaEntry.find_one( + {'_id': ObjectId(request.matchdict['media']), + 'state': 'processed'}) + + # Still no media? Okay, 404. + if not media: + return exc.HTTPNotFound() + + return controller(request, media=media, *args, **kwargs) + + return _make_safe(wrapper, controller) diff --git a/mediagoblin/user_pages/routing.py b/mediagoblin/user_pages/routing.py index 304f805f..8b535d13 100644 --- a/mediagoblin/user_pages/routing.py +++ b/mediagoblin/user_pages/routing.py @@ -19,6 +19,6 @@ from routes.route import Route user_routes = [ Route('mediagoblin.user_pages.user_home', "/{user}/", controller="mediagoblin.user_pages.views:user_home"), - Route('mediagoblin.user_pages.media_home', '/{user}/m/{m_id}/', + Route('mediagoblin.user_pages.media_home', '/{user}/m/{media}/', requirements=dict(m_id="[0-9a-fA-F]{24}"), controller="mediagoblin.user_pages.views:media_home")] diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 03f9907d..87fd2ce9 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -18,7 +18,7 @@ from webob import Response, exc from mediagoblin.db.util import ObjectId, DESCENDING from mediagoblin.util import Pagination -from mediagoblin.decorators import uses_pagination +from mediagoblin.decorators import uses_pagination, get_media_entry @uses_pagination @@ -52,15 +52,11 @@ def user_home(request, page): 'pagination': pagination})) -def media_home(request): +@get_media_entry +def media_home(request, media): """'Homepage' of a MediaEntry()""" - media = request.db.MediaEntry.find_one({ - '_id': ObjectId(request.matchdict['m_id']), - 'state': 'processed'}) - # Check that media uploader and user correspond. - if not media or \ - media['uploader'].get('username') != request.matchdict['user']: + if media['uploader'].get('username') != request.matchdict['user']: return exc.HTTPNotFound() template = request.template_env.get_template( @@ -69,4 +65,3 @@ def media_home(request): template.render( {'request': request, 'media': media})) - |