| author | Sandro Knauß <bugs@sandroknauss.de> |
| Tue, 15 Apr 2025 01:22:19 +0200 | |
| changeset 316 | 63c681b8e92c |
| parent 312 | 42fd5075a5d1 |
| permissions | -rw-r--r-- |
|
294
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
1 |
# Copyright (c) 2012 netzguerilla.net <iro@netzguerilla.net> |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
2 |
# |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
3 |
# This file is part of Iro. |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
4 |
# |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
5 |
# Permission is hereby granted, free of charge, to any person obtaining a copy of |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
6 |
# this software and associated documentation files (the "Software"), to deal in |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
7 |
# the Software without restriction, including without limitation the rights to use, |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
8 |
# copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
9 |
# #Software, and to permit persons to whom the Software is furnished to do so, |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
10 |
# subject to the following conditions: |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
11 |
# |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
12 |
# The above copyright notice and this permission notice shall be included in |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
13 |
# all copies or substantial portions of the Software. |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
14 |
# |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
15 |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
16 |
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
17 |
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
18 |
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
19 |
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
20 |
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
0e75bd39767d
adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents:
287
diff
changeset
|
21 |
|
|
228
944edbe51145
setup.py updated - using iro.py
Sandro Knauß <knauss@netzguerilla.net>
parents:
224
diff
changeset
|
22 |
from twisted.python import log |
|
944edbe51145
setup.py updated - using iro.py
Sandro Knauß <knauss@netzguerilla.net>
parents:
224
diff
changeset
|
23 |
|
| 306 | 24 |
import os.path |
| 312 | 25 |
from configparser import ConfigParser |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
26 |
import signal |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
27 |
from functools import partial |
|
282
50cc13814bfb
make iro working with python v2.6
Sandro Knauß <knauss@netzguerilla.net>
parents:
269
diff
changeset
|
28 |
try: |
|
50cc13814bfb
make iro working with python v2.6
Sandro Knauß <knauss@netzguerilla.net>
parents:
269
diff
changeset
|
29 |
from collections import OrderedDict |
|
50cc13814bfb
make iro working with python v2.6
Sandro Knauß <knauss@netzguerilla.net>
parents:
269
diff
changeset
|
30 |
except ImportError: |
|
50cc13814bfb
make iro working with python v2.6
Sandro Knauß <knauss@netzguerilla.net>
parents:
269
diff
changeset
|
31 |
from ordereddict import OrderedDict |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
32 |
|
| 312 | 33 |
from .validate import vInteger |
34 |
from .error import NeededOption |
|
| 147 | 35 |
|
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
36 |
class MyConfigParser(ConfigParser): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
37 |
"""Configparser that also validate configfile. |
|
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 |
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
|
40 |
""" |
| 147 | 41 |
def __init__(self): |
42 |
ConfigParser.__init__(self) |
|
43 |
self.reloadList=[] |
|
44 |
||
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
45 |
def read(self,files): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
46 |
"""reads an validate configuration file""" |
|
184
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
47 |
from offer import getProvider |
|
220
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
48 |
r = ConfigParser.read(self, files) |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
49 |
for s in self.sections(): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
50 |
if s == "main": |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
51 |
main.validate(self.items(s)) |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
52 |
else: |
|
184
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
53 |
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
|
54 |
return r |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
55 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
56 |
def reload_(self): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
57 |
"""run all registered function.""" |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
58 |
for f in self.reloadList: |
| 147 | 59 |
f() |
60 |
||
61 |
def registerReload(self, func): |
|
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
62 |
"""adds **func** to reloadList. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
63 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
64 |
func ist called with no arguments. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
65 |
""" |
| 147 | 66 |
self.reloadList.append(func) |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
67 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
68 |
class Option(): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
69 |
"""One Option in the configuration file""" |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
70 |
def __init__(self, validate, long="", help="", must=False, default=None): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
71 |
""" |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
72 |
: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
|
73 |
:param string long: long description |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
74 |
:param string help: the help text |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
75 |
:param boolean must: Is this option nessasary |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
76 |
:param default: default value |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
77 |
""" |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
78 |
self.validate = validate |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
79 |
self.long=long |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
80 |
self.help = help |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
81 |
self.must = must |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
82 |
self.default = default |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
83 |
|
|
220
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
84 |
class Config: |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
85 |
"""Base class for all classes, that uses option from configfile. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
86 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
87 |
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
|
88 |
""" |
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
89 |
def __init__(self, name, options=None): |
|
267
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 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
|
92 |
: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
|
93 |
""" |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
94 |
self.name = name |
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
95 |
|
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
96 |
self.options = options |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
97 |
"""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
|
98 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
99 |
Sample:: |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
100 |
|
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
101 |
OrderedDict([ |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
102 |
("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
|
103 |
("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
|
104 |
]) |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
105 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
106 |
A child class typically use update to add more options. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
107 |
""" |
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
108 |
|
|
224
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
109 |
self._init = True |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
110 |
"""indecates, if the config is loaded with config values.""" |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
111 |
|
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
112 |
|
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
113 |
def _read(self, cfg, write=False): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
114 |
"""Test or set configuration options. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
115 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
116 |
: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
|
117 |
:param boolean write: test or set the option to actual object. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
118 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
119 |
:raises: :exc:`iro.error.NeededOption` |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
120 |
""" |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
121 |
c = dict(cfg) |
|
224
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
122 |
|
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
123 |
for o in self.options: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
124 |
option = self.options[o] |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
125 |
try: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
126 |
value = option.validate(c[o],o) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
127 |
if write: |
|
224
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
128 |
self._init = False |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
129 |
setattr(self,o,value) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
130 |
except KeyError: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
131 |
if option.must: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
132 |
raise NeededOption(self.name, o) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
133 |
elif write and option.default is not None: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
134 |
setattr(self, o, option.default) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
135 |
|
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
136 |
def validate(self, cfg): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
137 |
"""Validate configuration. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
138 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
139 |
: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
|
140 |
""" |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
141 |
self._read(cfg, False) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
142 |
|
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
143 |
def load(self, cfg): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
144 |
"""Loads configuration into object. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
145 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
146 |
: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
|
147 |
""" |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
148 |
self._read(cfg, True) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
149 |
|
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
150 |
def same(self, other): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
151 |
"""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
|
152 |
for o in self.options: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
153 |
if getattr(self,o) != getattr(other,o): |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
154 |
return False |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
155 |
else: |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
156 |
return True |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
157 |
|
|
220
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
158 |
def sampleConf(self): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
159 |
"""returns a sample Configuration section. |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
160 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
161 |
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
|
162 |
|
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
163 |
:return: a list of lines |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
164 |
""" |
|
220
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
165 |
ret=[] |
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
166 |
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
|
167 |
opt=self.options[o] |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
168 |
if opt.long: |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
169 |
ret.append("# "+opt.long) |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
170 |
if opt.must: |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
171 |
s= "%s = "%o |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
172 |
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
|
173 |
s += str(opt.default) |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
174 |
ret.append(s) |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
175 |
else: |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
176 |
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
|
177 |
ret.append("") |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
178 |
|
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
179 |
return ["[%s]"%self.name,]+ret |
|
602720314930
adding config.Config.sampleConf for creating a sample configuration
Sandro Knauß <knauss@netzguerilla.net>
parents:
188
diff
changeset
|
180 |
|
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
181 |
def readConfig(): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
182 |
"""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
|
183 |
log.msg("Reading configs.") |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
184 |
configParser.read(confFiles) |
|
224
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
185 |
configParser.reload_() |
|
188
4d6130d91e56
test for config.same
Sandro Knauß <knauss@netzguerilla.net>
parents:
187
diff
changeset
|
186 |
if main._init: |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
187 |
main.load(configParser.items("main")) |
|
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
188 |
else: |
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
189 |
m = Config("main", main_options) |
|
188
4d6130d91e56
test for config.same
Sandro Knauß <knauss@netzguerilla.net>
parents:
187
diff
changeset
|
190 |
m.load(configParser.items("main")) |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
191 |
if not main.same(m): |
|
188
4d6130d91e56
test for config.same
Sandro Knauß <knauss@netzguerilla.net>
parents:
187
diff
changeset
|
192 |
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
|
193 |
|
|
224
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
194 |
def init(): |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
195 |
"""Load the main options.""" |
|
224
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
196 |
configParser.read(confFiles) |
|
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
197 |
main.load(configParser.items("main")) |
|
072de50834f9
adding init function that only loads main options
Sandro Knauß <knauss@netzguerilla.net>
parents:
220
diff
changeset
|
198 |
|
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
199 |
def registerSignal(): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
200 |
'''register readConfig to SIGUSR2''' |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
201 |
def rC(signal, frame): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
202 |
readConfig() |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
203 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
204 |
signal.signal(signal.SIGUSR2,rC) |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
205 |
|
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
206 |
configParser = MyConfigParser() |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
207 |
"""configParser to get configuration.""" |
|
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
208 |
|
| 306 | 209 |
confFiles=["iro.conf", os.path.expanduser("~/.iro.conf"),"/etc/iro/iro.conf"] |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
210 |
"""Configfile list """ |
|
186
b381eaa774ab
refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
184
diff
changeset
|
211 |
|
|
269
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
212 |
main_options = OrderedDict([ |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
213 |
("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
|
214 |
("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
|
215 |
]) |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
216 |
|
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
217 |
"options for main section" |
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
218 |
|
|
0d134b173cb1
iro.config: using OrderedDict instead of Dict + List for Options.
Sandro Knauß <knauss@netzguerilla.net>
parents:
267
diff
changeset
|
219 |
main = Config("main", main_options) |
|
267
ef2df3f23cb1
adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents:
228
diff
changeset
|
220 |
"""Main config options""" |