SHOW:
|
|
- or go back to the newest paste.
1 | # -*- coding: utf-8 -*- | |
2 | # vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4 | |
3 | ||
4 | import sip | |
5 | from datetime import datetime, timedelta | |
6 | ||
7 | sip.setapi(u'QDate', 2) | |
8 | sip.setapi(u'QDateTime', 2) | |
9 | sip.setapi(u'QString', 2) | |
10 | sip.setapi(u'QTextStream', 2) | |
11 | sip.setapi(u'QTime', 2) | |
12 | sip.setapi(u'QUrl', 2) | |
13 | sip.setapi(u'QVariant', 2) | |
14 | ||
15 | ||
16 | from PyQt4 import QtCore | |
17 | ||
18 | ||
19 | class Settings(QtCore.QSettings): | |
20 | __default_settings__ = { | |
21 | # This defaults to yesterday in order to force the update check to run when you've never run it before. | |
22 | u'core/last version test': datetime.now().date() - timedelta(days=1) | |
23 | } | |
24 | ||
25 | def value(self, key): | |
26 | # if group() is not empty the group has not been specified together with the key. | |
27 | if self.group(): | |
28 | default_value = Settings.__default_settings__[self.group() + u'/' + key] | |
29 | else: | |
30 | default_value = Settings.__default_settings__[key] | |
31 | setting = super(Settings, self).value(key, default_value) | |
32 | return self._convert_value(setting, default_value) | |
33 | ||
34 | def _convert_value(self, setting, default_value): | |
35 | # On OS X (and probably on other platforms too) empty value from QSettings is represented as type | |
36 | # PyQt4.QtCore.QPyNullVariant. This type has to be converted to proper 'None' Python type. | |
37 | if isinstance(setting, QtCore.QPyNullVariant) and setting.isNull(): | |
38 | setting = None | |
39 | # Handle 'None' type (empty value) properly. | |
40 | if setting is None: | |
41 | # An empty string saved to the settings results in a None type being returned. | |
42 | # Convert it to empty unicode string. | |
43 | if isinstance(default_value, unicode): | |
44 | return u'' | |
45 | # An empty list saved to the settings results in a None type being returned. | |
46 | else: | |
47 | return [] | |
48 | # Convert the setting to the correct type. | |
49 | if isinstance(default_value, bool): | |
50 | if isinstance(setting, bool): | |
51 | return setting | |
52 | # Sometimes setting is string instead of a boolean. | |
53 | return setting == u'true' | |
54 | if isinstance(default_value, int): | |
55 | return int(setting) | |
56 | return setting | |
57 | ||
58 | if __name__ == u'__main__': | |
59 | settings = Settings() | |
60 | print settings.fileName() | |
61 | settings.beginGroup(u'core') | |
62 | last_test = settings.value(u'last version test') | |
63 | this_test = datetime.now().date() | |
64 | settings.setValue(u'last version test', this_test) | |
65 | settings.endGroup() |