initializedb.py 4.32 KB
import os
import sys

import transaction
from pyramid.paster import (
    get_appsettings,
    setup_logging,
)
from sqlalchemy import (
    engine_from_config,
)

from tangsel.base import Base
from tangsel.base.models import DBSession
from tangsel.base.scripts.initializedb import append_csv, reset_sequences, \
    alembic_run
from tangsel.models import Group, Permission, GroupPermission
from ..models import *
from ..models import (
    PbbmDBSession as ModuleDBSession,
)


def get_file(filename):
    base_dir = os.path.split(__file__)[0]
    fullpath = os.path.join(base_dir, 'data', filename)
    return open(fullpath)


def usage(argv):
    pass


def main(argv=sys.argv):
    if len(argv) != 2:
        usage(argv)

    config_uri = argv[1]
    setup_logging(config_uri)
    settings = get_appsettings(config_uri)
    # engine = engine_from_config(settings, 'pbb.')

    # PbbDBSession.configure(bind=engine)
    # PbbBase.metadata.bind = engine
    # PbbBase.metadata.create_all()

    engine = engine_from_config(settings, 'sqlalchemy.')
    DBSession.configure(bind=engine)
    Base.metadata.bind = engine
    Base.metadata.create_all(engine)
    # alembic_run(config_uri, "alembic_pbbm")
    reset_sequences()
    if "lib_dir" in settings and settings["lib_dir"]:
        try:
            from cx_Oracle import init_oracle_client
        except:
            from oracledb import init_oracle_client

        lib_dir = rf"{settings['lib_dir']}"
        init_oracle_client(lib_dir=lib_dir)

    url = 'pbbm.url' in settings and settings['pbbm.url'] and 'pbbm.' or None
    if not url:
        url = 'pbb.url' in settings and settings['pbb.url'] and 'pbb.' or 'sqlalchemy.'
    engine = engine_from_config(settings, url)
    PbbmDBSession.configure(bind=engine)
    PbbmBase.metadata.bind = engine
    PbbmBase.metadata.create_all(engine)
    # engine = ModuleDBSession.bind
    # create_schema(engine, pbbm_schema)
    #     ModuleBase.metadata.create_all(engine)
    #     ModuleDBSession.configure(bind=engine)
    #     initial_data.insert()

    print('>>Append Table')
    # append_csv(Route, 'routes.csv', ['kode'], get_file_func=get_file, update_exist=True)
    # append_csv(Menus, 'menus.csv', ['kode'], get_file_func=get_file, update_exist=False)
    append_csv(Group, 'group.csv', ['group_name'],
               get_file_func=get_file, update_exist=True)
    append_csv(Permission, 'permissions.csv', ['perm_name'], get_file_func=get_file,
               update_exist=True)
    append_csv(GroupPermission, 'group_permission.csv', ['group_id', 'perm_name'],
               get_file_func=get_file, update_exist=True)
    # append_csv(Parameter, "parameters.csv", ["kode"], get_file_func=get_file)
    # append_csv(PbbPelayanan, "layanan.csv", ["kode"], get_file_func=get_file)
    # append_csv(PbbSyarat, "syarat.csv", ["kode"], get_file_func=get_file)
    # transaction.commit()
    # append_csv(PbbSyaratPelayanan,"layanan_syarat.csv", ["pelayanan_id", "syarat_id"], get_file_func=get_file)
    transaction.commit()
    print('****PBBM CREATED****')

# import os
# import sys
# import transaction
# import subprocess
# from sqlalchemy import (
#     engine_from_config,
#     select,
#     )
# from sqlalchemy.schema import CreateSchema
# from pyramid.paster import (
#     get_appsettings,
#     setup_logging,
#     )
#
# from ..models import (
#     PbbmDBSession as ModuleDBSession,
#     PbbmBase as ModuleBase,
#     )
#
# from ..models import *
# from . import initial_data
# #from .tools import mkdir
#
# from ...scripts.initializedb import create_schema, read_file
# from ..tools import get_settings
# from ..models import pbbm_schema
# def main(settings):
#     transaction.commit()
#
#     url = 'pbb.url' in settings and settings['pbb.url'] and 'pbb.' or None
#     if not url:
#         url = 'pbbm.url' in settings and settings['pbbm.url'] and 'pbbm.' or 'sqlalchemy.'
#     engine = engine_from_config(settings, url)
#     PbbmDBSession.configure(bind=engine)
#     PbbmBase.metadata.bind = engine
#
#     engine = ModuleDBSession.bind
#     create_schema(engine, pbbm_schema)
#     ModuleBase.metadata.create_all(engine)
#     ModuleDBSession.configure(bind=engine)
#     initial_data.insert()
#     transaction.commit()
#     print('****PBBM CREATED****')