1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# -*- coding: UTF-8 -*-
# Copyright 2013 Facundo Batista
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 3, as published
# by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranties of
# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
# For further info, check https://launchpad.net/encuentro
"""The system configuration."""
import os
import pickle
class _Config(dict):
"""The configuration."""
SYSTEM = 'system'
def __init__(self):
self._fname = None
super(_Config, self).__init__()
def init(self, fname):
"""Initialize and load config."""
self._fname = fname
if not os.path.exists(fname):
# default to an almost empty dict
self[self.SYSTEM] = {}
return
with open(fname, 'rb') as fh:
saved_dict = pickle.load(fh)
self.update(saved_dict)
# for compatibility, put the system container if not there
if self.SYSTEM not in self:
self[self.SYSTEM] = {}
def save(self):
"""Save the config to disk."""
# we don't want to pickle this class, but the dict itself
raw_dict = self.copy()
with open(self._fname, 'wb') as fh:
pickle.dump(raw_dict, fh)
class _Signal(object):
"""Custom signals.
Decorate a function to be called when signal is emitted.
"""
def __init__(self):
self.store = {}
def register(self, method):
"""Register a method."""
self.store.setdefault(method.__name__, []).append(method)
def emit(self, name):
"""Call the registered methods."""
meths = self.store.get(name, [])
for meth in meths:
meth()
config = _Config()
signal = _Signal()
|