Improve sqlalchemy filter rules

Thanks to Elrond's review. 1) Use filter_by more consistently
rather than mixing filter and filter_by. 2) Add multiple AND
conditions in the same filter rule rather than using separate
ones. 3) The atom feeds used filter_by(Modelname.attr == ...)
which was the wrong pattern, of course.

Thanks for repairing my junk Elrond!

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
This commit is contained in:
Sebastian Spaeth 2012-12-23 12:08:51 +01:00
parent cfa922295e
commit 2fb36dac31

View File

@ -54,8 +54,9 @@ def user_home(request, page):
'mediagoblin/user_pages/user.html', 'mediagoblin/user_pages/user.html',
{'user': user}) {'user': user})
cursor = MediaEntry.query.filter_by(uploader = user.id).\ cursor = MediaEntry.query.\
filter_by(state = u'processed').sort('created', DESCENDING) filter_by(uploader = user.id,
state = u'processed').sort('created', DESCENDING)
pagination = Pagination(page, cursor) pagination = Pagination(page, cursor)
media_entries = pagination() media_entries = pagination()
@ -179,9 +180,8 @@ def media_collect(request, media):
form = user_forms.MediaCollectForm(request.form) form = user_forms.MediaCollectForm(request.form)
# A user's own collections: # A user's own collections:
form.collection.query = Collection.query.filter( form.collection.query = Collection.query.filter_by(
request.db.Collection.creator == request.user.id)\ creator = request.user.id).order_by(Collection.title)
.order_by(Collection.title)
if request.method != 'POST' or not form.validate(): if request.method != 'POST' or not form.validate():
# No POST submission, or invalid form # No POST submission, or invalid form
@ -440,15 +440,17 @@ def atom_feed(request):
""" """
generates the atom feed with the newest images generates the atom feed with the newest images
""" """
user = User.query.filter(User.username==request.matchdict['user']).\ user = User.query.filter_by(
filter(User.status == u'active').first() username = request.matchdict['user'],
status = u'active').first()
if not user: if not user:
return render_404(request) return render_404(request)
cursor = MediaEntry.query.filter_by(MediaEntry.uploader == user.id).\ cursor = MediaEntry.query.filter_by(
filter_by(MediaEntry.state == u'processed').\ uploader = user.id,
sort('created', DESCENDING).\ state = u'processed').\
limit(ATOM_DEFAULT_NR_OF_UPDATED_ITEMS) sort('created', DESCENDING).\
limit(ATOM_DEFAULT_NR_OF_UPDATED_ITEMS)
""" """
ATOM feed id is a tag URI (see http://en.wikipedia.org/wiki/Tag_URI) ATOM feed id is a tag URI (see http://en.wikipedia.org/wiki/Tag_URI)
@ -501,8 +503,9 @@ def collection_atom_feed(request):
""" """
generates the atom feed with the newest images from a collection generates the atom feed with the newest images from a collection
""" """
user = User.query.filter(User.username == request.matchdict['user']).\ user = User.query.filter_by(
filter_by(User.status == u'active').first() username = request.matchdict['user'],
status = u'active').first()
if not user: if not user:
return render_404(request) return render_404(request)
@ -586,19 +589,19 @@ def processing_panel(request):
# Get media entries which are in-processing # Get media entries which are in-processing
processing_entries = MediaEntry.query.\ processing_entries = MediaEntry.query.\
filter(MediaEntry.uploader == user.id).\ filter_by(uploader = user.id,
filter(MediaEntry.state == u'processing').\ state = u'processing').\
order_by(MediaEntry.created.desc()) order_by(MediaEntry.created.desc())
# Get media entries which have failed to process # Get media entries which have failed to process
failed_entries = MediaEntry.query.\ failed_entries = MediaEntry.query.\
filter(MediaEntry.uploader == user.id).\ filter_by(uploader = user.id,
filter(MediaEntry.state == u'failed').\ state = u'failed').\
order_by(MediaEntry.created.desc()) order_by(MediaEntry.created.desc())
processed_entries = MediaEntry.query.\ processed_entries = MediaEntry.query.\
filter(MediaEntry.uploader == user.id).\ filter_by(uploader = user.id,
filter(MediaEntry.state == u'processed').\ state = u'processed').\
order_by(MediaEntry.created.desc()).\ order_by(MediaEntry.created.desc()).\
limit(10) limit(10)