Change `uploader` to `actor`
[mediagoblin.git] / mediagoblin / db / util.py
index 6ffec44da18e58665119c4fb4ba05ab87fbda666..57e6b9427303b1212f1b224bdad8db7d451def0d 100644 (file)
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-from mediagoblin.db.base import Session
+import sys
+
+from mediagoblin import mg_globals as mgg
 from mediagoblin.db.models import MediaEntry, Tag, MediaTag, Collection
+from mediagoblin.gmg_commands.dbupdate import gather_database_data
+
+from mediagoblin.tools.transition import DISABLE_GLOBALS
 
+if not DISABLE_GLOBALS:
+    from mediagoblin.db.base import Session
 
 ##########################
 # Random utility functions
@@ -24,13 +31,13 @@ from mediagoblin.db.models import MediaEntry, Tag, MediaTag, Collection
 
 
 def atomic_update(table, query_dict, update_values):
-    table.find(query_dict).update(update_values,
+    table.query.filter_by(**query_dict).update(update_values,
        synchronize_session=False)
     Session.commit()
 
 
 def check_media_slug_used(uploader_id, slug, ignore_m_id):
-    query = MediaEntry.query.filter_by(uploader=uploader_id, slug=slug)
+    query = MediaEntry.query.filter_by(actor=uploader_id, slug=slug)
     if ignore_m_id is not None:
         query = query.filter(MediaEntry.id != ignore_m_id)
     does_exist = query.first() is not None
@@ -60,7 +67,7 @@ def clean_orphan_tags(commit=True):
 
 
 def check_collection_slug_used(creator_id, slug, ignore_c_id):
-    filt = (Collection.creator == creator_id) \
+    filt = (Collection.actor == creator_id) \
         & (Collection.slug == slug)
     if ignore_c_id is not None:
         filt = filt & (Collection.id != ignore_c_id)
@@ -68,6 +75,23 @@ def check_collection_slug_used(creator_id, slug, ignore_c_id):
     return does_exist
 
 
+def check_db_up_to_date():
+    """Check if the database is up to date and quit if not"""
+    dbdatas = gather_database_data(mgg.global_config.get('plugins', {}).keys())
+
+    for dbdata in dbdatas:
+        session = Session()
+        try:
+            migration_manager = dbdata.make_migration_manager(session)
+            if migration_manager.database_current_migration is None or \
+                    migration_manager.migrations_to_run():
+                sys.exit("Your database is not up to date. Please run "
+                         "'gmg dbupdate' before starting MediaGoblin.")
+        finally:
+            Session.rollback()
+            Session.remove()
+
+
 if __name__ == '__main__':
     from mediagoblin.db.open import setup_connection_and_db_from_config