Guest User

Untitled

a guest
Jul 13th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.49 KB | None | 0 0
  1. import hashlib
  2. import datetime
  3.  
  4. import sqlalchemy as sa
  5. from sqlalchemy import Column, Table, ForeignKey, types, UniqueConstraint
  6. from sqlalchemy.orm import relation, backref
  7.  
  8. from imagery.model.meta import Session, DeclarativeBase, metadata
  9. from imagery.model import Album
  10.  
  11.  
  12. """ * * * * * * * * * * * * * """
  13. """ * * Association Tables * """
  14.  
  15. class AlbumOwner(DeclarativeBase):
  16. __tablename__ = 'albumOwner'
  17.  
  18. album_id = Column(types.Integer, ForeignKey('album.id'), nullable=False, primary_key=True, unique=True)
  19. user_id = Column(types.Integer, ForeignKey('user.id'), nullable=False)
  20.  
  21. class PhotoOwner(DeclarativeBase):
  22. __tablename__ = 'photoOwner'
  23.  
  24. photo_id = Column(types.Integer, ForeignKey('photo.id'), nullable=False, primary_key=True, unique=True)
  25. user_id = Column(types.Integer, ForeignKey('user.id'), nullable=False)
  26.  
  27.  
  28. class GroupPermission(DeclarativeBase):
  29. __tablename__ = 'groupPermission'
  30.  
  31. group_id = Column(types.Integer, ForeignKey('group.id'), nullable=False, primary_key=True)
  32. permission_id = Column(types.Integer, ForeignKey('permission.id'), nullable=False, primary_key=True)
  33.  
  34. class UserGroup(DeclarativeBase):
  35. __tablename__ = 'userGroup'
  36.  
  37. group_id = Column(types.Integer, ForeignKey('group.id'), nullable=False, primary_key=True)
  38. user_id = Column(types.Integer, ForeignKey('user.id'), nullable=False, primary_key=True)
  39.  
  40.  
  41. """ * * * * * * * * * * * * * """
  42. """ * * * * * User * * * * * """
  43.  
  44. class User(DeclarativeBase):
  45. __tablename__ = 'user'
  46.  
  47. id = Column(types.Integer, primary_key=True)
  48. username = Column(types.String(16), nullable=False, unique=True)
  49. _password = Column('password', types.String(255), nullable=False)
  50. name = Column(types.String(255))
  51. email = Column(types.String(128))
  52. create_date = Column(types.DateTime, nullable=True)
  53.  
  54. ownedAlbums = relation('Album', secondary=AlbumOwner.__table__, backref=backref('owner', uselist=False), single_parent=True)
  55. ownedPhotos = relation('Photo', secondary=PhotoOwner.__table__, backref=backref('owner', uselist=False), single_parent=True)
  56.  
  57. def __init__(self, username, passwd, name = None, email = None):
  58. self.username = username
  59. self.password = passwd
  60. self.name = name
  61. self.email = email
  62. self.create_date = datetime.datetime.now()
  63.  
  64. def validate_password(self, password):
  65. p = hashlib.md5(password).hexdigest()
  66. return (self.password == p)
  67.  
  68. def __get_password__(self):
  69. return self._password
  70.  
  71. def __set_password__(self, password):
  72. p = hashlib.md5(password).hexdigest()
  73. self._password = p
  74.  
  75. password = property(__get_password__, __set_password__)
  76.  
  77.  
  78. """ * * * * * * * * * * * * * """
  79. """ * * * * Permission * * * """
  80.  
  81. class Permission(DeclarativeBase):
  82. __tablename__ = 'permission'
  83.  
  84. id = Column(types.Integer, primary_key=True)
  85. name = Column(types.String(16), nullable=False)
  86. title = Column(types.String(64))
  87. context = Column(types.String(64), nullable=False)
  88. __mapper_args__ = {'polymorphic_on' : context}
  89.  
  90. groups = relation('Group', secondary=GroupPermission.__table__)
  91.  
  92. def __init__(self, name, context, title=None, initial_groups=[]):
  93. self.name = name
  94. self.title = title
  95. self.context = context
  96. self.groups = initial_groups
  97.  
  98.  
  99. class GlobalPermission(Permission):
  100. __mapper_args__ = {'polymorphic_identity' : 'global'}
  101.  
  102. def __init__(self, name, title=None, initial_groups=[]):
  103. self.name = name
  104. self.title = title
  105. self.groups = initial_groups
  106.  
  107. class AlbumPermission(Permission):
  108. __mapper_args__ = {'polymorphic_identity' : 'album'}
  109.  
  110. def __init__(self, name, title=None, initial_groups=[]):
  111. self.name = name
  112. self.title = title
  113. self.groups = initial_groups
  114.  
  115.  
  116.  
  117. """ * * * * * * * * * * * * * """
  118. """ * * * * * Group * * * * """
  119.  
  120. class Group(DeclarativeBase):
  121. __tablename__ = 'group'
  122.  
  123. id = Column(types.Integer, primary_key=True)
  124. name = Column(types.String(16), nullable=False, unique=True)
  125. create_date = Column(types.DateTime, nullable=True)
  126.  
  127. users = relation('User', secondary=UserGroup.__table__, backref=backref('groups'))
  128. permissions = relation('Permission', secondary=GroupPermission.__table__)
  129.  
  130. def __init__(self, name, initial_members=[]):
  131. self.name = name
  132. self.create_date = datetime.datetime.now()
  133. self.users = initial_members
Add Comment
Please, Sign In to add comment