MediaEntry slugs usable in URLs, & decorator that grabs media from the request
This commit is contained in:
parent
3c2567ac76
commit
724933b154
@ -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)
|
||||
|
@ -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")]
|
||||
|
@ -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}))
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user