VirtualMailManager/Config.py
author Pascal Volk <neverseen@users.sourceforge.net>
Fri, 26 Feb 2010 02:35:25 +0000
branchv0.6.x
changeset 216 0c8c053b451c
parent 215 33f727efa7c4
child 229 0fb2f12648a7
permissions -rw-r--r--
Moved VirtualMailManager/Exceptions to VirtualMailManager/errors. Renamed VMM*Exception classes to *Error. No longer add the attribute 'message' to VMMError if it doesn't exist, like in Python 2.4. It has been deprecated as of Python 2.6. Also removed the methods code() and msg(), the values are now accessible via the attributes 'code' and 'msg'.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
     1
# -*- coding: UTF-8 -*-
162
0ac9ef587769 Updated copyright notices to include the year 2010.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 138
diff changeset
     2
# Copyright (c) 2007 - 2010, Pascal Volk
0
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
     3
# See COPYING for distribution information.
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
     4
200
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
     5
"""
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
     6
    VirtualMailManager.Config
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
     7
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
     8
    VMM's configuration module for simplified configuration access.
0
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
     9
"""
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
    10
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    11
187
38b9a9859749 VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    12
from ConfigParser import \
38b9a9859749 VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    13
     Error, MissingSectionHeaderError, NoOptionError, NoSectionError, \
38b9a9859749 VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    14
     ParsingError, RawConfigParser
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
    15
from cStringIO import StringIO# TODO: move interactive stff to cli
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
    16
207
95be8f62bc0c VMM/Config: moved Config.sections() to class LazyConfig.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 206
diff changeset
    17
from VirtualMailManager import exec_ok, get_unicode, is_dir
187
38b9a9859749 VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    18
from VirtualMailManager.constants.ERROR import CONF_ERROR
216
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
    19
from VirtualMailManager.errors import ConfigError
0
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
    20
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    21
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    22
_ = lambda msg: msg
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    23
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    24
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    25
class BadOptionError(Error):
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    26
    """Raised when a option isn't in the format 'section.option'."""
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    27
    pass
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    28
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    29
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    30
class ConfigValueError(Error):
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    31
    """Raised when creating or validating of new values fails."""
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    32
    pass
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    33
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    34
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    35
class NoDefaultError(Error):
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    36
    """Raised when the requested option has no default value."""
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    37
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    38
    def __init__(self, section, option):
204
83938336c518 VMM/{,cli/}Config: fixed imports. Small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 201
diff changeset
    39
        Error.__init__(self, 'Option %r in section %r has no default value' %
83938336c518 VMM/{,cli/}Config: fixed imports. Small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 201
diff changeset
    40
                             (option, section))
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    41
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    42
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    43
class LazyConfig(RawConfigParser):
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    44
    """The **lazy** derivate of the `RawConfigParser`.
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
    45
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    46
    There are two additional getters:
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
    47
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
    48
    `pget()`
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
    49
      The polymorphic getter, which returns a option's value with the
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
    50
      appropriate type.
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
    51
    `dget()`
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
    52
      Like `LazyConfig.pget()`, but returns the option's default, from
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
    53
      `LazyConfig._cfg['sectionname']['optionname'].default`, if the
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
    54
      option is not configured in a ini-like configuration file.
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    55
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    56
    `set()` differs from `RawConfigParser`'s `set()` method. `set()`
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    57
    takes the `section` and `option` arguments combined to a single
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    58
    string in the form "section.option".
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    59
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    60
    """
