kcg.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #!/usr/bin/python
  2. """
  3. This is the main program for KCG
  4. It imports all modules and starts the Gui
  5. """
  6. from PyQt4 import QtGui, QtCore
  7. import sys
  8. import os
  9. import argparse as ap
  10. import logging
  11. from logging import handlers
  12. # -------[ Register Logger here to enable logging before anything of this app is performed ]---------------
  13. logging.getLogger().setLevel(0)
  14. fileLogHandler = handlers.RotatingFileHandler(os.path.expanduser("~")+"/.kcg/kcg.log.full", maxBytes=10**7, backupCount=5)
  15. fileLogHandler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s: %(message)s'))
  16. fileLogHandler.setLevel(0)
  17. logging.getLogger().addHandler(fileLogHandler)
  18. logging.info("==========[Start Application]===========")
  19. import base.kcgwidget as kcgw
  20. import config
  21. from config import Configuration
  22. logging.addLevelName(logging.INFO-1, 'VINFO')
  23. translator = QtCore.QTranslator()
  24. kcgw.translator = translator
  25. # kcgw.tr = translator.translate
  26. kcgw.tr = QtCore.QCoreApplication.translate
  27. config.install_path = os.path.dirname(config.__file__) + "/"
  28. try: # Try to use Erax for exception logging
  29. sys.path.append(os.path.expanduser('~/Documents/PythonProjects/'))
  30. from erax import Erax
  31. exception_log_handler = Erax('https://psraspi.no-ip.biz/p/erax/insert/78e55a9524a191f7628f82a20bcaa167:kcg',
  32. no_epl_errors=True, cert='/tmp/raspi.pem')
  33. exception_log_handler.install()
  34. except ImportError:
  35. pass
  36. def print_version(verbose=False):
  37. """
  38. Print the version of the current used KCG instance
  39. :param verbose: print verbose?
  40. """
  41. # print "KCG - KAPTURE Control Gui"
  42. # print "=" * 30
  43. print "KCG",
  44. with open(config.install_path+'VERSION', 'r') as v:
  45. print v.read().strip()
  46. if verbose:
  47. print "=" * 30
  48. print "Using Python:"
  49. print sys.version
  50. print "=" * 30
  51. print "From: " + config.install_path
  52. def inject_setting(section, setting, value, args):
  53. """
  54. Inject a setting from the command line
  55. :param section: the section to inject to
  56. :param setting: the setting to inject
  57. :param value: the value of this setting
  58. :param args: the argparse parsed instance
  59. """
  60. args.config += section + '->' + setting + '=' + str(value) + ';'
  61. def log_type(level):
  62. """
  63. Method to validate and cast the log level
  64. :param level: the level to validate and cast
  65. :return: a valid logging level
  66. """
  67. try:
  68. return int(level)
  69. except ValueError:
  70. try:
  71. return logging._checkLevel(level)
  72. except ValueError:
  73. raise ap.ArgumentTypeError("No valid log level.")
  74. def run():
  75. """
  76. Main Function, gets called when GUI is started
  77. :return:
  78. """
  79. app = QtGui.QApplication(sys.argv)
  80. app.installTranslator(translator)
  81. app.processEvents()
  82. # pixmap = QtGui.QPixmap(config.install_path+"icons/KCG_Logo.png").scaled(400, 400)
  83. # splash_screen = QtGui.QSplashScreen(pixmap)
  84. # splash_screen.setMask(pixmap.mask())
  85. # splash_screen.show()
  86. # splash_screen.update()
  87. # splash_screen.showMessage("Loading KCG", QtCore.Qt.AlignCenter | QtCore.Qt.AlignBottom, QtCore.Qt.red)
  88. # splash_screen.update()
  89. # app.processEvents()
  90. parser = ap.ArgumentParser("KCG - KAPTURE Control Gui")
  91. parser.add_argument('--config', type=str, default='', help='Override Configuration file settings.'
  92. 'Format: "Section->setting=content;Section->setting2=content;Section2->setting3=content" etc.')
  93. parser.add_argument('--version', action='store_true', help="Print Version and exit")
  94. parser.add_argument('--vversion', action='store_true', help="Print Version verbose and exit")
  95. parser.add_argument('--fpga-detection', action='store_true', help="If Present, use 'dev' detection mode (detect"
  96. "boards by using /dev/fpga# files.)")
  97. parser.add_argument('--log', type=log_type, default=config.logging.INFO, help="Set the log level")
  98. parser.add_argument('--testing', action='store_true', default=False,
  99. help="start KCG in testing version. DO NOT USE THIS IN PRODUCTION.")
  100. args = parser.parse_args()
  101. if args.version or args.vversion:
  102. print_version(args.vversion)
  103. sys.exit()
  104. kcgw.testing = args.testing
  105. if args.fpga_detection:
  106. inject_setting('Misc', 'board_detection_method', '"dev"', args)
  107. # logger = logging.getLogger()
  108. # logger.setLevel(args.log)
  109. # logging.logger = logger
  110. def vinfo(content):
  111. '''log with level VINFO'''
  112. logging.log(logging.getLevelName('VINFO'), content)
  113. logging.vinfo = vinfo
  114. conf = Configuration(args.config, log_level=args.log)
  115. conf.setup()
  116. while conf.error:
  117. conf.doSetup()
  118. if args.testing:
  119. config.default_subdirectory_name = 't'
  120. config.board_detection_method = 'dummy'
  121. import base.kcg as kcg
  122. gui = kcg.Gui()
  123. # splash_screen.finish(gui)
  124. gui.show()
  125. sys.exit(app.exec_())