soter/soter/models/master.py

155 lines
4.6 KiB
Python

import uuid
from sqlalchemy import Column, PickleType, Unicode, ForeignKey, Boolean, Table, UniqueConstraint
from sqlalchemy.orm import relationship
from soter.models import Base, DBSession
from soter.models.guidtype import GUID
class DbSetting(Base):
__tablename__ = 'settings'
id = Column('id', GUID(), primary_key=True, default=uuid.uuid4)
name = Column('name', Unicode(255), unique=True, nullable=False)
data = Column('data', PickleType)
def __init__(self, id=None, name=None, data=None):
self.id = id
self.name = name
self.data = data
@classmethod
def by_id(cls, id):
if not isinstance(id, uuid.UUID):
id = uuid.UUID(id)
return DBSession.query(cls).filter(cls.id == id).first()
@classmethod
def by_name(cls, name):
return DBSession.query(cls).filter(cls.name == name).first()
@classmethod
def list(cls):
return DBSession.query(cls).order_by(cls.name).all()
picture_tag = Table(
'picture_tags', Base.metadata,
Column('id', GUID(), primary_key=True, default=uuid.uuid4),
Column('picture_id', GUID(), ForeignKey('pictures.id'), nullable=False),
Column('tag_id', GUID(), ForeignKey('tags.id'), nullable=False),
UniqueConstraint('picture_id', 'tag_id')
)
class Album(Base):
__tablename__ = 'albums'
id = Column('id', GUID(), primary_key=True, default=uuid.uuid4)
name = Column('name', Unicode(255), unique=True, nullable=False)
description = Column('description', Unicode(255))
user_id = Column('user_id', GUID(), ForeignKey('users.id'), nullable=False)
is_fixture = Column('is_fixture', Boolean, nullable=False)
is_public = Column('is_public', Boolean, nullable=False)
user = relationship('User', primaryjoin="User.id==Album.user_id", cascade=None)
pictures = relationship('Picture', backref='album')
def __init__(self, name, description, user_id, is_public, id=None, is_fixture=False):
self.name = name
self.description = description
self.user_id = user_id
self.is_public = is_public
self.id = id
self.is_fixture = is_fixture
@classmethod
def list(cls):
return DBSession.query(cls).order_by(cls.name)
@classmethod
def by_id(cls, id):
if not isinstance(id, uuid.UUID):
id = uuid.UUID(id)
return DBSession.query(cls).filter(cls.id == id).first()
@classmethod
def by_name(cls, name):
if not name:
return None
return DBSession.query(cls).filter(cls.name.ilike(name)).first()
@classmethod
def menu_item(cls):
return uuid.UUID('dad46805-f577-4e5b-8073-9b788e0173fc')
@classmethod
def semi(cls):
return uuid.UUID('e6bf81b9-1e9b-499f-81d5-ab5662e9d9b1')
class Picture(Base):
__tablename__ = 'pictures'
id = Column('id', GUID(), primary_key=True, default=uuid.uuid4)
name = Column('name', Unicode(255), unique=True)
url = Column('url', Unicode(255), unique=True)
user_id = Column('user_id', GUID(), ForeignKey('users.id'), nullable=False)
album_id = Column('album_id', GUID(), ForeignKey('albums.id'), nullable=False)
is_public = Column('is_public', Boolean, nullable=False)
tags = relationship("Tag", secondary=picture_tag)
user = relationship('User', primaryjoin="User.id==Picture.user_id", cascade=None)
def __init__(self, name, url, user_id, album_id, is_public, id=None, is_fixture=False):
self.name = name
self.url = url
self.user_id = user_id
self.album_id = album_id
self.is_public = is_public
self.id = id
self.is_fixture = is_fixture
@classmethod
def list(cls):
return DBSession.query(cls).order_by(cls.name)
@classmethod
def by_id(cls, id):
if not isinstance(id, uuid.UUID):
id = uuid.UUID(id)
return DBSession.query(cls).filter(cls.id == id).first()
@classmethod
def menu_item(cls):
return uuid.UUID('dad46805-f577-4e5b-8073-9b788e0173fc')
@classmethod
def semi(cls):
return uuid.UUID('e6bf81b9-1e9b-499f-81d5-ab5662e9d9b1')
class Tag(Base):
__tablename__ = 'tags'
id = Column('id', GUID(), primary_key=True, default=uuid.uuid4)
name = Column('name', Unicode(100), unique=True, nullable=False)
def __init__(self, name=None):
self.name = name
@classmethod
def by_id(cls, id):
return DBSession.query(cls).filter(cls.id == id).first()
@classmethod
def by_name(cls, name):
return DBSession.query(cls).filter(cls.name == name).first()
@classmethod
def list(cls):
return DBSession.query(cls).all()