Merge remote-tracking branch 'refs/remotes/rodney757/reprocessing'
[mediagoblin.git] / mediagoblin / db / migrations.py
index 015dbff01b2bb215a4dbfaa49c98e03e7bd01da8..a88518f45c8b38d918c2d6f5df75cc5cd32e5e32 100644 (file)
@@ -25,6 +25,8 @@ from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy.sql import and_
 from migrate.changeset.constraint import UniqueConstraint
 
+
+from mediagoblin.db.extratypes import JSONEncoded
 from mediagoblin.db.migration_tools import RegisterMigration, inspect_table
 from mediagoblin.db.models import MediaEntry, Collection, User, MediaComment
 
@@ -363,6 +365,8 @@ def add_new_notification_tables(db):
     CommentNotification_v0.__table__.create(db.bind)
     ProcessingNotification_v0.__table__.create(db.bind)
 
+    db.commit()
+
 
 @RegisterMigration(13, MIGRATIONS)
 def pw_hash_nullable(db):
@@ -382,7 +386,7 @@ def pw_hash_nullable(db):
 
 
 # oauth1 migrations
-class Client_v0(Base):
+class Client_v0(declarative_base()):
     """
         Model representing a client - Used for API Auth
     """
@@ -407,7 +411,7 @@ class Client_v0(Base):
         else:
             return "<Client {0}>".format(self.id)
 
-class RequestToken_v0(Base):
+class RequestToken_v0(declarative_base()):
     """
         Model for representing the request tokens
     """
@@ -415,7 +419,7 @@ class RequestToken_v0(Base):
 
     token = Column(Unicode, primary_key=True)
     secret = Column(Unicode, nullable=False)
-    client = Column(Unicode, ForeignKey(Client.id))
+    client = Column(Unicode, ForeignKey(Client_v0.id))
     user = Column(Integer, ForeignKey(User.id), nullable=True)
     used = Column(Boolean, default=False)
     authenticated = Column(Boolean, default=False)
@@ -423,8 +427,8 @@ class RequestToken_v0(Base):
     callback = Column(Unicode, nullable=False, default=u"oob")
     created = Column(DateTime, nullable=False, default=datetime.datetime.now)
     updated = Column(DateTime, nullable=False, default=datetime.datetime.now)
-    
-class AccessToken_v0(Base):
+
+class AccessToken_v0(declarative_base()):
     """
         Model for representing the access tokens
     """
@@ -433,12 +437,12 @@ class AccessToken_v0(Base):
     token = Column(Unicode, nullable=False, primary_key=True)
     secret = Column(Unicode, nullable=False)
     user = Column(Integer, ForeignKey(User.id))
-    request_token = Column(Unicode, ForeignKey(RequestToken.token))
+    request_token = Column(Unicode, ForeignKey(RequestToken_v0.token))
     created = Column(DateTime, nullable=False, default=datetime.datetime.now)
     updated = Column(DateTime, nullable=False, default=datetime.datetime.now)
 
-class NonceTimestamp_v0(Base):
+
+class NonceTimestamp_v0(declarative_base()):
     """
         A place the timestamp and nonce can be stored - this is for OAuth1
     """
@@ -458,3 +462,47 @@ def create_oauth1_tables(db):
     NonceTimestamp_v0.__table__.create(db.bind)
 
     db.commit()
+
+
+@RegisterMigration(15, MIGRATIONS)
+def wants_notifications(db):
+    """Add a wants_notifications field to User model"""
+    metadata = MetaData(bind=db.bind)
+    user_table = inspect_table(metadata, "core__users")
+
+    col = Column('wants_notifications', Boolean, default=True)
+    col.create(user_table)
+
+    db.commit()
+
+
+@RegisterMigration(16, MIGRATIONS)
+def upload_limits(db):
+    """Add user upload limit columns"""
+    metadata = MetaData(bind=db.bind)
+
+    user_table = inspect_table(metadata, 'core__users')
+    media_entry_table = inspect_table(metadata, 'core__media_entries')
+
+    col = Column('uploaded', Integer, default=0)
+    col.create(user_table)
+
+    col = Column('upload_limit', Integer)
+    col.create(user_table)
+
+    col = Column('file_size', Integer, default=0)
+    col.create(media_entry_table)
+
+    db.commit()
+
+
+@RegisterMigration(17, MIGRATIONS)
+def add_file_metadata(db):
+    """Add file_metadata to MediaFile"""
+    metadata = MetaData(bind=db.bind)
+    media_file_table = inspect_table(metadata, "core__mediafiles")
+
+    col = Column('file_metadata', JSONEncoded)
+    col.create(media_file_table)
+
+    db.commit()