def __init__(self, colour, brightness, input_stream, audio_spectrum, spectrum_analysis, display_spectrum, log_path, *args, **kwargs): super(Libra, self).__init__(colour, brightness, input_stream, audio_spectrum, spectrum_analysis, display_spectrum, *args, **kwargs) self.__logger = Logging.getInstance(Logging.DEB) self.__logger.open(log_path) self.direction = 1 self.__logger.write(Logging.DEB, "Starting Libra display")
def update_json(config_path, data_map, log_path): logger = Logging.getInstance(Logging.DEB) logger.open(log_path) logger.write(Logging.DEB, "Attempting to update config file: " + config_path) exist_config = FileManagement.read_json(config_path, log_path) if exist_config is not None: exist_config.update(data_map) FileManagement.write_json(config_path, exist_config, log_path) else: logger.write(Logging.ERR, "Unable to update file")
def write_json(config_path, data_map, log_path): logger = Logging.getInstance(Logging.DEB) logger.open(log_path) logger.write( Logging.DEB, "Writing config data: " + json.dumps(data_map) + ", to file: " + config_path) try: with open(config_path, 'w') as file: file.write(json.dumps(data_map)) except Exception as e: logger.write(Logging.ERR, "Cannot open file to write data: " + str(e))
def fix_config_data(config_data, colour_key, pattern_key, brightness_key, config_path, log_path): logger = Logging.getInstance(Logging.DEB) logger.open(log_path) config_data, config_error = DataExtraction.verify_config_data( config_data, colour_key, pattern_key, brightness_key, log_path) if config_error is True: FileManagement.write_json(config_path, config_data, log_path) logger.write(Logging.WAR, "Error in config data so updated file") return config_data
def __is_config_int(config_type, key, min, max, log_path): logger = Logging.getInstance(Logging.DEB) logger.open(log_path) try: config_type_int = int(config_type) if config_type_int < min or config_type_int > max: raise ValueError return True except ValueError as e: logger.write(Logging.ERR, "Exception with config key: " + key + " " + str(e)) return False
def verify_config_data(config_data, colour_key, pattern_key, brightness_key, log_path): logger = Logging.getInstance(Logging.DEB) logger.open(log_path) config_error = False if colour_key not in config_data: config_data[colour_key] = 'rgba(18,237,159,1)' logger.write(Logging.WAR, "Colour config not present, setting to default") config_error = True elif not config_data[colour_key]: config_data[colour_key] = 'rgba(0,0,0,0)' if (pattern_key not in config_data or not config_data[pattern_key] ) or DataExtraction.__is_config_int(config_data[pattern_key], pattern_key, 1, 4, log_path) is False: config_data[pattern_key] = '1' logger.write(Logging.WAR, "Pattern key not present, setting to default") config_error = True rgb_regex = '^rgb\\(\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])%?\\s*,\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])%?\\s*,\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])%?\\s*\\)$' rgba_regex = '^rgba\\(\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])%?\\s*,\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])%?\\s*,\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])%?\\s*,\\s*((0.[1-9])|[01])\\s*\\)$' if not re.match(rgb_regex, config_data[colour_key]): if not re.match(rgba_regex, config_data[colour_key]): config_data[colour_key] = 'rgba(18,237,159,1)' logger.write( Logging.WAR, "Colour config does not match RBG or RGBA, setting to default" ) config_error = True if brightness_key not in config_data or DataExtraction.__is_config_int( config_data[brightness_key], brightness_key, 0, 100, log_path) is False: config_data[brightness_key] = '50' logger.write(Logging.WAR, "Invalid Brightness config, setting to default") config_error = True return config_data, config_error
def read_json(config_path, log_path): logger = Logging.getInstance(Logging.DEB) logger.open(log_path) logger.write(Logging.DEB, "Reading config data from file: " + config_path) data_map = {} try: with io.open(config_path, encoding='utf-8') as file: data_map = json.load(file) logger.write(Logging.DEB, "Read config data from file: " + json.dumps(data_map)) except Exception as e: logger.write(Logging.ERR, "Cannot open file to read data: " + str(e)) return data_map
def __init__(self, call_back, path, file_pattern, ignore_pattern, ignore_dirs, recursive, case_sensitive, log_path): self.__logger = Logging.getInstance(Logging.DEB) self.__logger.open(log_path) self.__call_back = call_back self.__logger.write( Logging.INF, "Creating monitor of file path: " + path + ", with pattern: " + file_pattern + ", ignoring: " + ignore_pattern + ", dir ignore? " + str(ignore_dirs) + ", recursive? " + str(recursive) + ", case sensitivity? " + str(case_sensitive) + ", with callback: " + self.__call_back.__name__) self.__watchdog_handler = PatternMatchingEventHandler( file_pattern, ignore_pattern, ignore_dirs, case_sensitive) self.__watchdog_handler.on_created = self.on_created self.__watchdog_handler.on_modified = self.on_modified self.__watchdog_observer = Observer() self.__watchdog_observer.schedule(self.__watchdog_handler, path, recursive=recursive)
elif pattern == '4': self.display_pattern = Libra( colour=colour, brightness=brightness, input_stream=self.input_stream, audio_spectrum=self.audio_spectrum, spectrum_analysis=self.spectrum_analysis, display_spectrum=self.display_spectrum, log_path=log_path) if self.display_pattern is not None: self.display_pattern.process() if __name__ == '__main__': logger = Logging.getInstance(Logging.DEB) logger.open(log_path) control = Control() monitor_config = WatchdogConfig(control.stop, config_dir, '*.txt', '', True, False, False, log_path) monitor_thread = threading.Thread(target=monitor_config.start_observing) monitor_thread.start() control.load_audio_dev() try: control.ip_check_display() while True: control.load_display(False) except KeyboardInterrupt: