Move setting of ioready 'wait' earlier in call chain, to
[python/dscho.git] / Mac / Tools / IDE / MacPrefs.py
blob25dda4fcc4ee69fc3ac09d8a7d4edd177e3435a6
1 import marshal
2 import types
3 from Carbon import Folder
4 from Carbon import Folders
6 class PrefObject:
8 def __init__(self, dict = None):
9 if dict == None:
10 self._prefsdict = {}
11 else:
12 self._prefsdict = dict
14 def __len__(self):
15 return len(self._prefsdict)
17 def __delattr__(self, attr):
18 if self._prefsdict.has_key(attr):
19 del self._prefsdict[attr]
20 else:
21 raise AttributeError, 'delete non-existing instance attribute'
23 def __getattr__(self, attr):
24 if attr == '__members__':
25 keys = self._prefsdict.keys()
26 keys.sort()
27 return keys
28 try:
29 return self._prefsdict[attr]
30 except KeyError:
31 raise AttributeError, attr
33 def __setattr__(self, attr, value):
34 if attr[0] <> '_':
35 self._prefsdict[attr] = value
36 else:
37 self.__dict__[attr] = value
39 def getprefsdict(self):
40 return self._prefsdict
43 class PrefFile(PrefObject):
45 def __init__(self, path, creator = 'Pyth'):
46 # Find the preferences folder and our prefs file, create if needed.
47 self.__path = path
48 self.__creator = creator
49 self._prefsdict = {}
50 try:
51 prefdict = marshal.load(open(self.__path, 'rb'))
52 except (IOError, ValueError):
53 # file not found, or currupt marshal data
54 pass
55 else:
56 for key, value in prefdict.items():
57 if type(value) == types.DictType:
58 self._prefsdict[key] = PrefObject(value)
59 else:
60 self._prefsdict[key] = value
62 def save(self):
63 prefdict = {}
64 for key, value in self._prefsdict.items():
65 if type(value) == types.InstanceType:
66 prefdict[key] = value.getprefsdict()
67 if not prefdict[key]:
68 del prefdict[key]
69 else:
70 prefdict[key] = value
71 marshal.dump(prefdict, open(self.__path, 'wb'))
72 try:
73 MacOS.SetCreatorAndType(self.__path, self.__creator, 'pref')
74 except:
75 pass
77 def __getattr__(self, attr):
78 if attr == '__members__':
79 keys = self._prefsdict.keys()
80 keys.sort()
81 return keys
82 try:
83 return self._prefsdict[attr]
84 except KeyError:
85 if attr[0] <> '_':
86 self._prefsdict[attr] = PrefObject()
87 return self._prefsdict[attr]
88 else:
89 raise AttributeError, attr
92 _prefscache = {}
94 def GetPrefs(prefname, creator = 'Pyth'):
95 import macostools, os
96 if _prefscache.has_key(prefname):
97 return _prefscache[prefname]
98 # Find the preferences folder and our prefs file, create if needed.
99 fsr = Folder.FSFindFolder(Folders.kOnSystemDisk, 'pref', 1)
100 prefsfolder = fsr.as_pathname()
101 path = os.path.join(prefsfolder, prefname)
102 head, tail = os.path.split(path)
103 # make sure the folder(s) exist
104 macostools.mkdirs(head)
106 preffile = PrefFile(path, creator)
107 _prefscache[prefname] = preffile
108 return preffile