Kiln » TortoiseHg » TortoiseHg
Clone URL:  
settings.py
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
""" settings.py - TortoiseHg dialog settings library Copyright (C) 2007 TK Soh <teekaysoh@gmail.com> This software may be used and distributed according to the terms of the GNU General Public License, incorporated herein by reference. """ import os import cPickle from mercurial import util class SimpleMRUList(object): def __init__(self, size=10, reflist=[], compact=True): self._size = size self._list = reflist if compact: self.compact() def __iter__(self): for elem in self._list: yield elem def add(self, val): if val in self._list: self._list.remove(val) self._list.insert(0, val) self.flush() def get_size(self): return self._size def set_size(self, size): self._size = size self.flush() def flush(self): while len(self._list) > self._size: del self._list[-1] def compact(self): ''' remove duplicate in list ''' newlist = [] for v in self._list: if v not in newlist: newlist.append(v) self._list[:] = newlist class Settings(object): def __init__(self, appname, path=None): self._appname = appname self._data = {} self._path = path and path or self._get_path(appname) self._audit() self.read() def get_value(self, key, default=None, create=False): if key in self._data: return self._data[key] elif create: self._data[key] = default return default def set_value(self, key, value): self._data[key] = value def mrul(self, key, size=10): ''' wrapper method to create a most-recently-used (MRU) list ''' ls = self.get_value(key, [], True) ml = SimpleMRUList(size=size, reflist=ls) return ml def get_keys(self): return self._data.keys() def get_appname(self): return self._appname def read(self): self._data.clear() if os.path.exists(self._path): try: f = file(self._path, 'rb') self._data = cPickle.loads(f.read()) f.close() except Exception: pass def write(self): self._write(self._path, self._data) def _write(self, appname, data): s = cPickle.dumps(data) f = util.atomictempfile(appname, 'wb', None) f.write(s) try: f.rename() except WindowsError: pass # silently ignore these errors def _get_path(self, appname): if os.name == 'nt': return os.path.join(os.environ.get('APPDATA'), 'TortoiseHg', appname) else: return os.path.join(os.path.expanduser('~'), '.tortoisehg', appname) def _audit(self): if os.path.exists(os.path.dirname(self._path)): return os.makedirs(os.path.dirname(self._path))