def setLogLevel(self, level): """Set plugin log level. Args: level (str, int) : Log level (DEBUG | INFO | ERROR | CRITICAL) """ if level: if isinstance(level, basestring): level = logLevelFromName(level) self.log.setLevel(level)
def load_config_files(*files): """Load and merge YAML config files. Files that come earlier in the list take precedence over files that come later in the list. Args: *files (list) : Variable number of file paths. Example:: load_config_files(file1, file2, file3, ...): """ files = [file for file in files if file is not None and file != ''] for file in files: sys.path.insert(0, os.path.dirname(file)) LOG.debug('Loading config files: {}'.format(files)) # hiyapyco merges in order least important to most important files.reverse() expanded_files = process_templates(files) hiyapyco.jinja2env = NativeEnvironment(variable_start_string='(', variable_end_string=')', undefined=LogUndefined) cfg_dict = hiyapyco.load(expanded_files, method=hiyapyco.METHOD_MERGE, interpolate=True, failonmissingfiles=True) if LOG.getEffectiveLevel() == logLevelFromName("DEBUG"): LOG.debug("Merged YAML config:\n\n%s\n", hiyapyco.dump(cfg_dict, default_flow_style=False)) return cfg_dict
def apply_opts(opts): # read options from INI file and merge with cmd line options ini_file = normalizePath(opts.ini, os.path.expanduser('~/linuxcnc/configs')) ini_obj = ini(ini_file) for k, v in opts.iteritems(): ini_val = ini_obj.find('DISPLAY', k.upper().replace('-', '_')) if ini_val is None: continue # convert str values to bool if type(v) == bool: # TODO: Find a way to prefer cmd line values over INI values ini_val = ini_val.lower() in ['true', 'on', 'yes', '1'] # if its a non bool value and it was specified on the cmd line # then prefer the cmd line value elif v is not None: continue # If a VCP is specified in the INI as a .ui or .yaml file the path # should be relative to the config dir rather then the $PWD. if k.lower() == 'vcp' and ini_val.lower().split('.')[-1] in ['ui', 'yml', 'yaml']: ini_val = normalizePath(ini_val, os.path.dirname(ini_file)) opts[k] = convType(ini_val) # Check if LinuxCNC is running if not os.path.isfile('/tmp/linuxcnc.lock'): # LinuxCNC is not running. # TODO: maybe launch LinuxCNC using subprocess? print 'LinuxCNC must be running to launch a VCP' sys.exit() # setup the environment variables ini_file = os.environ.get('INI_FILE_NAME') or opts.ini if ini_file is None: print 'LinuxCNC is running, but you must specify the INI file' sys.exit() if not os.getenv('INI_FILE_NAME'): base_path = os.path.expanduser('~/linuxcnc/configs') ini_file = os.path.realpath(normalizePath(ini_file, base_path)) if not os.path.isfile(ini_file): print 'Specified INI file does not exist: {}'.format(ini_file) sys.exit() os.environ['INI_FILE_NAME'] = ini_file os.environ['CONFIG_DIR'] = os.path.dirname(ini_file) if opts.qt_api: os.environ['QT_API'] = opts.qt_api if opts.config_file is not None: # cmd line config file should be relative to INI file config_dir = os.getenv('CONFIG_DIR', '') config_file_path = normalizePath(opts.config_file, config_dir) if not os.path.isfile(config_file_path): print 'Specified YAML file does not exist: {}'.format(config_file_path) sys.exit() opts.config_file = config_file_path # show the chooser if the --chooser flag was specified if opts.chooser or not opts.get('vcp', True): from qtpyvcp.vcp_chooser import VCPChooser from qtpy.QtWidgets import QApplication, qApp app = QApplication([]) result = VCPChooser(opts).exec_() if result == VCPChooser.Rejected: sys.exit() # destroy the evidence qApp.deleteLater() del app # normalize log file path log_file = normalizePath(opts.log_file, os.getenv('CONFIG_DIR') or os.getenv('HOME')) if log_file is None or os.path.isdir(log_file): log_file = os.path.expanduser('~/qtpyvcp.log') opts.log_file = log_file # init the logger from qtpyvcp.utilities import logger LOG = logger.initBaseLogger('qtpyvcp', log_file=opts.log_file, log_level=opts.log_level or "INFO") LOG.info("QtPyVCP Version: %s", QTPYVCP_VERSION) if LOG.getEffectiveLevel() == logger.logLevelFromName("DEBUG"): import qtpy LOG.debug("Qt Version: %s", qtpy.QT_VERSION) LOG.debug("Qt API: %s", qtpy.QT_API) LOG.debug("QtPy Version: %s", qtpy.__version__) LOG.debug("Command line options:\n%s", json.dumps(opts, sort_keys=True, indent=4)) return opts