# -*- coding: utf-8 -*- from .music_file import * from .mapping import * from .lock 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") 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: seen_files[filename] = MusicFile(filename, file_lock) action_args['music'] = seen_files[filename] else: action_args[argument] = action[action_name][argument] key.add_action(action_name, **action_args)