204
83938336c518 VMM/{,cli/}Config: fixed imports. Small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 201
diff changeset
    61
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    62
    def __init__(self):
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    63
        RawConfigParser.__init__(self)
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    64
        self._modified = False
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    65
        # sample _cfg dict.  Create your own in your derived class.
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    66
        self._cfg = {
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    67
            'sectionname': {
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    68
                'optionname': LazyConfigOption(int, 1, self.getint),
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    69
            }
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    70
        }
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    71
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    72
    def bool_new(self, value):
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    73
        """Converts the string `value` into a `bool` and returns it.
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    74
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
    75
        | '1', 'on', 'yes' and 'true' will become `True`
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
    76
        | '0', 'off', 'no' and 'false' will become `False`
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    77
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
    78
        Throws a `ConfigValueError` for all other values, except bools.
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    79
        """
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    80
        if isinstance(value, bool):
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    81
            return value
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    82
        if value.lower() in self._boolean_states:
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    83
            return self._boolean_states[value.lower()]
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    84
        else:
204
83938336c518 VMM/{,cli/}Config: fixed imports. Small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 201
diff changeset
    85
            raise ConfigValueError(_(u"Not a boolean: '%s'") %
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    86
                                   get_unicode(value))
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
    87
206
da07dd944ad1 VMM/Config: renamed LazyConfig's get_boolean() to getboolean().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 204
diff changeset
    88
    def getboolean(self, section, option):
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    89
        """Returns the boolean value of the option, in the given
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    90
        section.
206
da07dd944ad1 VMM/Config: renamed LazyConfig's get_boolean() to getboolean().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 204
diff changeset
    91
da07dd944ad1 VMM/Config: renamed LazyConfig's get_boolean() to getboolean().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 204
diff changeset
    92
        For a boolean True, the value must be set to '1', 'on', 'yes',
da07dd944ad1 VMM/Config: renamed LazyConfig's get_boolean() to getboolean().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 204
diff changeset
    93
        'true' or True. For a boolean False, the value must set to '0',
da07dd944ad1 VMM/Config: renamed LazyConfig's get_boolean() to getboolean().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 204
diff changeset
    94
        'off', 'no', 'false' or False.
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    95
        If the option has another value assigned this method will raise
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    96
        a ValueError.
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
    97
206
da07dd944ad1 VMM/Config: renamed LazyConfig's get_boolean() to getboolean().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 204
diff changeset
    98
        """
da07dd944ad1 VMM/Config: renamed LazyConfig's get_boolean() to getboolean().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 204
diff changeset
    99
        # if the setting was modified it may be still a boolean value lets see
da07dd944ad1 VMM/Config: renamed LazyConfig's get_boolean() to getboolean().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 204
diff changeset
   100
        tmp = self.get(section, option)
da07dd944ad1 VMM/Config: renamed LazyConfig's get_boolean() to getboolean().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 204
diff changeset
   101
        if isinstance(tmp, bool):
204
83938336c518 VMM/{,cli/}Config: fixed imports. Small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 201
diff changeset
   102
            return tmp
211
0b129678cfe1 VMM/Config: LazyConfig.getboolean(), convert the value in our getboolean.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 209
diff changeset
   103
        if not tmp.lower() in self._boolean_states:
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   104
            raise ValueError('Not a boolean: %s' % tmp)
211
0b129678cfe1 VMM/Config: LazyConfig.getboolean(), convert the value in our getboolean.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 209
diff changeset
   105
        return self._boolean_states[tmp.lower()]
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   106
187
38b9a9859749 VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   107
    def _get_section_option(self, section_option):
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   108
        """splits ``section_option`` (section.option) in two parts and
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   109
        returns them as list ``[section, option]``, if:
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   110
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   111
          * it likes the format of ``section_option``
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   112
          * the ``section`` is known
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   113
          * the ``option`` is known
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   114
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   115
        Else one of the following exceptions will be thrown:
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   116
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   117
          * `BadOptionError`
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   118
          * `NoSectionError`
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   119
          * `NoOptionError`
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   120
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
   121
        """
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   122
        sect_opt = section_option.lower().split('.')
