Example #1
0
def init_db(path):
    init = not os.path.isfile(path)
    if init:
        sqlite3.connect(path).close()

    database = QSqlDatabase("QSQLITE")
    database.setDatabaseName(path)

    database.open()

    def qt_exec(sql, *args, **kwargs):
        statement = sql.compile(dialect=mock.dialect)
        # print(statement)
        database.exec(str(statement))

    mock = create_engine('sqlite://', strategy='mock', executor=qt_exec)

    if init:
        Base.metadata.create_all(bind=mock)

    assert database.driver().hasFeature(QSqlDriver.EventNotifications)

    for tablename in Base.metadata.tables.keys():
        database.driver().subscribeToNotification(tablename)

    def call_callbacks(name: str):
        print("db changed")
        cb = Base.metadata.tables[name].onTableChanged
        if cb:
            cb()

    database.driver().notification.connect(call_callbacks)

    return database, mock