Ignore:
Timestamp:
03/09/12 19:00:30 (12 years ago)
Author:
István Váradi <ivaradi@…>
Branch:
default
hg-Phase:
(<MercurialRepository 1 'hg:/home/ivaradi/mlx/hg' '/'>, 'public')
Message:

Added support to load and save the configuration

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/mlx/config.py

    r36 r40  
    11# Configuration and related stuff
     2
     3#-------------------------------------------------------------------------------
     4
     5import os
     6import ConfigParser
     7
     8#-------------------------------------------------------------------------------
     9
     10configPath = os.path.join(os.path.expanduser("~"),
     11                          "mlx.config" if os.name=="nt" else ".mlxrc")
    212
    313#-------------------------------------------------------------------------------
     
    515class Config(object):
    616    """Our configuration."""
     17    DEFAULT_UPDATE_URL = "http://mlx.varadiistvan.hu/update"
     18   
    719    def __init__(self):
    820        """Construct the configuration with default values."""
    9         self.autoUpdate = True
    10        
    11         self.updateURL = \
    12             "http://mlx.varadiistvan.hu/update"
     21
     22        self._autoUpdate = True       
     23        self._updateURL = Config.DEFAULT_UPDATE_URL
     24
     25        self._modified = False
     26
     27    @property
     28    def autoUpdate(self):
     29        """Get if an automatic update is needed."""
     30        return self._autoUpdate
     31
     32    @autoUpdate.setter
     33    def autoUpdate(self, autoUpdate):
     34        """Set if an automatic update is needed."""
     35        if autoUpdate!=self._autoUpdate:
     36            self._autoUpdate = autoUpdate
     37            self._modified = True
     38
     39    @property
     40    def updateURL(self):
     41        """Get the update URL."""
     42        return self._updateURL
     43
     44    @updateURL.setter
     45    def updateURL(self, updateURL):
     46        """Set the update URL."""
     47        if updateURL!=self._updateURL:
     48            self._updateURL = updateURL
     49            self._modified = True
     50
     51    def load(self):
     52        """Load the configuration from its default location."""
     53        config = ConfigParser.RawConfigParser()
     54        config.read(configPath)
     55
     56        self._autoUpdate = self._getBoolean(config, "update", "auto", True)
     57        self._updateURL = self._get(config, "update", "url",
     58                                    Config.DEFAULT_UPDATE_URL)
     59        self._modified = False
     60
     61    def save(self):
     62        """Save the configuration file if it has been modified."""
     63        if not self._modified:
     64            return
     65
     66        config = ConfigParser.RawConfigParser()
     67
     68        config.add_section("update")
     69        config.set("update", "auto", self._autoUpdate)
     70        config.set("update", "url", self._updateURL)
     71
     72        try:
     73            with open(configPath, "wt") as f:
     74                config.write(f)
     75            self._modified = False
     76        except Exception, e:
     77            print >> sys.stderr("Failed to update config: " + str(e))
     78
     79    def _getBoolean(self, config, section, option, default):
     80        """Get the given option as a boolean, if found in the given config,
     81        otherwise the default."""
     82        return config.getboolean(section, option) \
     83               if config.has_option(section, option) \
     84               else default
     85   
     86    def _get(self, config, section, option, default):
     87        """Get the given option as a string, if found in the given config,
     88        otherwise the default."""
     89        return config.get(section, option) \
     90               if config.has_option(section, option) \
     91               else default
    1392
    1493#-------------------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.