200
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   123
        # TODO: cache it
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   124
        if len(sect_opt) != 2:# do we need a regexp to check the format?
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   125
            raise BadOptionError(
204
83938336c518 VMM/{,cli/}Config: fixed imports. Small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 201
diff changeset
   126
                        _(u"Bad format: '%s' - expected: section.option") %
83938336c518 VMM/{,cli/}Config: fixed imports. Small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 201
diff changeset
   127
                                 get_unicode(section_option))
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   128
        if not sect_opt[0] in self._cfg:
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   129
            raise NoSectionError(sect_opt[0])
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   130
        if not sect_opt[1] in self._cfg[sect_opt[0]]:
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   131
            raise NoOptionError(sect_opt[1], sect_opt[0])
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   132
        return sect_opt
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   133
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   134
    def items(self, section):
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   135
        """returns an iterable that returns key, value ``tuples`` from
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   136
        the given ``section``.
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   137
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   138
        """
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   139
        if section in self._sections:# check if the section was parsed
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   140
            sect = self._sections[section]
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   141
        elif not section in self._cfg:
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   142
            raise NoSectionError(section)
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   143
        else:
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   144
            return ((k, self._cfg[section][k].default) \
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   145
                    for k in self._cfg[section].iterkeys())
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   146
        # still here? Get defaults and merge defaults with configured setting
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   147
        defaults = dict((k, self._cfg[section][k].default) \
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   148
                        for k in self._cfg[section].iterkeys())
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   149
        defaults.update(sect)
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   150
        if '__name__' in defaults:
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   151
            del defaults['__name__']
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   152
        return defaults.iteritems()
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   153
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   154
    def dget(self, option):
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   155
        """Returns the value of the `option`.
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
   156
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   157
        If the option could not be found in the configuration file, the
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   158
        configured default value, from ``LazyConfig._cfg`` will be
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   159
        returned.
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
   160
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   161
        Arguments:
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
   162
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   163
        `option` : string
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   164
            the configuration option in the form "section.option"
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   165
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   166
        Throws a `NoDefaultError`, if no default value was passed to
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   167
        `LazyConfigOption.__init__()` for the `option`.
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   168
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   169
        """
187
38b9a9859749 VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   170
        section, option = self._get_section_option(option)
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   171
        try:
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   172
            return self._cfg[section][option].getter(section, option)
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   173
        except (NoSectionError, NoOptionError):
200
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   174
            if not self._cfg[section][option].default is None:# may be False
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   175
                return self._cfg[section][option].default
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   176
            else:
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   177
                raise NoDefaultError(section, option)
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   178
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   179
    def pget(self, option):
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   180
        """Returns the value of the `option`."""
187
38b9a9859749 VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   181
        section, option = self._get_section_option(option)
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   182
        return self._cfg[section][option].getter(section, option)
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   183
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   184
    def set(self, option, value):
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   185
        """Set the `value` of the `option`.
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
   186
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   187
        Throws a `ValueError` if `value` couldn't be converted using
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   188
        `LazyConfigOption.cls`.
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   189
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   190
        """
216
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
   191
        # pylint: disable-msg=W0221
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
   192
        # @pylint: _L A Z Y_
187
38b9a9859749 VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   193
        section, option = self._get_section_option(option)
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   194
        val = self._cfg[section][option].cls(value)
200
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   195
        if self._cfg[section][option].validate:
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   196
            val = self._cfg[section][option].validate(val)
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   197
        if not RawConfigParser.has_section(self, section):
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   198
            self.add_section(section)
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   199
        RawConfigParser.set(self, section, option, val)
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   200
        self._modified = True
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   201
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   202
    def has_section(self, section):
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   203
        """Checks if `section` is a known configuration section."""
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
   204
        return section.lower() in self._cfg
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   205
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   206
    def has_option(self, option):
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   207
        """Checks if the option (section.option) is a known
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   208
        configuration option.
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   209
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   210
        """
216
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
   211
        # pylint: disable-msg=W0221
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
   212
        # @pylint: _L A Z Y_
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   213
        try:
