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'))
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