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 webob import exc
|
||||||
|
|
||||||
|
from mediagoblin.db.util import ObjectId
|
||||||
|
|
||||||
|
|
||||||
def _make_safe(decorator, original):
|
def _make_safe(decorator, original):
|
||||||
"""
|
"""
|
||||||
@ -61,3 +63,27 @@ def uses_pagination(controller):
|
|||||||
return controller(request, page=page, *args, **kwargs)
|
return controller(request, page=page, *args, **kwargs)
|
||||||
|
|
||||||
return _make_safe(wrapper, controller)
|
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 = [
|
user_routes = [
|
||||||
Route('mediagoblin.user_pages.user_home', "/{user}/",
|
Route('mediagoblin.user_pages.user_home', "/{user}/",
|
||||||
controller="mediagoblin.user_pages.views:user_home"),
|
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}"),
|
requirements=dict(m_id="[0-9a-fA-F]{24}"),
|
||||||
controller="mediagoblin.user_pages.views:media_home")]
|
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.db.util import ObjectId, DESCENDING
|
||||||
from mediagoblin.util import Pagination
|
from mediagoblin.util import Pagination
|
||||||
|
|
||||||
from mediagoblin.decorators import uses_pagination
|
from mediagoblin.decorators import uses_pagination, get_media_entry
|
||||||
|
|
||||||
|
|
||||||
@uses_pagination
|
@uses_pagination
|
||||||
@ -52,15 +52,11 @@ def user_home(request, page):
|
|||||||
'pagination': pagination}))
|
'pagination': pagination}))
|
||||||
|
|
||||||
|
|
||||||
def media_home(request):
|
@get_media_entry
|
||||||
|
def media_home(request, media):
|
||||||
"""'Homepage' of a MediaEntry()"""
|
"""'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.
|
# Check that media uploader and user correspond.
|
||||||
if not media or \
|
if media['uploader'].get('username') != request.matchdict['user']:
|
||||||
media['uploader'].get('username') != request.matchdict['user']:
|
|
||||||
return exc.HTTPNotFound()
|
return exc.HTTPNotFound()
|
||||||
|
|
||||||
template = request.template_env.get_template(
|
template = request.template_env.get_template(
|
||||||
@ -69,4 +65,3 @@ def media_home(request):
|
|||||||
template.render(
|
template.render(
|
||||||
{'request': request,
|
{'request': request,
|
||||||
'media': media}))
|
'media': media}))
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user