187
38b9a9859749 VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   214
            self._get_section_option(option)
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   215
            return True
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   216
        except(BadOptionError, NoSectionError, NoOptionError):
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   217
            return False
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   218
207
95be8f62bc0c VMM/Config: moved Config.sections() to class LazyConfig.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 206
diff changeset
   219
    def sections(self):
95be8f62bc0c VMM/Config: moved Config.sections() to class LazyConfig.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 206
diff changeset
   220
        """Returns an iterator object for all configuration sections."""
95be8f62bc0c VMM/Config: moved Config.sections() to class LazyConfig.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 206
diff changeset
   221
        return self._cfg.iterkeys()
95be8f62bc0c VMM/Config: moved Config.sections() to class LazyConfig.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 206
diff changeset
   222
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   223
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   224
class LazyConfigOption(object):
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   225
    """A simple container class for configuration settings.
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   226
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   227
    `LazyConfigOption` instances are required by `LazyConfig` instances,
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   228
    and instances of classes derived from `LazyConfig`, like the
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   229
    `Config` class.
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   230
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   231
    """
200
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   232
    __slots__ = ('__cls', '__default', '__getter', '__validate')
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   233
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   234
    def __init__(self, cls, default, getter, validate=None):
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   235
        """Creates a new `LazyConfigOption` instance.
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   236
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   237
        Arguments:
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   238
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   239
        `cls` : type
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   240
          The class/type of the option's value
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   241
        `default`
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   242
          Default value of the option. Use ``None`` if the option should
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   243
          not have a default value.
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   244
        `getter` : callable
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   245
          A method's name of `RawConfigParser` and derived classes, to
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   246
          get a option's value, e.g. `self.getint`.
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   247
        `validate` : NoneType or a callable
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   248
          None or any method, that takes one argument, in order to
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   249
          check the value, when `LazyConfig.set()` is called.
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   250
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   251
        """
200
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   252
        self.__cls = cls
201
dbb0f7ed7858 VMM/Config: LazyConfigOption.__init__() cast 'default' to 'cls'.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 200
diff changeset
   253
        if not default is None:# enforce the type of the default value
dbb0f7ed7858 VMM/Config: LazyConfigOption.__init__() cast 'default' to 'cls'.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 200
diff changeset
   254
            self.__default = self.__cls(default)
dbb0f7ed7858 VMM/Config: LazyConfigOption.__init__() cast 'default' to 'cls'.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 200
diff changeset
   255
        else:
dbb0f7ed7858 VMM/Config: LazyConfigOption.__init__() cast 'default' to 'cls'.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 200
diff changeset
   256
            self.__default = default
200
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   257
        if not callable(getter):
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   258
            raise TypeError('getter has to be a callable, got a %r' %
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   259
                            getter.__class__.__name__)
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   260
        self.__getter = getter
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   261
        if validate and not callable(validate):
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   262
            raise TypeError('validate has to be callable or None, got a %r' %
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   263
                            validate.__class__.__name__)
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   264
        self.__validate = validate
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   265
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   266
    @property
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   267
    def cls(self):
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   268
        """The class of the option's value e.g. `str`, `unicode` or
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   269
        `bool`.
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   270
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   271
        """
200
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   272
        return self.__cls
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   273
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   274
    @property
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   275
    def default(self):
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   276
        """The option's default value, may be `None`"""
200
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   277
        return self.__default
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   278
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   279
    @property
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   280
    def getter(self):
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   281
        """The getter method or function to get the option's value"""
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   282
        return self.__getter
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   283
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   284
    @property
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   285
    def validate(self):
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   286
        """A method or function to validate the value"""
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   287
        return self.__validate
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   288
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   289
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   290
class Config(LazyConfig):
188
cf1b5f22dbd2 VMM/Handler: __init__ accepts now a config_type ('default'||'cli').
Pascal Volk <neverseen@users.sourceforge.net>
parents: 187
diff changeset
   291
    """This class is for reading vmm's configuration file."""
0
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   292
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   293
    def __init__(self, filename):
