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