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