5 from MACFS
import kOnSystemDisk
9 def __init__(self
, dict = None):
13 self
._prefsdict
= dict
16 return len(self
._prefsdict
)
18 def __delattr__(self
, attr
):
19 if self
._prefsdict
.has_key(attr
):
20 del self
._prefsdict
[attr
]
22 raise AttributeError, 'delete non-existing instance attribute'
24 def __getattr__(self
, attr
):
25 if attr
== '__members__':
26 keys
= self
._prefsdict
.keys()
30 return self
._prefsdict
[attr
]
32 raise AttributeError, attr
34 def __setattr__(self
, attr
, value
):
36 self
._prefsdict
[attr
] = value
38 self
.__dict
__[attr
] = value
40 def getprefsdict(self
):
41 return self
._prefsdict
44 class PrefFile(PrefObject
):
46 def __init__(self
, path
, creator
= 'Pyth'):
47 # Find the preferences folder and our prefs file, create if needed.
49 self
.__creator
= creator
52 prefdict
= marshal
.load(open(self
.__path
, 'rb'))
53 except (IOError, ValueError):
54 # file not found, or currupt marshal data
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'))
74 fss
= macfs
.FSSpec(macfs
.FSRef(self
.__path
))
75 fss
.SetCreatorType(self
.__creator
, 'pref')
79 def __getattr__(self
, attr
):
80 if attr
== '__members__':
81 keys
= self
._prefsdict
.keys()
85 return self
._prefsdict
[attr
]
88 self
._prefsdict
[attr
] = PrefObject()
89 return self
._prefsdict
[attr
]
91 raise AttributeError, attr
96 def GetPrefs(prefname
, creator
= 'Pyth'):
98 if _prefscache
.has_key(prefname
):
99 return _prefscache
[prefname
]
100 # Find the preferences folder and our prefs file, create if needed.
101 vrefnum
, dirid
= macfs
.FindFolder(kOnSystemDisk
, 'pref', 0)
102 prefsfolder_fss
= macfs
.FSSpec((vrefnum
, dirid
, ''))
103 prefsfolder
= macfs
.FSRef(prefsfolder_fss
).as_fsspec().as_pathname()
104 path
= os
.path
.join(prefsfolder
, prefname
)
105 head
, tail
= os
.path
.split(path
)
106 # make sure the folder(s) exist
107 macostools
.mkdirs(head
)
109 preffile
= PrefFile(path
, creator
)
110 _prefscache
[prefname
] = preffile