[Idle-dev] CVS: idle configHandler.py,1.16,1.17

Stephen M. Gava elguavas@users.sourceforge.net
Thu, 31 Jan 2002 19:02:40 -0800


Update of /cvsroot/idlefork/idle
In directory usw-pr-cvs1:/tmp/cvs-serv16137

Modified Files:
	configHandler.py 
Log Message:
improve user config dir handling


Index: configHandler.py
===================================================================
RCS file: /cvsroot/idlefork/idle/configHandler.py,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -r1.16 -r1.17
*** configHandler.py	2002/02/01 01:33:36	1.16
--- configHandler.py	2002/02/01 03:02:37	1.17
***************
*** 153,177 ****
          #build idle install path
          if __name__ != '__main__': # we were imported
!             idledir=os.path.dirname(__file__)
          else: # we were exec'ed (for testing only)
!             idledir=os.path.abspath(sys.path[0])
!         #print idledir
!         try: #build user home path
!             userdir = os.environ['HOME'] #real home directory
!         except KeyError:
!             userdir = os.getcwd() #hack for os'es without real homedirs
!         userdir=os.path.join(userdir,'.idlerc')
!         #print userdir
!         if not os.path.exists(userdir):
!             os.mkdir(userdir)
          configTypes=('main','extensions','highlight','keys')
          defCfgFiles={}
          usrCfgFiles={}
          for cfgType in configTypes: #build config file names
!             defCfgFiles[cfgType]=os.path.join(idledir,'config-'+cfgType+'.def')                    
!             usrCfgFiles[cfgType]=os.path.join(userdir,'config-'+cfgType+'.cfg')                    
          for cfgType in configTypes: #create config parsers
              self.defaultCfg[cfgType]=IdleConfParser(defCfgFiles[cfgType])
              self.userCfg[cfgType]=IdleUserConfParser(usrCfgFiles[cfgType])
      
      def GetOption(self, configType, section, option, default=None, type=None):
--- 153,195 ----
          #build idle install path
          if __name__ != '__main__': # we were imported
!             idleDir=os.path.dirname(__file__)
          else: # we were exec'ed (for testing only)
!             idleDir=os.path.abspath(sys.path[0])
!         userDir=self.GetUserCfgDir()
          configTypes=('main','extensions','highlight','keys')
          defCfgFiles={}
          usrCfgFiles={}
          for cfgType in configTypes: #build config file names
!             defCfgFiles[cfgType]=os.path.join(idleDir,'config-'+cfgType+'.def')                    
!             usrCfgFiles[cfgType]=os.path.join(userDir,'config-'+cfgType+'.cfg')                    
          for cfgType in configTypes: #create config parsers
              self.defaultCfg[cfgType]=IdleConfParser(defCfgFiles[cfgType])
              self.userCfg[cfgType]=IdleUserConfParser(usrCfgFiles[cfgType])
+     
+     def GetUserCfgDir(self):
+         """
+         Creates (if required) and returns a filesystem directory for storing 
+         user config files.
+         """
+         cfgDir='.idlerc'
+         userDir=os.path.expanduser('~')
+         if userDir != '~': #'HOME' exists as a key in os.environ
+             if not os.path.exists(userDir):
+                 warn=('\n Warning: HOME environment variable points to\n '+
+                         userDir+'\n but the path does not exist.\n')
+                 sys.stderr.write(warn)
+                 userDir='~'
+         if userDir=='~': #we still don't have a home directory
+             #traditionally idle has defaulted to os.getcwd(), is this adeqate?
+             userDir = os.getcwd() #hack for no real homedir
+         userDir=os.path.join(userDir,cfgDir)    
+         if not os.path.exists(userDir):
+             try: #make the config dir if it doesn't exist yet 
+                 os.mkdir(userDir)
+             except IOError:
+                 warn=('\n Warning: unable to create user config directory\n '+
+                         userDir+'\n')
+                 sys.stderr.write(warn)
+         return userDir
      
      def GetOption(self, configType, section, option, default=None, type=None):