View difference between Paste ID: qbpKFknx and hBXmQ3Sf
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()