]> git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/blob - helpers/__init__.py
enhancing locks
[perso/Immae/Projets/Python/MusicSampler.git] / helpers / __init__.py
1 # -*- coding: utf-8 -*-
2 from .music_file import *
3 from .mapping import *
4 from .lock import *
5 import yaml
6
7 def parse_config(mapping):
8 stream = open("config.yml", "r")
9 config = yaml.load(stream)
10 stream.close()
11
12 aliases = config['aliases']
13 seen_files = {}
14
15 file_lock = Lock("file")
16
17 for mapped_key in config['keys']:
18 key = mapping.find_by_unicode(mapped_key)
19 if key is None:
20 continue
21
22 for action in config['keys'][mapped_key]:
23 action_name = list(action)[0]
24 action_args = {}
25 if action[action_name] is None:
26 action[action_name] = []
27
28 if 'include' in action[action_name]:
29 included = action[action_name]['include']
30 del(action[action_name]['include'])
31
32 if isinstance(included, str):
33 action[action_name].update(aliases[included], **action[action_name])
34 else:
35 for included_ in included:
36 action[action_name].update(aliases[included_], **action[action_name])
37
38 for argument in action[action_name]:
39 if argument == 'file':
40 filename = action[action_name]['file']
41 if filename not in seen_files:
42 seen_files[filename] = MusicFile(filename, file_lock)
43
44 action_args['music'] = seen_files[filename]
45
46 else:
47 action_args[argument] = action[action_name][argument]
48
49 key.add_action(action_name, **action_args)