diff options
-rw-r--r-- | mediagoblin/db/migrations.py | 12 | ||||
-rw-r--r-- | mediagoblin/db/models.py | 16 |
2 files changed, 25 insertions, 3 deletions
diff --git a/mediagoblin/db/migrations.py b/mediagoblin/db/migrations.py index 02dc996c..6b25aebf 100644 --- a/mediagoblin/db/migrations.py +++ b/mediagoblin/db/migrations.py @@ -1460,15 +1460,15 @@ def federation_user_create_tables(db): """ Create all the tables """ + metadata = MetaData(bind=db.bind) + user_table = inspect_table(metadata, "core__users") + # Create tables needed LocalUser_V0.__table__.create(db.bind) RemoteUser_V0.__table__.create(db.bind) db.commit() # Create the fields - metadata = MetaData(bind=db.bind) - user_table = inspect_table(metadata, "core__users") - updated_column = Column( "updated", DateTime, @@ -1476,6 +1476,12 @@ def federation_user_create_tables(db): ) updated_column.create(user_table) + type_column = Column( + "type", + Unicode + ) + type_column.create(user_table) + name_column = Column( "name", Unicode diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py index ef37aef8..41c36764 100644 --- a/mediagoblin/db/models.py +++ b/mediagoblin/db/models.py @@ -237,6 +237,9 @@ class User(Base, UserMixin): bio = Column(UnicodeText) name = Column(Unicode) + # This is required for the polymorphic inheritance + type = Column(Unicode) + created = Column(DateTime, nullable=False, default=datetime.datetime.utcnow) updated = Column(DateTime, nullable=False, default=datetime.datetime.utcnow) @@ -245,6 +248,11 @@ class User(Base, UserMixin): # Lazy getters get_location = relationship("Location", lazy="joined") + __mapper_args__ = { + 'polymorphic_identity': 'user', + 'polymorphic_on': type + } + def has_privilege(self, privilege, allow_admin=True): """ This method checks to make sure a user has all the correct privileges @@ -324,6 +332,10 @@ class LocalUser(User): uploaded = Column(Integer, default=0) upload_limit = Column(Integer) + __mapper_args__ = { + 'polymorphic_identity': 'user_local' + } + ## TODO # plugin data would be in a separate model @@ -394,6 +406,10 @@ class RemoteUser(User): id = Column(Integer, ForeignKey("core__users.id"), primary_key=True) webfinger = Column(Unicode, unique=True) + __mapper_args__ = { + 'polymorphic_identity': 'user_remote' + } + def __repr__(self): return "<{0} #{1} {2}>".format( self.__class__.__name__, |