iro/config.py
author Sandro Knauß <knauss@netzguerilla.net>
Wed, 22 Feb 2012 03:48:10 +0100
branchdevel
changeset 179 af65fcbd59d5
parent 147 e96e50ae6352
child 184 6b0ff82dff81
permissions -rw-r--r--
start with implementing iro.config
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
147
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
from ConfigParser import ConfigParser
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
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
class Config(ConfigParser):
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
    def __init__(self):
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
        ConfigParser.__init__(self)
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
        self.reloadList=[]
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    12
179
af65fcbd59d5 start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 147
diff changeset
    13
    def read(self,files):
af65fcbd59d5 start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 147
diff changeset
    14
        from offer import providers
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
af65fcbd59d5 start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 147
diff changeset
    19
            else:
af65fcbd59d5 start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 147
diff changeset
    20
                opts=providers[self.get(s,'typ')].options
af65fcbd59d5 start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 147
diff changeset
    21
           
af65fcbd59d5 start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 147
diff changeset
    22
            for o in opts:
af65fcbd59d5 start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 147
diff changeset
    23
                try:
af65fcbd59d5 start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 147
diff changeset
    24
                    opts[o].validate(self.get(s,o),o)
af65fcbd59d5 start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 147
diff changeset
    25
                except ValidateException:
af65fcbd59d5 start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 147
diff changeset
    26
                    if opts[o].must:
af65fcbd59d5 start with implementing iro.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 147
diff changeset
    27
                        raise
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
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
            f()
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
    def registerReload(self, func):
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    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
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    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
        }