Package nMOLDYN :: Package Core :: Module Config |
[hide private]
[frames] | no frames]

# Source Code for Module nMOLDYN.Core.Config

      1  """
      2  This modules implements the procedures that handles nMOLDYN PREFERENCES.
      3
      4  Procedures:
      5      * saveConfigurationFile: saves a PREFERENCES file.
      6      * loadConfigurationFile: loads a PREFERENCES file.
      7  """
      8
      9  # The python distribution modules
     10  from ConfigParser import ConfigParser
     11  import copy
     12  import os
     13  import sys
     14
     15  # The nMOLDYN modules
     16  from nMOLDYN.Core.Error import Error
     17  from nMOLDYN.Core.Logger import LogMessage
     18  from nMOLDYN.Core.Preferences import PREFERENCES
     19
     20 -def saveConfigurationFile(cfgFilename = None, config = PREFERENCES):
     21      """Saves |config| configuration to |cfgFilename| file name.
     22
     23      @param cfgFilename: if not None, the name of the PREFERENCES file to save else the configuration file
     24          will be saved to a plat-form dependant location:
     25              -$USERPROFILE/Application Data/nMOLDYN/nMOLDYN.ini on Windows
     26              -$HOME/Library/Preferences/nMLDYN/nMOLDYN.pref on MacOS
     27              -$HOME/.nMOLDYN on Linux
     28      @type: cfgFilename: string.
     29
     30      @param config: the configuration to save. By default, the default PREFERENCES stored in
     31          nMOLDYN.Core.Preferences.nMOLDYNPreferences class.
     32      @type config: instance of a dummy class whose attributes must be the ones defined in
     33          nMOLDYN.Core.Preferences.nMOLDYNPreferences class.
     34      """
     35
     36      if cfgFilename is None:
     37
     38          try:
     39              # The Win32 config file directory.
     40              if sys.platform == 'win32':
     41                  cfgFileDir = os.path.join(os.environ['USERPROFILE'],'Application Data','nMOLDYN')
     42                  cfgFilename = os.path.abspath(os.path.join(cfgFileDir, 'nMOLDYN.ini'))
     43
     44              elif sys.platform == 'darwin':
     45                  cfgFileDir = os.path.join(os.environ['HOME'],'Library','Preferences','nMOLDYN')
     46                  cfgFilename = os.path.abspath(os.path.join(cfgFileDir, 'nMOLDYN.pref'))
     47
     48              # The POSIX config file directory.
     49              else:
     50                  cfgFileDir = os.environ['HOME']
     51                  cfgFilename = os.path.abspath(os.path.join(cfgFileDir, '.nMOLDYN'))
     52
     53          except KeyError:
     54              raise Error('Unvalid default location for the nMOLDYN configuration file.')
     55
     56          else:
     57              if not os.path.exists(cfgFileDir):
     58                  os.makedirs(cfgFileDir)
     59
     60      try:
     61          # Open a channel for the configuration file to save.
     62          configFile = open(cfgFilename,'w')
     63
     64      except IOError:
     65          raise Error('Impossible to open the file %s for writing. May be a permission problem.' % cfgFilename)
     66
     67      else:
     68          cfg = ConfigParser()
     69          cfg.add_section('nmoldyn')
     70
     71          # The config file is initialized with the default config.
     72          for key in vars(PREFERENCES):
     73              cfg.set('nmoldyn',key,getattr(PREFERENCES,key))
     74
     75          for key in vars(config):
     76              if key in vars(PREFERENCES):
     77                  cfg.set('nmoldyn',key,getattr(config,key))
     78
     79          # Write the ConfigParser object into the configuration file.
     80          cfg.write(configFile)
     81          # Close the configuration file.
     82          configFile.close()
     83
     84 -def loadConfigurationFile(cfgFilename = None, config = PREFERENCES):
     85      """Loads a configuration from |cfgFilename| file name and updates |config| PREFERENCES.
     86
     87      @param cfgFilename: if not None, the name of the PREFERENCES file to load else the configuration file
     88          will be loaded from a plat-form dependant location:
     89              -$USERPROFILE/Application Data/nMOLDYN/nMOLDYN.ini on Windows
     90              -$HOME/Library/Preferences/nMLDYN/nMOLDYN.pref on MacOS
     91              -$HOME/.nMOLDYN on Linux
     92      @type: cfgFilename: string.
     93
     94      @param config: the configuration to load. By default, the default PREFERENCES stored in
     95          nMOLDYN.Core.Preferences.nMOLDYNPreferences class.
     96      @type config: instance of a dummy class whose attributes must be the ones defined in
     97          nMOLDYN.Core.Preferences.nMOLDYNPreferences class.
     98      """
     99
    100      if cfgFilename is None:
    101          try:
    102              # The default filename of the configuration file.
    103              if sys.platform == 'win32':
    104                  cfgFilename = os.path.join(os.environ['USERPROFILE'],'Application Data','nMOLDYN','nMOLDYN.ini')
    105
    106              elif sys.platform == 'darwin':
    107                  cfgFilename = os.path.join('Library','Preferences','nMOLDYN','nMOLDYN.pref')
    108
    109              else:
    110                  cfgFilename = os.path.join(os.environ['HOME'],'.nMOLDYN')
    111
    112          except KeyError:
    113              return
    114
    115      if os.path.exists(cfgFilename):
    116          try:
    117              # a ConfigParser object that will store the configuration read from the configuration file.
    118              loadedCfg = ConfigParser()
    119              loadedCfg.read(cfgFilename)
    120
    121          except:
    122              LogMessage('warning','The file %s does not exist or is not a proper configuration file.' % cfgFilename,['file','console'])
    123
    124          else:
    125              for key, value in loadedCfg.items('nmoldyn'):
    126                  if key in vars(PREFERENCES):
    127                      setattr(config,key,value)
    128