Skip to content
Snippets Groups Projects
optparser.py 2.33 KiB
Newer Older
Vincent Hanquez's avatar
Vincent Hanquez committed
#!/usr/bin/env python
##	common/optparser.py
##
## Gajim Team:
## 	- Yann Le Boulanger <asterix@crans.org>
## 	- Vincent Hanquez <tab@tuxfamily.org>
##
##	Copyright (C) 2003 Gajim Team
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; version 2 only.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##

import ConfigParser, logging, os, string
Vincent Hanquez's avatar
Vincent Hanquez committed

log = logging.getLogger('common.options')

Yann Leboulanger's avatar
Yann Leboulanger committed
class OptionsParser(ConfigParser.ConfigParser):
Vincent Hanquez's avatar
Vincent Hanquez committed
	def __init__(self, fname):
Yann Leboulanger's avatar
Yann Leboulanger committed
		ConfigParser.ConfigParser.__init__(self)
		self.__fname = os.path.expanduser(fname)
		self.tab = {}
Vincent Hanquez's avatar
Vincent Hanquez committed
	# END __init__

	def parseCfgFile(self):
		try:
			self.__fd = open(self.__fname)
		except:
			print 'error cannot open file %s\n' % (self.__fname);
			return
    
Yann Leboulanger's avatar
Yann Leboulanger committed
		self.readfp(self.__fd)
		self.__sections = self.sections()
Vincent Hanquez's avatar
Vincent Hanquez committed

		for section in self.__sections:
			self.tab[section] = {}
Yann Leboulanger's avatar
Yann Leboulanger committed
			for option in self.options(section):
				value = self.get(section, option, 1)
				#convert to int options than can be
				try:
					i = string.atoi(value)
				except ValueError:
					self.tab[section][option] = value
				else:
					self.tab[section][option] = i

#				setattr(self, str(section) + '_' + \
#					str(option), value)
Vincent Hanquez's avatar
Vincent Hanquez committed
	# END parseCfgFile

	def __str__(self):
		return "OptionsParser"
	# END __str__

	def __getattr__(self, attr):
		if attr.startswith('__') and attr in self.__dict__.keys():
			return self.__dict__[attr]
		elif self.tab.has_key(attr):
			return self.tab[attr]
Vincent Hanquez's avatar
Vincent Hanquez committed
		else:
#			for key in self.__dict__.keys():
#				if key == attr:
#					return self.__dict__[attr]
Vincent Hanquez's avatar
Vincent Hanquez committed
			return None
	# END __getattr__

	def writeCfgFile(self):
		#Remove all sections
		for s in self.sections():
			self.remove_section(s)
		#recreate sections
		for s in self.tab.keys():
			self.add_section(s)
			for o in self.tab[s].keys():
				self.set(s, o, self.tab[s][o])
Vincent Hanquez's avatar
Vincent Hanquez committed
		try:
Yann Leboulanger's avatar
Yann Leboulanger committed
			self.write(open(self.__fname, 'w'))
Vincent Hanquez's avatar
Vincent Hanquez committed
		except:
			log.debug("Can't write config %s" % self.__fname)
			return 0
		return 1
	# END writeCfgFile

	def stop(self):
		return self.writeCfgFile()
	# END stop
# END OptionsParser