from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import scoped_session, sessionmaker from zope.sqlalchemy import ZopeTransactionExtension DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension(), expire_on_commit=False)) Base = declarative_base() def initialize_sql(engine): DBSession.configure(bind=engine) Base.metadata.bind = engine if not schema_exists(engine): fixtures(engine) def schema_exists(engine): from soter.models.master import DbSetting with engine.connect() as connection: return engine.dialect.has_table(connection, DbSetting.__tablename__) def fixtures(engine): import transaction import uuid from soter.models.master import Album, DbSetting, Picture, Tag, picture_tag from soter.models.auth import Permission, Role, User, role_permission, role_user Base.metadata.create_all(engine) user = User('Admin', 'Administrator', 'soter@tanshu.com', '123456', False, uuid.UUID('8de98592-76d9-c74d-bb3f-d6184d388b5a')) DBSession.add(user) no_album = Album('Unclassified', 'Uncategorized images', user, True, uuid.UUID('1b209cd4-e04e-48ac-a1b0-ec5fdc85b492'), True) DBSession.add(no_album) roles = [Role('Owner', uuid.UUID('52e08c0c-048a-784f-be10-6e129ad4b5d4'))] for role in roles: DBSession.add(role) user.roles.append(role) permissions = [Permission('Albums', uuid.UUID('af4c4258-eb3e-4d50-bc04-54e4c8b02995')), Permission('Trial Balance', uuid.UUID('3b099fec-ddc5-4243-b30e-afb78d9ca14a')), Permission('Cash Flow', uuid.UUID('c4d3ae29-420b-ea4c-ae90-00a356263fd9')), Permission('Cost Centers', uuid.UUID('6fcc1a20-6aec-e840-b334-1632b34aeab8')), Permission('Users', uuid.UUID('c5b7d9d7-f178-0e45-8ea4-bf4e08ec901b'))] for permission in permissions: DBSession.add(permission) roles[0].permissions.append(permission) transaction.commit()