+ return wrapper
+
+
+def get_user_collection(controller):
+ """
+ Pass in a Collection based off of a url component
+ """
+ @wraps(controller)
+ def wrapper(request, *args, **kwargs):
+ user = request.db.User.find_one(
+ {'username': request.matchdict['user']})
+
+ if not user:
+ return render_404(request)
+
+ collection = request.db.Collection.find_one(
+ {'slug': request.matchdict['collection'],
+ 'creator': user.id})
+
+ # Still no collection? Okay, 404.
+ if not collection:
+ return render_404(request)
+
+ return controller(request, collection=collection, *args, **kwargs)
+
+ return wrapper
+
+
+def get_user_collection_item(controller):
+ """
+ Pass in a CollectionItem based off of a url component
+ """
+ @wraps(controller)
+ def wrapper(request, *args, **kwargs):
+ user = request.db.User.find_one(
+ {'username': request.matchdict['user']})
+
+ if not user:
+ return render_404(request)
+
+ collection = request.db.Collection.find_one(
+ {'slug': request.matchdict['collection'],
+ 'creator': user.id})
+
+ collection_item = request.db.CollectionItem.find_one(
+ {'id': request.matchdict['collection_item'] })
+
+ # Still no collection item? Okay, 404.
+ if not collection_item:
+ return render_404(request)
+
+ return controller(request, collection_item=collection_item, *args, **kwargs)
+
+ return wrapper
+