Merge branch 'master' of gitorious.org:mediagoblin/mediagoblin
This commit is contained in:
commit
3d541b04a9
@ -301,3 +301,12 @@ def atomic_update(table, query_dict, update_values):
|
||||
table.collection.update(
|
||||
query_dict,
|
||||
{"$set": update_values})
|
||||
|
||||
|
||||
def check_media_slug_used(db, uploader_id, slug, ignore_m_id):
|
||||
query_dict = {'uploader': uploader_id, 'slug': slug}
|
||||
if ignore_m_id is not None:
|
||||
query_dict['_id'] = {'$ne': ignore_m_id}
|
||||
existing_user_slug_entries = db.MediaEntry.find(
|
||||
query_dict).count()
|
||||
return existing_user_slug_entries
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
import sys
|
||||
from mediagoblin.db.sql.base import Session
|
||||
from mediagoblin.db.sql.models import MediaEntry, Tag, MediaTag
|
||||
|
||||
|
||||
def _simple_printer(string):
|
||||
@ -282,3 +283,33 @@ def atomic_update(table, query_dict, update_values):
|
||||
table.find(query_dict).update(update_values,
|
||||
synchronize_session=False)
|
||||
Session.commit()
|
||||
|
||||
|
||||
def check_media_slug_used(dummy_db, uploader_id, slug, ignore_m_id):
|
||||
filt = (MediaEntry.uploader == uploader_id) \
|
||||
& (MediaEntry.slug == slug)
|
||||
if ignore_m_id is not None:
|
||||
filt = filt & (MediaEntry.id != ignore_m_id)
|
||||
does_exist = Session.query(MediaEntry.id).filter(filt).first() is not None
|
||||
return does_exist
|
||||
|
||||
|
||||
def clean_orphan_tags():
|
||||
q1 = Session.query(Tag).outerjoin(MediaTag).filter(MediaTag.id==None)
|
||||
for t in q1:
|
||||
Session.delete(t)
|
||||
|
||||
# The "let the db do all the work" version:
|
||||
# q1 = Session.query(Tag.id).outerjoin(MediaTag).filter(MediaTag.id==None)
|
||||
# q2 = Session.query(Tag).filter(Tag.id.in_(q1))
|
||||
# q2.delete(synchronize_session = False)
|
||||
|
||||
Session.commit()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from mediagoblin.db.sql.open import setup_connection_and_db_from_config
|
||||
|
||||
conn,db = setup_connection_and_db_from_config({'sql_engine':'sqlite:///mediagoblin.db'})
|
||||
|
||||
clean_orphan_tags()
|
||||
|
@ -21,7 +21,7 @@ except ImportError:
|
||||
|
||||
if use_sql:
|
||||
from mediagoblin.db.sql.fake import ObjectId, InvalidId, DESCENDING
|
||||
from mediagoblin.db.sql.util import atomic_update
|
||||
from mediagoblin.db.sql.util import atomic_update, check_media_slug_used
|
||||
else:
|
||||
from mediagoblin.db.mongo.util import \
|
||||
ObjectId, InvalidId, DESCENDING, atomic_update
|
||||
ObjectId, InvalidId, DESCENDING, atomic_update, check_media_slug_used
|
||||
|
@ -36,6 +36,7 @@ from mediagoblin.tools.text import (
|
||||
clean_html, convert_to_tag_list_of_dicts,
|
||||
media_tags_as_string)
|
||||
from mediagoblin.tools.licenses import SUPPORTED_LICENSES
|
||||
from mediagoblin.db.util import check_media_slug_used
|
||||
|
||||
|
||||
@get_user_media_entry
|
||||
@ -58,12 +59,10 @@ def edit_media(request, media):
|
||||
if request.method == 'POST' and form.validate():
|
||||
# Make sure there isn't already a MediaEntry with such a slug
|
||||
# and userid.
|
||||
existing_user_slug_entries = request.db.MediaEntry.find(
|
||||
{'slug': request.POST['slug'],
|
||||
'uploader': media.uploader,
|
||||
'_id': {'$ne': media._id}}).count()
|
||||
slug_used = check_media_slug_used(request.db, media.uploader,
|
||||
request.POST['slug'], media.id)
|
||||
|
||||
if existing_user_slug_entries:
|
||||
if slug_used:
|
||||
form.slug.errors.append(
|
||||
_(u'An entry with that slug already exists for this user.'))
|
||||
else:
|
||||
|
Loading…
x
Reference in New Issue
Block a user