Changeset 1175

Show
Ignore:
Timestamp:
08/21/05 21:48:40 (3 years ago)
Author:
paul
Message:

Factored out the saving/restoring of user settings from dApp into
the separate dUserSettingProvider class. Added two properties to
dApp: UserSettingProvider? and UserSettingProviderClass?. Set the
default UserSettingProvider? to match the previous behavior of saving
user settings to <appdir>/.userSettings.ini.

This is step 1 of a project I've been wanting to do:

1) save settings in xml instead of ini
2) put the file not in the app dir, but in the user's home dir, like

/home/pmcnett/.dabo/appRecipes-userSettings.xml

This commit sets the stage for the framework user to plug in their
own machinery, or for there to be multiple Dabo-provided options in
the future.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/dabo/dApp.py

    r1155 r1175  
    4343from dLocalize import _ 
    4444from dabo.common.SimpleCrypt import SimpleCrypt 
     45import dUserSettingProvider 
    4546 
    4647 
     
    194195        The return value would be ["pkm", "egl"] 
    195196        """ 
    196         configFileName = os.path.join(self.HomeDirectory, ".userSettings.ini") 
    197  
    198         cp = ConfigParser.ConfigParser() 
    199         cp.read(configFileName) 
    200  
    201         spec = spec.lower() 
    202          
    203         try: 
    204             items = cp.items("UserSettings") 
    205         except ConfigParser.NoSectionError: 
    206             items = [] 
    207          
    208         ret = []     
    209         for item in items: 
    210             wholekey = item[0].lower() 
    211             if wholekey[:len(spec)] == spec: 
    212                 key = wholekey[len(spec):].split(".")[0] 
    213                 if ret.count(key) == 0: 
    214                     ret.append(key) 
    215         return ret 
    216          
     197        if self.UserSettingProvider: 
     198            return self.UserSettingProvider.getUserSettingKeys(spec) 
     199        return None 
     200 
     201 
    217202    def getUserSetting(self, item, user="*", system="*"): 
    218203        """ Return the value of the user settings table that  
     
    233218 
    234219        """ 
    235         configFileName = os.path.join(self.HomeDirectory, ".userSettings.ini") 
    236  
    237         cp = ConfigParser.ConfigParser() 
    238         cp.read(configFileName) 
    239  
    240         try: 
    241             valueType = cp.get("UserSettingsValueTypes", item) 
    242         except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): 
    243             valueType = "C" 
    244  
    245         try: 
    246             if valueType == "I": 
    247                 value = cp.getint("UserSettings", item) 
    248             elif valueType == "N": 
    249                 value = cp.getfloat("UserSettings", item) 
    250             elif valueType == "L": 
    251                 value = cp.getboolean("UserSettings", item) 
    252             else: 
    253                 value = cp.get("UserSettings", item) 
    254         except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): 
    255             value = None 
    256  
    257         return value 
     220        if self.UserSettingProvider: 
     221            return self.UserSettingProvider.getUserSetting(item, user, system) 
     222        return None 
    258223 
    259224 
     
    261226        """Persist a value to the user settings file. 
    262227        """ 
    263         # For now, save this info in a plain ini file. Eventually, I'd like 
    264         # to see this get saved in a persistent dabosettings db table. 
    265         configFileName = os.path.join(self.HomeDirectory, ".userSettings.ini") 
    266  
    267         cp = ConfigParser.ConfigParser() 
    268         cp.read(configFileName) 
    269  
    270         if isinstance(value, basestring): 
    271             valueType = "C" 
    272         elif isinstance(value, bool): 
    273             valueType = "L" 
    274         elif isinstance(value, float): 
    275             valueType = "N" 
    276         elif isinstance(value, (int, long)): 
    277             valueType = "I" 
    278         else: 
    279             valueType = "?" 
    280              
    281         if not cp.has_section("UserSettings"): 
    282             cp.add_section("UserSettings") 
    283         cp.set("UserSettings", item, str(value)) 
    284  
    285         if not cp.has_section("UserSettingsValueTypes"): 
    286             cp.add_section("UserSettingsValueTypes") 
    287         cp.set("UserSettingsValueTypes", item, valueType) 
    288  
    289         configFile = open(configFileName, "w") 
    290         cp.write(configFile) 
    291         configFile.close() 
     228        if self.UserSettingProvider: 
     229            self.UserSettingProvider.setUserSetting(item, value) 
    292230         
    293231         
     
    508446            raise RuntimeError, _("The UI cannot be reset once assigned.") 
    509447 
     448     
     449    def _getUserSettingProvider(self): 
     450        try: 
     451            v = self._userSettingProvider 
     452        except AttributeError: 
     453            if self.UserSettingProviderClass is not None: 
     454                v = self._userSettingProvider = self.UserSettingProviderClass() 
     455            else: 
     456                v = self._userSettingProvider = None 
     457        return v 
     458 
     459    def _setUserSettingProvider(self, val): 
     460        self._userSettingProvider = val 
     461 
     462 
     463    def _getUserSettingProviderClass(self): 
     464        try: 
     465            v = self._userSettingProviderClass 
     466        except AttributeError: 
     467            v = self._userSettingProviderClass = dUserSettingProvider.dUserSettingProvider 
     468        return v 
     469 
     470    def _setUserSettingProviderClass(self, val): 
     471        self._userSettingProviderClass = val 
     472 
     473 
    510474    def _getPlatform(self): 
    511475        try: 
     
    569533            _("""Specifies the user interface to load, or None. Once set,  
    570534            it cannot be reassigned.  (str)""") ) 
    571      
     535 
     536    UserSettingProvider = property(_getUserSettingProvider, _setUserSettingProvider, 
     537            _("""Specifies the reference to the object providing user preference persistence. 
     538             
     539            The default UserSettingProvider will save user preferences inside the .dabo 
     540            directory inside the user's home directory.""")) 
     541 
     542    UserSettingProviderClass = property(_getUserSettingProviderClass, 
     543            _setUserSettingProviderClass, 
     544            _("""Specifies the class to use for user preference persistence. 
     545             
     546            The default UserSettingProviderClass will save user preferences inside the .dabo 
     547            directory inside the user's home directory, and will be instantiated by Dabo 
     548            automatically.""")) 
     549 
    572550    SecurityManager = property(_getSecurityManager, _setSecurityManager, None,  
    573551            _("""Specifies the Security Manager, if any. You must subclass  
  • trunk/dabo/dReportWriter.py

    • Property svn:eol-style set to native
  • trunk/dabo/settings.py

    • Property svn:eol-style set to native