10 def __init__(self
, dict = None):
14 self
._prefsdict
= dict
17 return len(self
._prefsdict
)
19 def __delattr__(self
, attr
):
20 if self
._prefsdict
.has_key(attr
):
21 del self
._prefsdict
[attr
]
23 raise AttributeError, 'delete non-existing instance attribute'
25 def __getattr__(self
, attr
):
26 if attr
== '__members__':
27 keys
= self
._prefsdict
.keys()
31 return self
._prefsdict
[attr
]
33 raise AttributeError, attr
35 def __setattr__(self
, attr
, value
):
37 self
._prefsdict
[attr
] = value
39 self
.__dict
__[attr
] = value
41 def getprefsdict(self
):
42 return self
._prefsdict
45 class PrefFile(PrefObject
):
47 def __init__(self
, path
, creator
= 'Pyth'):
48 # Find the preferences folder and our prefs file, create if needed.
50 self
.__creator
= creator
53 prefdict
= marshal
.load(open(self
.__path
, 'rb'))
57 for key
, value
in prefdict
.items():
58 if type(value
) == types
.DictType
:
59 self
._prefsdict
[key
] = PrefObject(value
)
61 self
._prefsdict
[key
] = value
65 for key
, value
in self
._prefsdict
.items():
66 if type(value
) == types
.InstanceType
:
67 prefdict
[key
] = value
.getprefsdict()
72 marshal
.dump(prefdict
, open(self
.__path
, 'wb'))
73 fss
= macfs
.FSSpec(self
.__path
)
74 fss
.SetCreatorType(self
.__creator
, 'pref')
76 def __getattr__(self
, attr
):
77 if attr
== '__members__':
78 keys
= self
._prefsdict
.keys()
82 return self
._prefsdict
[attr
]
85 self
._prefsdict
[attr
] = PrefObject()
86 return self
._prefsdict
[attr
]
88 raise AttributeError, attr
93 def GetPrefs(prefname
, creator
= 'Pyth'):
95 if _prefscache
.has_key(prefname
):
96 return _prefscache
[prefname
]
97 # Find the preferences folder and our prefs file, create if needed.
98 vrefnum
, dirid
= macfs
.FindFolder(kOnSystemDisk
, 'pref', 0)
99 prefsfolder_fss
= macfs
.FSSpec((vrefnum
, dirid
, ''))
100 prefsfolder
= prefsfolder_fss
.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