Guest User

Untitled

a guest
Sep 23rd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. from PyQt4 import QtCore
  2. from config import get_data_path
  3.  
  4. class SettingsWrapper(object):
  5. """Wrapper for QSettings using attribute access with conversion functions"""
  6. _known_settings = {
  7. #'setting': (conversionFuncRead, conversionFuncReadAttr, default),
  8. }
  9. def __init__(self, settings, subtree=None):
  10. self._settings = settings
  11. self._subtree = subtree
  12.  
  13. def __repr__(self):
  14. return "<%s wrapping %s with subtree %s>"%(self.__class__, self._settings, self._subtree)
  15.  
  16. def rewrite_settings(self):
  17. """Writes out the complete reparsed settings file"""
  18. if self._subtree:
  19. raise Exception("May only be called on main settings object")
  20. for setting in self._known_settings:
  21. section, name = setting.split('/')
  22. sec = getattr(self, section)
  23. setattr(sec, name, getattr(sec, name))
  24.  
  25. def __getattr__(self, name):
  26. if self._subtree is None:
  27. #Top level, need to return a wrapper for child
  28. return self.__class__(self._settings, name + '/')
  29. fullname = self._subtree + name
  30. raw = self._settings.value(fullname, None)
  31. if raw.isNull():
  32. if fullname in self._known_settings:
  33. return self._known_settings[fullname][2] #Default
  34. return None
  35. if fullname in self._known_settings:
  36. return self._known_settings[fullname][0](getattr(raw, self._known_settings[fullname][1])())
  37. return unicode(raw.toString()) #By default, return strings
  38.  
  39. def __setattr__(self, name, value):
  40. if name.startswith('_'):
  41. return super(SettingsWrapper, self).__setattr__(name, value)
  42. if self._subtree is None:
  43. raise ValueError("You cannot set an attribute outside of a section")
  44. fullname = self._subtree + name
  45. self._settings.setValue(fullname, value)
  46.  
  47. class SampleSettingsWrapper(SettingsWrapper):
  48. _known_settings = {
  49. 'main/examplestr': (unicode, 'toString', 'default.db'),
  50. 'main/somebool': (bool, 'toBool', False),
  51.  
  52. 'ab/cd': (bool, 'toBool', False),
  53. }
Add Comment
Please, Sign In to add comment