# -*- coding: utf-8 -*- from .music_file import * from .mapping import * from .lock import * from .font import * import yaml def parse_config(mapping): stream = open("config.yml", "r") config = yaml.load(stream) stream.close() aliases = config['aliases'] seen_files = {} file_lock = Lock("file") channel_id = 0 for mapped_key in config['keys']: key = mapping.find_by_unicode(mapped_key) if key is None: continue for action in config['keys'][mapped_key]: action_name = list(action)[0] action_args = {} if action[action_name] is None: action[action_name] = [] if 'include' in action[action_name]: included = action[action_name]['include'] del(action[action_name]['include']) if isinstance(included, str): action[action_name].update(aliases[included], **action[action_name]) else: for included_ in included: action[action_name].update(aliases[included_], **action[action_name]) for argument in action[action_name]: if argument == 'file': filename = action[action_name]['file'] if filename not in seen_files: if 'name' in action[action_name]: seen_files[filename] = MusicFile(filename, file_lock, channel_id, name = action[action_name]['name']) else: seen_files[filename] = MusicFile(filename, file_lock, channel_id) channel_id = channel_id + 1 action_args['music'] = seen_files[filename] else: action_args[argument] = action[action_name][argument] key.add_action(action_name, **action_args) for key_property in config['key_properties']: key = mapping.find_by_unicode(key_property) if key is None: continue if 'description' in config['key_properties'][key_property]: key.set_description(config['key_properties'][key_property]['description']) if 'color' in config['key_properties'][key_property]: key.set_color(config['key_properties'][key_property]['color']) # Return the number of channels reserved return (channel_id + 1, seen_files)