soter/soter/models/master.py

155 lines
4.6 KiB
Python
Raw Normal View History

2015-06-09 11:34:58 +00:00
import uuid
2015-06-09 11:34:58 +00:00
from sqlalchemy import Column, PickleType, Unicode, ForeignKey, Boolean, Table, UniqueConstraint
2015-06-09 11:34:58 +00:00
from sqlalchemy.orm import relationship
2015-06-09 11:34:58 +00:00
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')
)
2015-06-09 11:34:58 +00:00
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))
2015-06-09 11:34:58 +00:00
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):
2015-06-09 11:34:58 +00:00
self.name = name
self.description = description
2015-06-09 11:34:58 +00:00
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):
2015-06-10 11:56:10 +00:00
if not isinstance(id, uuid.UUID):
id = uuid.UUID(id)
2015-06-09 11:34:58 +00:00
return DBSession.query(cls).filter(cls.id == id).first()
2015-06-14 11:52:58 +00:00
@classmethod
def by_name(cls, name):
if not name:
return None
return DBSession.query(cls).filter(cls.name.ilike(name)).first()
2015-06-09 11:34:58 +00:00
@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)
2015-06-09 11:34:58 +00:00
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)
2015-06-09 11:34:58 +00:00
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):
2015-06-09 11:34:58 +00:00
self.name = name
self.url = url
2015-06-09 11:34:58 +00:00
self.user_id = user_id
self.album_id = album_id
2015-06-09 11:34:58 +00:00
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):
2015-06-23 09:44:41 +00:00
if not isinstance(id, uuid.UUID):
id = uuid.UUID(id)
2015-06-09 11:34:58 +00:00
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()