Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import hashlib
- import datetime
- import sqlalchemy as sa
- from sqlalchemy import Column, Table, ForeignKey, types, UniqueConstraint
- from sqlalchemy.orm import relation, backref
- from imagery.model.meta import Session, DeclarativeBase, metadata
- from imagery.model import Album
- """ * * * * * * * * * * * * * """
- """ * * Association Tables * """
- class AlbumOwner(DeclarativeBase):
- __tablename__ = 'albumOwner'
- album_id = Column(types.Integer, ForeignKey('album.id'), nullable=False, primary_key=True, unique=True)
- user_id = Column(types.Integer, ForeignKey('user.id'), nullable=False)
- class PhotoOwner(DeclarativeBase):
- __tablename__ = 'photoOwner'
- photo_id = Column(types.Integer, ForeignKey('photo.id'), nullable=False, primary_key=True, unique=True)
- user_id = Column(types.Integer, ForeignKey('user.id'), nullable=False)
- class GroupPermission(DeclarativeBase):
- __tablename__ = 'groupPermission'
- group_id = Column(types.Integer, ForeignKey('group.id'), nullable=False, primary_key=True)
- permission_id = Column(types.Integer, ForeignKey('permission.id'), nullable=False, primary_key=True)
- class UserGroup(DeclarativeBase):
- __tablename__ = 'userGroup'
- group_id = Column(types.Integer, ForeignKey('group.id'), nullable=False, primary_key=True)
- user_id = Column(types.Integer, ForeignKey('user.id'), nullable=False, primary_key=True)
- """ * * * * * * * * * * * * * """
- """ * * * * * User * * * * * """
- class User(DeclarativeBase):
- __tablename__ = 'user'
- id = Column(types.Integer, primary_key=True)
- username = Column(types.String(16), nullable=False, unique=True)
- _password = Column('password', types.String(255), nullable=False)
- name = Column(types.String(255))
- email = Column(types.String(128))
- create_date = Column(types.DateTime, nullable=True)
- ownedAlbums = relation('Album', secondary=AlbumOwner.__table__, backref=backref('owner', uselist=False), single_parent=True)
- ownedPhotos = relation('Photo', secondary=PhotoOwner.__table__, backref=backref('owner', uselist=False), single_parent=True)
- def __init__(self, username, passwd, name = None, email = None):
- self.username = username
- self.password = passwd
- self.name = name
- self.email = email
- self.create_date = datetime.datetime.now()
- def validate_password(self, password):
- p = hashlib.md5(password).hexdigest()
- return (self.password == p)
- def __get_password__(self):
- return self._password
- def __set_password__(self, password):
- p = hashlib.md5(password).hexdigest()
- self._password = p
- password = property(__get_password__, __set_password__)
- """ * * * * * * * * * * * * * """
- """ * * * * Permission * * * """
- class Permission(DeclarativeBase):
- __tablename__ = 'permission'
- id = Column(types.Integer, primary_key=True)
- name = Column(types.String(16), nullable=False)
- title = Column(types.String(64))
- context = Column(types.String(64), nullable=False)
- __mapper_args__ = {'polymorphic_on' : context}
- groups = relation('Group', secondary=GroupPermission.__table__)
- def __init__(self, name, context, title=None, initial_groups=[]):
- self.name = name
- self.title = title
- self.context = context
- self.groups = initial_groups
- class GlobalPermission(Permission):
- __mapper_args__ = {'polymorphic_identity' : 'global'}
- def __init__(self, name, title=None, initial_groups=[]):
- self.name = name
- self.title = title
- self.groups = initial_groups
- class AlbumPermission(Permission):
- __mapper_args__ = {'polymorphic_identity' : 'album'}
- def __init__(self, name, title=None, initial_groups=[]):
- self.name = name
- self.title = title
- self.groups = initial_groups
- """ * * * * * * * * * * * * * """
- """ * * * * * Group * * * * """
- class Group(DeclarativeBase):
- __tablename__ = 'group'
- id = Column(types.Integer, primary_key=True)
- name = Column(types.String(16), nullable=False, unique=True)
- create_date = Column(types.DateTime, nullable=True)
- users = relation('User', secondary=UserGroup.__table__, backref=backref('groups'))
- permissions = relation('Permission', secondary=GroupPermission.__table__)
- def __init__(self, name, initial_members=[]):
- self.name = name
- self.create_date = datetime.datetime.now()
- self.users = initial_members
Add Comment
Please, Sign In to add comment