1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
#!/usr/bin/python
# -*- coding:utf-8 -*-
#
# Copyright 2009 chickenzilla
# Copyright 2010 Le Coz Florent <louizatakk@fedoraproject.org>
#
# This file is part of Poezio.
#
# Poezio 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 3 of the License.
#
# Poezio 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.
#
# You should have received a copy of the GNU General Public License
# along with Poezio. If not, see <http://www.gnu.org/licenses/>.
"""
Defines the global config instance, used to get or set (and save) values
from/to the config file
"""
from ConfigParser import RawConfigParser, NoOptionError
from os import environ, makedirs, path
from shutil import copy2
try:
import argparse
HAVE_ARGPARSE = True
except ImportError:
HAVE_ARGPARSE = False
class Config(RawConfigParser):
"""
load/save the config to a file
"""
def __init__(self, file_name):
self.defsection = "Poezio"
self.file_name = file_name
RawConfigParser.__init__(self, None)
RawConfigParser.read(self, file_name)
def get(self, option, default):
"""
get a value from the config but return
a default value if it is not found
The type of default defines the type
returned
"""
try:
if type(default) == int:
res = self.getint(option)
elif type(default) == float:
res = self.getfloat(option)
elif type(default) == bool:
res = self.getboolean(option)
else:
res = self.getstr(option)
except NoOptionError:
return default
return res
def __get(self, option):
"""
facility for RawConfigParser.get
"""
return RawConfigParser.get(self, self.defsection, option)
def getstr(self, option):
"""
get a value and returns it as a string
"""
return self.__get(option)
def getint(self, option):
"""
get a value and returns it as an int
"""
try:
return int(self.__get(option))
except ValueError:
return -1
def getfloat(self, option):
"""
get a value and returns it as a float
"""
return float(self.__get(option))
def getboolean(self, option):
"""
get a value and returns it as a boolean
"""
return RawConfigParser.getboolean(self, self.defsection, option)
def save(self):
"""
save the configuration in the file
"""
fdes = open(self.file_name, "w")
RawConfigParser.write(self, fdes)
fdes.close()
def set_and_save(self, option, value):
"""
set the value in the configuration then save it
to the file
"""
RawConfigParser.set(self, self.defsection, option, value)
self.save()
import argparse
# creates the configuration directory if it doesn't exist
# and copy the default config in it
CONFIG_HOME = environ.get("XDG_CONFIG_HOME")
if not CONFIG_HOME:
CONFIG_HOME = environ.get('HOME')+'/.config'
CONFIG_PATH = CONFIG_HOME + '/poezio/'
try:
makedirs(CONFIG_PATH)
except OSError:
pass
if not path.isfile(CONFIG_PATH+'poezio.cfg'):
copy2('../data/default_config.cfg', CONFIG_PATH+'poezio.cfg')
if HAVE_ARGPARSE:
parser = argparse.ArgumentParser(prog="poezio", description='An XMPP ncurses client.')
parser.add_argument('-f', '--file', default=CONFIG_PATH+'poezio.cfg', help='the config file you want to use', metavar="FILE")
args = parser.parse_args()
filename = args.file
else:
filename = CONFIG_PATH+'poezio.cfg'
config = Config(filename)
|