Fix slug lookup regression (#587)
Removing the Mongo InvalidID legacy code removed an explicit check for "int" for the id lookup. This led the @get_user_media_entry decorator to fail if we looked up a nonexisting non-numerical slug (it tried to query the id with a string, which failed). Cast id to int and return 404 in case it is non-numeric which fixes the regression. It does not fix the underlying problem of slug_or_id lookups that were discussed. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
This commit is contained in:
parent
76e6c2b15e
commit
7f4e42b0b1
@ -17,7 +17,7 @@
|
|||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
|
||||||
from urlparse import urljoin
|
from urlparse import urljoin
|
||||||
from werkzeug.exceptions import Forbidden
|
from werkzeug.exceptions import Forbidden, NotFound
|
||||||
from werkzeug.urls import url_quote
|
from werkzeug.urls import url_quote
|
||||||
|
|
||||||
from mediagoblin.db.models import MediaEntry, User
|
from mediagoblin.db.models import MediaEntry, User
|
||||||
@ -120,25 +120,29 @@ def get_user_media_entry(controller):
|
|||||||
"""
|
"""
|
||||||
@wraps(controller)
|
@wraps(controller)
|
||||||
def wrapper(request, *args, **kwargs):
|
def wrapper(request, *args, **kwargs):
|
||||||
user = request.db.User.find_one(
|
user = User.query.filter_by(username=request.matchdict['user']).first()
|
||||||
{'username': request.matchdict['user']})
|
|
||||||
|
|
||||||
if not user:
|
if not user:
|
||||||
return render_404(request)
|
raise NotFound()
|
||||||
media = request.db.MediaEntry.find_one(
|
|
||||||
{'slug': request.matchdict['media'],
|
|
||||||
'state': u'processed',
|
|
||||||
'uploader': user.id})
|
|
||||||
|
|
||||||
# no media via slug? Grab it via object id
|
|
||||||
if not media:
|
|
||||||
media = MediaEntry.query.filter_by(
|
media = MediaEntry.query.filter_by(
|
||||||
id=request.matchdict['media'],
|
slug = request.matchdict['media'],
|
||||||
state = u'processed',
|
state = u'processed',
|
||||||
uploader = user.id).first()
|
uploader = user.id).first()
|
||||||
# Still no media? Okay, 404.
|
|
||||||
if not media:
|
if not media:
|
||||||
return render_404(request)
|
# no media via slug? Grab it via object id
|
||||||
|
try:
|
||||||
|
media = MediaEntry.query.filter_by(
|
||||||
|
id = int(request.matchdict['media']),
|
||||||
|
state = u'processed',
|
||||||
|
uploader = user.id).first()
|
||||||
|
except ValueError:
|
||||||
|
# media "id" was no int
|
||||||
|
raise NotFound()
|
||||||
|
|
||||||
|
if not media:
|
||||||
|
# no media by that id? Okay, 404.
|
||||||
|
raise NotFound()
|
||||||
|
|
||||||
return controller(request, media=media, *args, **kwargs)
|
return controller(request, media=media, *args, **kwargs)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user