diff options
Diffstat (limited to 'mediagoblin/decorators.py')
-rw-r--r-- | mediagoblin/decorators.py | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/mediagoblin/decorators.py b/mediagoblin/decorators.py index 85883c1a..14b4f8fc 100644 --- a/mediagoblin/decorators.py +++ b/mediagoblin/decorators.py @@ -125,24 +125,31 @@ def get_user_media_entry(controller): if not user: raise NotFound() - media = MediaEntry.query.filter_by( - slug=request.matchdict['media'], - state=u'processed', - uploader=user.id).first() - - if not media: - # 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() + media = None + + # might not be a slug, might be an id, but whatever + media_slug = request.matchdict['media'] + + if u":" in request.matchdict['media']: + # okay, it's not actually a slug, it's some kind of identifier, + # probably id: + if media_slug.startswith(u'id:'): + try: + media = MediaEntry.query.filter_by( + id=int(media_slug[3:]), + state=u'processed', + uploader=user.id).first() + except ValueError: + raise NotFound() + else: + # no magical id: stuff? It's a slug! + media = MediaEntry.query.filter_by( + slug=request.matchdict['media'], + state=u'processed', + uploader=user.id).first() if not media: - # no media by that id? Okay, 404. + # Didn't find anything? Okay, 404. raise NotFound() return controller(request, media=media, *args, **kwargs) |