49
9bd033177377 * 'VirtualMailManager/Config.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents: 48
diff changeset
   294
        """Creates a new Config instance
0
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   295
120
928659c8ee9f Comments updated.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 113
diff changeset
   296
        Arguments:
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
   297
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   298
        `filename` : str
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   299
          path to the configuration file
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   300
0
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   301
        """
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   302
        LazyConfig.__init__(self)
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   303
        self._cfg_filename = filename
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   304
        self._cfg_file = None
2
9b39f828aa8a * 'VirtualMailManager/Exceptions.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents: 0
diff changeset
   305
        self.__missing = {}
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   306
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   307
        LCO = LazyConfigOption
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   308
        bool_t = self.bool_new
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   309
        self._cfg = {
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   310
            'account': {
206
da07dd944ad1 VMM/Config: renamed LazyConfig's get_boolean() to getboolean().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 204
diff changeset
   311
                'delete_directory': LCO(bool_t, False, self.getboolean),
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   312
                'directory_mode': LCO(int, 448, self.getint),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   313
                'disk_usage': LCO(bool_t, False, self.getboolean),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   314
                'password_length': LCO(int, 8, self.getint),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   315
                'random_password': LCO(bool_t, False, self.getboolean),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   316
                'imap': LCO(bool_t, True, self.getboolean),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   317
                'pop3': LCO(bool_t, True, self.getboolean),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   318
                'sieve': LCO(bool_t, True, self.getboolean),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   319
                'smtp': LCO(bool_t, True, self.getboolean),
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   320
            },
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   321
            'bin': {
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   322
                'dovecotpw': LCO(str, '/usr/sbin/dovecotpw', self.get,
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   323
                                 exec_ok),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   324
                'du': LCO(str, '/usr/bin/du', self.get, exec_ok),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   325
                'postconf': LCO(str, '/usr/sbin/postconf', self.get, exec_ok),
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   326
            },
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   327
            'database': {
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   328
                'host': LCO(str, 'localhost', self.get),
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   329
                'name': LCO(str, 'mailsys', self.get),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   330
                'pass': LCO(str, None, self.get),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   331
                'user': LCO(str, None, self.get),
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   332
            },
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   333
            'domain': {
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   334
                'auto_postmaster': LCO(bool_t, True, self.getboolean),
206
da07dd944ad1 VMM/Config: renamed LazyConfig's get_boolean() to getboolean().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 204
diff changeset
   335
                'delete_directory': LCO(bool_t, False, self.getboolean),
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   336
                'directory_mode': LCO(int, 504, self.getint),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   337
                'force_deletion': LCO(bool_t, False, self.getboolean),
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   338
            },
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   339
            'maildir': {
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   340
                'folders': LCO(str, 'Drafts:Sent:Templates:Trash', self.get),
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   341
                'name': LCO(str, 'Maildir', self.get),
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   342
            },
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   343
            'misc': {
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   344
                'base_directory': LCO(str, '/srv/mail', self.get, is_dir),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   345
                'dovecot_version': LCO(int, 12, self.getint),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   346
                'gid_mail': LCO(int, 8, self.getint),
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   347
                'password_scheme': LCO(str, 'CRAM-MD5', self.get,
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   348
                                       self.known_scheme),
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   349
                'transport': LCO(str, 'dovecot:', self.get),
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   350
            },
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   351
        }
0
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   352
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   353
    def load(self):
120
928659c8ee9f Comments updated.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 113
diff changeset
   354
        """Loads the configuration, read only.
928659c8ee9f Comments updated.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 113
diff changeset
   355
216
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
   356
        Raises a ConfigError if the configuration syntax is
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   357
        invalid.
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   358
120
928659c8ee9f Comments updated.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 113
diff changeset
   359
        """
0
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   360
        try:
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   361
            self._cfg_file = open(self._cfg_filename, 'r')
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   362
            self.readfp(self._cfg_file)
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   363
        except (MissingSectionHeaderError, ParsingError), err:
