aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/db/sql/util.py
diff options
context:
space:
mode:
authorElrond <elrond+mediagoblin.org@samba-tng.org>2012-01-24 23:03:33 +0100
committerElrond <elrond+mediagoblin.org@samba-tng.org>2012-03-05 21:30:39 +0100
commitc65cbf9514278fd624ff6f1ccbac93cca8e31764 (patch)
treeabd286ccdf8a94fcbdfd6f5ffdfe0e409c681184 /mediagoblin/db/sql/util.py
parent1213b8260ab4da97d465e7ef0e71fac2a2c20dbd (diff)
downloadmediagoblin-c65cbf9514278fd624ff6f1ccbac93cca8e31764.tar.lz
mediagoblin-c65cbf9514278fd624ff6f1ccbac93cca8e31764.tar.xz
mediagoblin-c65cbf9514278fd624ff6f1ccbac93cca8e31764.zip
SQL: Tool to cleanup unused tag slugs.
The current SQL layout/sqlalchemy strucuture can't detect whether a slug isn't needed any more and delete it. So provide a tool function to cleanup unused slugs. It's currently not hooked to any gmg function!
Diffstat (limited to 'mediagoblin/db/sql/util.py')
-rw-r--r--mediagoblin/db/sql/util.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/mediagoblin/db/sql/util.py b/mediagoblin/db/sql/util.py
index 13bc97e1..737e4e59 100644
--- a/mediagoblin/db/sql/util.py
+++ b/mediagoblin/db/sql/util.py
@@ -17,6 +17,7 @@
import sys
from mediagoblin.db.sql.base import Session
+from mediagoblin.db.sql.models import Tag, MediaTag
def _simple_printer(string):
@@ -282,3 +283,24 @@ def atomic_update(table, query_dict, update_values):
table.find(query_dict).update(update_values,
synchronize_session=False)
Session.commit()
+
+
+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()