1
0
mirror of https://github.com/spl0k/supysonic.git synced 2024-09-19 19:01:03 +00:00
supysonic/db.py

65 lines
1.6 KiB
Python
Raw Normal View History

2012-10-13 09:29:48 +00:00
# coding: utf-8
import config
from sqlalchemy import create_engine, Column, Integer, String, Boolean
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import types
from sqlalchemy import BINARY
from sqlalchemy.schema import Column
import uuid
class UUID(types.TypeDecorator):
impl = BINARY
def __init__(self):
self.impl.length = 16
types.TypeDecorator.__init__(self, length = self.impl.length)
def process_bind_param(self, value, dialect = None):
if value and isinstance(value, uuid.UUID):
return value.bytes
if value and not isinstance(value, uuid.UUID):
raise ValueError, 'value %s is not a valid uuid.UUID' % value
return None
def process_result_value(self, value, dialect = None):
if value:
return uuid.UUID(bytes = value)
return None
def is_mutable(self):
return False
@staticmethod
def gen_id_column():
return Column(UUID, primary_key = True, default = uuid.uuid4)
engine = create_engine(config.get('DATABASE_URI'), convert_unicode = True)
db_session = scoped_session(sessionmaker(autocommit = False, autoflush = False, bind = engine))
Base = declarative_base()
Base.query = db_session.query_property()
class User(Base):
__tablename__ = 'users'
id = UUID.gen_id_column()
name = Column(String, unique = True)
mail = Column(String)
password = Column(String(40))
salt = Column(String(6))
admin = Column(Boolean)
class MusicFolder(Base):
__tablename__ = 'folders'
id = UUID.gen_id_column()
name = Column(String, unique = True)
path = Column(String)
def init_db():
Base.metadata.drop_all(bind = engine)
Base.metadata.create_all(bind = engine)