iro/config.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 30 Mar 2012 15:55:44 +0200
branchdevel
changeset 269 0d134b173cb1
parent 267 ef2df3f23cb1
child 282 50cc13814bfb
permissions -rw-r--r--
iro.config: using OrderedDict instead of Dict + List for Options.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    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
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
    def __init__(self):
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
        ConfigParser.__init__(self)
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
        self.reloadList=[]
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    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
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
            f()
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    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
e96e50ae6352 adding config module
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    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"""