3 from Carbon
import Folder
4 from Carbon
import Folders
8 def __init__(self
, dict = None):
12 self
._prefsdict
= dict
15 return len(self
._prefsdict
)
17 def __delattr__(self
, attr
):
18 if self
._prefsdict
.has_key(attr
):
19 del self
._prefsdict
[attr
]
21 raise AttributeError, 'delete non-existing instance attribute'
23 def __getattr__(self
, attr
):
24 if attr
== '__members__':
25 keys
= self
._prefsdict
.keys()
29 return self
._prefsdict
[attr
]
31 raise AttributeError, attr
33 def __setattr__(self
, attr
, value
):
35 self
._prefsdict
[attr
] = value
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.
48 self
.__creator
= creator
51 prefdict
= marshal
.load(open(self
.__path
, 'rb'))
52 except (IOError, ValueError):
53 # file not found, or currupt marshal data
56 for key
, value
in prefdict
.items():
57 if type(value
) == types
.DictType
:
58 self
._prefsdict
[key
] = PrefObject(value
)
60 self
._prefsdict
[key
] = value
64 for key
, value
in self
._prefsdict
.items():
65 if type(value
) == types
.InstanceType
:
66 prefdict
[key
] = value
.getprefsdict()
71 marshal
.dump(prefdict
, open(self
.__path
, 'wb'))
73 MacOS
.SetCreatorAndType(self
.__path
, self
.__creator
, 'pref')
77 def __getattr__(self
, attr
):
78 if attr
== '__members__':
79 keys
= self
._prefsdict
.keys()
83 return self
._prefsdict
[attr
]
86 self
._prefsdict
[attr
] = PrefObject()
87 return self
._prefsdict
[attr
]
89 raise AttributeError, attr
94 def GetPrefs(prefname
, creator
= 'Pyth'):
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