216
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
   364
            raise ConfigError(str(err), CONF_ERROR)
175
b241272eb1bd VMM/VMM: allow configure subcommand also with missing settings.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 174
diff changeset
   365
        finally:
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   366
            if self._cfg_file and not self._cfg_file.closed:
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   367
                self._cfg_file.close()
0
bb0aa2102206 Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   368
2
9b39f828aa8a * 'VirtualMailManager/Exceptions.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents: 0
diff changeset
   369
    def check(self):
120
928659c8ee9f Comments updated.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 113
diff changeset
   370
        """Performs a configuration check.
128
cf8116625866 Converted VirtualMailManager and Postconf to new-style classes.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 120
diff changeset
   371
216
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
   372
        Raises a ConfigError if the check fails.
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   373
120
928659c8ee9f Comments updated.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 113
diff changeset
   374
        """
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
   375
        # TODO: There are only two settings w/o defaults.
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
   376
        #       So there is no need for cStringIO
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   377
        if not self.__chk_cfg():
2
9b39f828aa8a * 'VirtualMailManager/Exceptions.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents: 0
diff changeset
   378
            errmsg = StringIO()
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   379
            errmsg.write(_(u'Missing options, which have no default value.\n'))
187
38b9a9859749 VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   380
            errmsg.write(_(u'Using configuration file: %s\n') %
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   381
                         self._cfg_filename)
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   382
            for section, options in self.__missing.iteritems():
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   383
                errmsg.write(_(u'* Section: %s\n') % section)
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   384
                for option in options:
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   385
                    errmsg.write((u'    %s\n') % option)
216
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
   386
            raise ConfigError(errmsg.getvalue(), CONF_ERROR)
2
9b39f828aa8a * 'VirtualMailManager/Exceptions.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents: 0
diff changeset
   387
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   388
    def known_scheme(self, scheme):
209
c705a9e38962 VMM{/Config}: reduced docstrings. Added doc to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 207
diff changeset
   389
        """Converts `scheme` to upper case and checks if is known by
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   390
        Dovecot (listed in VirtualMailManager.SCHEMES).
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
   391
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   392
        Throws a `ConfigValueError` if the scheme is not listed in
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   393
        VirtualMailManager.SCHEMES.
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   394
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   395
        """
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   396
        scheme = scheme.upper()
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   397
        # TODO: VMM.SCHEMES
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   398
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   399
    def unicode(self, section, option):
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   400
        """Returns the value of the `option` from `section`, converted
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   401
        to Unicode.
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   402
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   403
        """
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   404
        return get_unicode(self.get(section, option))
69
0c124160a991 * 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents: 68
diff changeset
   405
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   406
    def __chk_cfg(self):
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   407
        """Checks all section's options for settings w/o a default
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   408
        value.
185
6e1ef32fbd82 VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 180
diff changeset
   409
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   410
        Returns `True` if everything is fine, else `False`.
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   411
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   412
        """
2
9b39f828aa8a * 'VirtualMailManager/Exceptions.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents: 0
diff changeset
   413
        errors = False
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   414
        for section in self._cfg.iterkeys():
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   415
            missing = []
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   416
            for option, value in self._cfg[section].iteritems():
187
38b9a9859749 VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   417
                if (value.default is None and
38b9a9859749 VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   418
                    not RawConfigParser.has_option(self, section, option)):
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   419
                    missing.append(option)
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   420
                    errors = True
200
983cf98d5881 VMM/Config: attributes of class LazyConfigOption are read-only now.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 188
diff changeset
   421
            if missing:
174
974bafa59330 VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 173
diff changeset
   422
                self.__missing[section] = missing
2
9b39f828aa8a * 'VirtualMailManager/Exceptions.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents: 0
diff changeset
   423
        return not errors
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   424
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   425
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 211
diff changeset
   426
del _