Source code for iocbio.kinetics.app.gui
#!/usr/bin/env python3
from PyQt5.QtCore import Qt, pyqtSlot, pyqtSignal, QSettings, QCoreApplication, QStandardPaths
from PyQt5.QtWidgets import QApplication
import hashlib, sys
import iocbio.kinetics.io.db as dbwrapper
################################################################################
### Helper functions
################################################################################
[docs]def handle_schema_changes(database, version):
"""Handles changes in schema induced by updates. Returns true if successful"""
print("TODO: Handle changes in schema version")
return True # successful update
################################################################################
### Main app function
################################################################################
def app(args, modules):
from iocbio.kinetics.gui.mainwindow import MainGUI
from iocbio.kinetics.handler.roi import ROIHandler
from iocbio.kinetics.handler.experiment_generic import ExperimentGeneric
QCoreApplication.setOrganizationName("iocbio")
QCoreApplication.setApplicationName("kinetics")
app = QApplication([])
if args.sqlite: dbtype = "sqlite3"
else: dbtype="postgresql"
database = dbwrapper.DatabaseInterface(dbtype)
version = database.schema()
if version != dbwrapper.DatabaseInterface.schema_version:
if not handle_schema_changes(database, version):
print("Failed to update the database schema")
sys.exit(-1)
# init database
ExperimentGeneric.database_schema(database)
ROIHandler.database_schema(database)
modules.database_schema(database)
if args.set_default_permissions:
database.grant_groups()
database.close()
sys.exit(0)
if args.enable_user is not None:
database.grant(args.enable_user)
database.close()
sys.exit(0)
if args.disable_user is not None:
database.revoke(args.disable_user)
database.close()
sys.exit(0)
if args.rw:
database.set_read_only(False)
else:
database.set_read_only(True)
if args.force_rw:
database.disable_read_only = True
database.set_read_only(False)
data = modules.create_data(database, args = args)
modules.database_process(database, data, args)
gui_obj = MainGUI(database, data, modules)
exit_code = app.exec_()
database.close()
sys.exit(exit_code)
################################################################################
### Main entry point
################################################################################
def main():
from iocbio.kinetics.io.modules import Modules
import argparse
# load modules
modules = Modules()
# fill arguments
parser = argparse.ArgumentParser(description='IOCBIO Kinetics analyser', formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('file_name', nargs='?', type=str, help='Input file')
parser.add_argument('--sqlite', action='store_true', help='If option given SQLite database is used')
parser.add_argument('--rw', action='store_true', help='If given, program started in Read/Write mode')
parser.add_argument('--set-default-permissions', action='store_true', help='If given, sets default access permissions')
parser.add_argument('--enable-user', type=str, default=None, help='Add access permissions for specified user')
parser.add_argument('--disable-user', type=str, default=None, help='Remove access permissions for specified user')
# following is a hidden feature for forcing disabling read-only mode option
parser.add_argument('--force-rw', action='store_true', help=argparse.SUPPRESS)
# fill protocol help text and module specific args
protocol = '''
Experiment protocols that can be specified on command line (enclose in '' if contains space).
'''
protocol = modules.args(parser, protocol)
parser.add_argument('--protocol', type=str, default=None, help = protocol)
args = parser.parse_args()
app(args, modules)
# if run as a script
if __name__ == '__main__':
main()