| author | Sandro Knauß <knauss@netzguerilla.net> |
| Fri, 30 Mar 2012 15:55:44 +0200 | |
| branch | devel |
| changeset 269 | 0d134b173cb1 |
| parent 267 | ef2df3f23cb1 |
| child 282 | 50cc13814bfb |
| permissions | -rw-r--r-- |
|
228
944edbe51145
setup.py updated - using iro.py
Sandro Knauß <knauss@netzguerilla.net>
parents:
224
diff
changeset
|
1 |
from twisted.python import log |
|
944edbe51145
setup.py updated - using iro.py
Sandro Knauß <knauss@netzguerilla.net>
parents:
224
diff
changeset
|
2 |
|
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
3 |
from ConfigParser import ConfigParser |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
4 |
import signal |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
5 |
from functools import partial |
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
6 |
from collections import OrderedDict |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
7 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
8 |
from validate import vInteger |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
9 |
from error import NeededOption |
| 147 | 10 |
|
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
11 |
class MyConfigParser(ConfigParser): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
12 |
"""Configparser that also validate configfile. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
13 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
14 |
It is possile to restiger function, that are called, when config file is reloaded |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
15 |
""" |
| 147 | 16 |
def __init__(self): |
17 |
ConfigParser.__init__(self) |
|
18 |
self.reloadList=[] |
|
19 |
||
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
20 |
def read(self,files): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
21 |
"""reads an validate configuration file""" |
|
184
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
22 |
from offer import getProvider |
|
220
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
23 |
r = ConfigParser.read(self, files) |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
24 |
for s in self.sections(): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
25 |
if s == "main": |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
26 |
main.validate(self.items(s)) |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
27 |
else: |
|
184
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
28 |
getProvider("tmp", self.get(s,'typ'), self.items(s)) |
|
220
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
29 |
return r |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
30 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
31 |
def reload_(self): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
32 |
"""run all registered function.""" |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
33 |
for f in self.reloadList: |
| 147 | 34 |
f() |
35 |
||
36 |
def registerReload(self, func): |
|
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
37 |
"""adds **func** to reloadList. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
38 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
39 |
func ist called with no arguments. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
40 |
""" |
| 147 | 41 |
self.reloadList.append(func) |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
42 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
43 |
class Option(): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
44 |
"""One Option in the configuration file""" |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
45 |
def __init__(self, validate, long="", help="", must=False, default=None): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
46 |
""" |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
47 |
:param func validate: a validate function, it has to return the value, if valid and raise an error if not. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
48 |
:param string long: long description |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
49 |
:param string help: the help text |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
50 |
:param boolean must: Is this option nessasary |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
51 |
:param default: default value |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
52 |
""" |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
53 |
self.validate = validate |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
54 |
self.long=long |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
55 |
self.help = help |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
56 |
self.must = must |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
57 |
self.default = default |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
58 |
|
|
220
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
59 |
class Config: |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
60 |
"""Base class for all classes, that uses option from configfile. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
61 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
62 |
If one option is valid, the attribute is created with the value of the validate function. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
63 |
""" |
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
64 |
def __init__(self, name, options=None): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
65 |
""" |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
66 |
:param string name: section name. |
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
67 |
:param `collections.OrderedDict` options: Orderd Dict of the configuration options (see :attr:`options`) |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
68 |
""" |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
69 |
self.name = name |
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
70 |
|
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
71 |
self.options = options |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
72 |
"""Options :class:`collections.OrderedDict` for Options used in configuration file (see :class:`iro.config.Option`). Ordering of configuration fields are done by :attr:`order`. |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
73 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
74 |
Sample:: |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
75 |
|
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
76 |
OrderedDict([ |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
77 |
("dburl",Option(lambda x,y:x,long="Connection URL to database",must=True)), |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
78 |
("port",Option(partial(vInteger,minv=0),long="Port under that twisted is running",must=True)), |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
79 |
]) |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
80 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
81 |
A child class typically use update to add more options. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
82 |
""" |
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
83 |
|
|
224
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
84 |
self._init = True |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
85 |
"""indecates, if the config is loaded with config values.""" |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
86 |
|
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
87 |
|
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
88 |
def _read(self, cfg, write=False): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
89 |
"""Test or set configuration options. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
90 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
91 |
:param dict cfg: The Configuration dict. Normally you use ``configParser.items("section")``. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
92 |
:param boolean write: test or set the option to actual object. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
93 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
94 |
:raises: :exc:`iro.error.NeededOption` |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
95 |
""" |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
96 |
c = dict(cfg) |
|
224
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
97 |
|
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
98 |
for o in self.options: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
99 |
option = self.options[o] |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
100 |
try: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
101 |
value = option.validate(c[o],o) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
102 |
if write: |
|
224
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
103 |
self._init = False |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
104 |
setattr(self,o,value) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
105 |
except KeyError: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
106 |
if option.must: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
107 |
raise NeededOption(self.name, o) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
108 |
elif write and option.default is not None: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
109 |
setattr(self, o, option.default) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
110 |
|
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
111 |
def validate(self, cfg): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
112 |
"""Validate configuration. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
113 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
114 |
:param dict cfg: The Configuration dict. Normally you use ``configParser.items("section")``. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
115 |
""" |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
116 |
self._read(cfg, False) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
117 |
|
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
118 |
def load(self, cfg): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
119 |
"""Loads configuration into object. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
120 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
121 |
:param dict cfg: The Configuration dict. Normally you use ``configParser.items("section")``. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
122 |
""" |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
123 |
self._read(cfg, True) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
124 |
|
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
125 |
def same(self, other): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
126 |
"""returns ``True``, if the options of other object are the same""" |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
127 |
for o in self.options: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
128 |
if getattr(self,o) != getattr(other,o): |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
129 |
return False |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
130 |
else: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
131 |
return True |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
132 |
|
|
220
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
133 |
def sampleConf(self): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
134 |
"""returns a sample Configuration section. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
135 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
136 |
This function also adds the long help text to the sample section. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
137 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
138 |
:return: a list of lines |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
139 |
""" |
|
220
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
140 |
ret=[] |
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
141 |
for o in self.options: |
|
220
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
142 |
opt=self.options[o] |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
143 |
if opt.long: |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
144 |
ret.append("# "+opt.long) |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
145 |
if opt.must: |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
146 |
s= "%s = "%o |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
147 |
if opt.default is not None: |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
148 |
s += str(opt.default) |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
149 |
ret.append(s) |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
150 |
else: |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
151 |
ret.append("# %s = %s"%(o,opt.default)) |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
152 |
ret.append("") |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
153 |
|
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
154 |
return ["[%s]"%self.name,]+ret |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
155 |
|
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
156 |
def readConfig(): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
157 |
"""Read the configuration and update all registered object (see :meth:`MyConfigParser.reload_`).""" |
|
228
944edbe51145
setup.py updated - using iro.py
Sandro Knauß <knauss@netzguerilla.net>
parents:
224
diff
changeset
|
158 |
log.msg("Reading configs.") |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
159 |
configParser.read(confFiles) |
|
224
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
160 |
configParser.reload_() |
|
188
4d6130d91e56
test for config.same
Sandro Knauß <knauss@netzguerilla.net>
parents:
187
diff
changeset
|
161 |
if main._init: |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
162 |
main.load(configParser.items("main")) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
163 |
else: |
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
164 |
m = Config("main", main_options) |
|
188
4d6130d91e56
test for config.same
Sandro Knauß <knauss@netzguerilla.net>
parents:
187
diff
changeset
|
165 |
m.load(configParser.items("main")) |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
166 |
if not main.same(m): |
|
188
4d6130d91e56
test for config.same
Sandro Knauß <knauss@netzguerilla.net>
parents:
187
diff
changeset
|
167 |
raise Exception("Main options can't be reloaded, please restart your Application.") |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
168 |
|
|
224
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
169 |
def init(): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
170 |
"""Load the main options.""" |
|
224
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
171 |
configParser.read(confFiles) |
|
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
172 |
main.load(configParser.items("main")) |
|
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
173 |
|
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
174 |
def registerSignal(): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
175 |
'''register readConfig to SIGUSR2''' |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
176 |
def rC(signal, frame): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
177 |
readConfig() |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
178 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
179 |
signal.signal(signal.SIGUSR2,rC) |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
180 |
|
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
181 |
configParser = MyConfigParser() |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
182 |
"""configParser to get configuration.""" |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
183 |
|
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
184 |
confFiles=["iro.conf", "~/iro.conf","/etc/iro/iro.conf"] |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
185 |
"""Configfile list """ |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
186 |
|
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
187 |
main_options = OrderedDict([ |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
188 |
("dburl",Option(lambda x,y:x,long="Connection URL to database",must=True)), |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
189 |
("port",Option(partial(vInteger,minv=0),long="Port under that twisted is running",must=True)), |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
190 |
]) |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
191 |
|
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
192 |
"options for main section" |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
193 |
|
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
194 |
main = Config("main", main_options) |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
195 |
"""Main config options""" |