gajim-plural/src/common/optparser.py

108 lines
2.6 KiB
Python
Raw Normal View History

2003-10-22 20:45:13 +02:00
##
## Gajim Team:
## - Yann Le Boulanger <asterix@lagaule.org>
## - Vincent Hanquez <tab@snarc.org>
## - Nikos Kouremenos <kourem@gmail.com>
2003-10-22 20:45:13 +02:00
##
## Copyright (C) 2003-2005 Gajim Team
2003-10-22 20:45:13 +02:00
##
## 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 os
from common import gajim
from common import i18n
_ = i18n._
2003-10-22 20:45:13 +02:00
class OptionsParser:
def __init__(self, filename):
self.__filename = filename
2003-10-22 20:45:13 +02:00
def read_line(self, line):
index = line.find(' = ')
var_str = line[0:index]
value_str = line[index + 3:-1]
i_start = var_str.find('.')
i_end = var_str.rfind('.')
if i_start == -1:
gajim.config.set(var_str, value_str)
else:
optname = var_str[0:i_start]
key = var_str[i_start + 1:i_end]
subname = var_str[i_end + 1:]
gajim.config.add_per(optname, key)
gajim.config.set_per(optname, key, subname, value_str)
def read(self):
2003-10-22 20:45:13 +02:00
try:
fd = open(self.__filename)
2003-10-22 20:45:13 +02:00
except:
if os.path.exists(self.__filename):
print _('error: cannot open %s for reading\n') % (self.__filename)
2003-10-22 20:45:13 +02:00
return
for line in fd.readlines():
self.read_line(line)
fd.close()
def write_line(self, fd, opt, parents, value):
s = ''
if parents:
if len(parents) == 1:
return
for p in parents:
s += p + '.'
if value == None:
2005-04-17 21:43:28 +02:00
return
s += opt
fd.write(s + " = " + str(value[1]) + "\n")
def write(self):
(base_dir, filename) = os.path.split(self.__filename)
self.__tempfile = os.path.join(base_dir, '.'+filename)
2003-10-22 20:45:13 +02:00
try:
fd = open(self.__tempfile, 'w')
2003-10-22 20:45:13 +02:00
except:
err_str = _('Unable to write file in %s\n') % (base_dir)
print err_str
return err_str
try:
gajim.config.foreach(self.write_line, fd)
except IOError, e:
print e, dir(e), e.errno
if e.errno == 28:
err_str = _('No space left on device.')
else:
err_str = e
print err_str
fd.close()
return err_str
fd.close()
2005-08-02 22:33:44 +02:00
if os.path.exists(self.__filename):
try:
os.remove(self.__filename)
except:
pass
try:
os.rename(self.__tempfile, self.__filename)
2005-08-02 22:33:44 +02:00
except Exception, e:
err_str = _('Unable to open %s for writing.\n') % (self.__filename)
# write the exception in case the bug continue to exists on
# windows
# TODO remove the following 2 lines
from sys import stderr
stderr.write(err_str + str(e) + '\n')
return err_str
return None