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()