~pyshareteam/pyshare/0.6

« back to all changes in this revision

Viewing changes to Settings.py

  • Committer: Sebastian Kacprzak
  • Date: 2011-02-12 21:02:19 UTC
  • Revision ID: naicik@gmail.com-20110212210219-xauqct7u3dbwhdyv
fix merging of settings, and test it

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
    """gives PyShare settings.
36
36
    If database exists gives settings from it, otherwise returns default values"""
37
37
    __metaclass__ = Singleton
38
 
    __settingsDefault = {
 
38
    _settingsDefault = {
39
39
        #PyShare_GTK settings
40
40
        "maximumHeight" : 512, # maximum window height - window will grow with number of files, but will never pass this value
41
41
        "thumbnailSize" : 96, # if image is not square ratio will be keeped
60
60
                "bmp":"Imageshack",
61
61
                "gif":"Imageshack",
62
62
                "png":"Imageshack", 
63
 
                "tiff":"Imageshack",#tif and tiff should be handled same way
 
63
                "tif":"Imageshack",#tif and tiff should be handled same way
64
64
                "*":"Rapidshare"
65
65
            }
66
66
    }
68
68
    __keyringName = "Pyshare"
69
69
 
70
70
    def getDefaultSettings(self):
71
 
        return self.__settingsDefault
 
71
        return self._settingsDefault
72
72
 
73
73
    def getSettings(self):
74
74
        """returns all stored settings"""
207
207
    def getProxyAuthenticationType(self):
208
208
        return self.__settings["proxyAuthenticationType"]
209
209
 
210
 
    def __initSettingsFromDatabaseAndFixThemIfNeeded(self):
211
 
        """tries to load settings from db.
212
 
        If it don't exist uses default values
213
 
        If it exist but don't have keys writes defaults to database
214
 
        If it exist but settings are incorrect(probably because program version missmatch) merges correct database settings with defaults and writes them to database"""
 
210
    def _load_settings(self):
 
211
        """try to load settings from database.
 
212
 
 
213
        If db don't exist uses default values and writes defaults to database
 
214
        If db exist but settings are incorrect(probably because program version
 
215
        missmatch) merges correct database settings with defaults and writes them to database.
 
216
        return merged settings
 
217
 
 
218
        """
215
219
        assert dbExists
216
 
        overwriteDatabaseSettings = False
217
 
        settings = {}
218
 
        databeseSettings = db.getSettings()
219
 
        if not databeseSettings:
220
 
            overwriteDatabaseSettings = True # database was empty
221
 
            settings = self.__settingsDefault
 
220
        result = {}
 
221
        databaseSettings = db.getSettings()
 
222
        if not databaseSettings:
 
223
            result = self._settingsDefault # use defaults
222
224
        else:
223
 
            """itarate over settings default keys.
224
 
            if key exist in databaseSettings use their value
225
 
            otherwise set overwriteDatabaseSettings to true and use default value"""
226
 
            for key, value in self.__settingsDefault.iteritems():
227
 
                if key in databeseSettings:
228
 
                    settings[key] = databeseSettings[key]
229
 
                else:
230
 
                    overwriteDatabaseSettings = True
231
 
                    settings[key] = value
232
 
        settings, settingsChanged = _fix_preffered_uploaders_if_needed(settings)
233
 
        if settingsChanged:
234
 
            overwriteDatabaseSettings = True
235
 
        self.__settings = settings
236
 
        if overwriteDatabaseSettings:
 
225
            # Merge defaults with settings.
 
226
            # If setting exist in both defaults and database
 
227
            # use value from database
 
228
#            preffered_uploaders_defaults = self._settingsDefault["preferredUploaders"]
 
229
#            preffered_uploaders_defaults.update(self._settingsDefault["preferredUploaders"])
 
230
#            self._settingsDefault["preferredUploaders"] = preffered_uploaders_defaults
 
231
#            result = self._settingsDefault
 
232
 
 
233
            result = dict(self._settingsDefault, **databaseSettings)
 
234
            result["preferredUploaders"] = dict(self._settingsDefault["preferredUploaders"], **databaseSettings["preferredUploaders"])
 
235
 
 
236
        result = _fix_preffered_uploaders_if_needed(result)
 
237
        settings_changed = databaseSettings != result
 
238
        if settings_changed:
237
239
            self.saveSettingsToDB()
 
240
        return result
238
241
 
239
242
 
240
243
    def putUseUploadersCredentialsIntoSettings(self, pluginsWithPasswords):
241
 
        """puts 'usePasswordFor' = False in settings
 
244
        """Fills settings with lacking usePasswordForUploader
 
245
 
 
246
        put 'usePasswordFor' = False in settings
242
247
        for each plugin that can use credentials, that did not have
243
 
        value for this setting stored."""
 
248
        value for this setting stored.
 
249
 
 
250
        """
244
251
        for plugin in pluginsWithPasswords:
245
252
            settingName = self.getSettingNameForUsingUploaderPassword(plugin.NAME)
246
253
            if not settingName in self.__settings:
248
255
 
249
256
 
250
257
    def __init__(self):
251
 
        self.__initSettingsFromDatabaseAndFixThemIfNeeded()
 
258
        settings = self._load_settings()
 
259
        self.__settings = settings
252
260
 
253
261
 
254
262
def _fix_preffered_uploaders_if_needed(settings):
255
263
    """change preffered uploaders if they have list as values
256
264
 
257
 
    return dictionary of correct uploaders and boolean indicating if change occured
 
265
    return dictionary of correct uploaders
258
266
    this function is for transition between PyShare o.5.* to 0.6
259
267
 
260
268
    """
261
269
    preferredUploaders = settings["preferredUploaders"]
262
 
    change_occured = False
263
270
    for type, uploader in preferredUploaders.items():
264
271
        if isinstance(uploader, list):
265
272
            preferredUploaders[type] = uploader[0]
266
 
            change_occured = True
267
 
    return settings, change_occured
 
273
    return settings