+def parse_config2():
+ stream = open("config.yml", "r")
+ config = yaml.load(stream)
+ stream.close()
+
+ aliases = config['aliases']
+ seen_files = {}
+
+ file_lock = Lock("file")
+
+ channel_id = 0
+
+ key_properties = {}
+
+ for key in config['key_properties']:
+ if key not in key_properties:
+ key_properties[key] = {
+ "actions": [],
+ "properties": config['key_properties'][key],
+ "files": []
+ }
+
+ for mapped_key in config['keys']:
+ if mapped_key not in key_properties:
+ key_properties[mapped_key] = {
+ "actions": [],
+ "properties": {},
+ "files": []
+ }
+ 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 filename in config['music_properties']:
+ seen_files[filename] = MusicFile(
+ filename,
+ file_lock,
+ channel_id,
+ **config['music_properties'][filename])
+ else:
+ seen_files[filename] = MusicFile(
+ filename,
+ file_lock,
+ channel_id)
+ channel_id = channel_id + 1
+
+ if filename not in key_properties[mapped_key]['files']:
+ key_properties[mapped_key]['files'].append(seen_files[filename])
+
+ action_args['music'] = seen_files[filename]
+
+ else:
+ action_args[argument] = action[action_name][argument]
+
+ key_properties[mapped_key]['actions'].append([action_name, action_args])
+
+ return (key_properties, channel_id + 1, seen_files)