| author | Sandro Knauß <knauss@netzguerilla.net> |
| Thu, 23 Feb 2012 16:58:58 +0100 | |
| branch | devel |
| changeset 184 | 6b0ff82dff81 |
| parent 179 | af65fcbd59d5 |
| child 186 | b381eaa774ab |
| permissions | -rw-r--r-- |
|
184
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
1 |
from ConfigParser import ConfigParser, NoOptionError |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
2 |
import signal |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
3 |
from functools import partial |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
4 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
5 |
from validate import vInteger |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
6 |
from error import ValidateException |
| 147 | 7 |
|
8 |
class Config(ConfigParser): |
|
9 |
def __init__(self): |
|
10 |
ConfigParser.__init__(self) |
|
11 |
self.reloadList=[] |
|
12 |
||
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
13 |
def read(self,files): |
|
184
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
14 |
from offer import getProvider |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
15 |
ConfigParser.read(self, files) |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
16 |
for s in self.sections(): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
17 |
if s == "main": |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
18 |
opts=main |
|
184
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
19 |
for o in opts: |
|
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
20 |
try: |
|
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
21 |
opts[o].validate(self.get(s,o),o) |
|
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
22 |
except (ValidateException, NoOptionError): |
|
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
23 |
if opts[o].must: |
|
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
24 |
raise |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
25 |
else: |
|
184
6b0ff82dff81
testing Must argument and Provider section
Sandro Knauß <knauss@netzguerilla.net>
parents:
179
diff
changeset
|
26 |
getProvider("tmp", self.get(s,'typ'), self.items(s)) |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
27 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
28 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
29 |
def reload_(self): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
30 |
for f in self.reloadList: |
| 147 | 31 |
f() |
32 |
||
33 |
def registerReload(self, func): |
|
34 |
self.reloadList.append(func) |
|
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
35 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
36 |
class Option(): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
37 |
def __init__(self, validate, long="", help="", must=False, default=None): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
38 |
self.validate = validate |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
39 |
self.long=long |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
40 |
self.help = help |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
41 |
self.must = must |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
42 |
self.default = default |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
43 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
44 |
def readConfig(): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
45 |
config.read(confFiles) |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
46 |
config.reload() |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
47 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
48 |
def registerSignal(): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
49 |
'''register readConfig to SIGUSR2''' |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
50 |
def rC(signal, frame): |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
51 |
readConfig() |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
52 |
|
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
53 |
signal.signal(signal.SIGUSR2,rC) |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
54 |
|
| 147 | 55 |
config=Config() |
|
179
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
56 |
confFiles=["iro.conf", "~/iro.conf","/etc/iro/iro.conf"] |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
57 |
main={"hostname":Option(lambda x,y:x,long="Hostname under that twisted is running",must=True), |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
58 |
"port":Option(partial(vInteger,minv=0),long="Port under that twisted is running",must=True), |
|
af65fcbd59d5
start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents:
147
diff
changeset
|
59 |
} |