aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/db/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'mediagoblin/db/models.py')
-rw-r--r--mediagoblin/db/models.py16
1 files changed, 16 insertions, 0 deletions
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__,