Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PyQt4 import QtCore
- from config import get_data_path
- class SettingsWrapper(object):
- """Wrapper for QSettings using attribute access with conversion functions"""
- _known_settings = {
- #'setting': (conversionFuncRead, conversionFuncReadAttr, default),
- }
- def __init__(self, settings, subtree=None):
- self._settings = settings
- self._subtree = subtree
- def __repr__(self):
- return "<%s wrapping %s with subtree %s>"%(self.__class__, self._settings, self._subtree)
- def rewrite_settings(self):
- """Writes out the complete reparsed settings file"""
- if self._subtree:
- raise Exception("May only be called on main settings object")
- for setting in self._known_settings:
- section, name = setting.split('/')
- sec = getattr(self, section)
- setattr(sec, name, getattr(sec, name))
- def __getattr__(self, name):
- if self._subtree is None:
- #Top level, need to return a wrapper for child
- return self.__class__(self._settings, name + '/')
- fullname = self._subtree + name
- raw = self._settings.value(fullname, None)
- if raw.isNull():
- if fullname in self._known_settings:
- return self._known_settings[fullname][2] #Default
- return None
- if fullname in self._known_settings:
- return self._known_settings[fullname][0](getattr(raw, self._known_settings[fullname][1])())
- return unicode(raw.toString()) #By default, return strings
- def __setattr__(self, name, value):
- if name.startswith('_'):
- return super(SettingsWrapper, self).__setattr__(name, value)
- if self._subtree is None:
- raise ValueError("You cannot set an attribute outside of a section")
- fullname = self._subtree + name
- self._settings.setValue(fullname, value)
- class SampleSettingsWrapper(SettingsWrapper):
- _known_settings = {
- 'main/examplestr': (unicode, 'toString', 'default.db'),
- 'main/somebool': (bool, 'toBool', False),
- 'ab/cd': (bool, 'toBool', False),
- }
Add Comment
Please, Sign In to add comment