aboutsummaryrefslogtreecommitdiff
path: root/src/mailman_pgp/config/config.py
blob: 0b5fe4f97c97c657ebbfa1c800095c19cd3a2642 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# Copyright (C) 2017 Jan Jancar
#
# This file is a part of the Mailman PGP plugin.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# this program.  If not, see <http://www.gnu.org/licenses/>.

"""Mailman PGP configuration module."""
from configparser import ConfigParser

from mailman.config import config as mailman_config
from mailman.utilities.modules import expand_path
from pkg_resources import resource_string
from public.public import public

from mailman_pgp.config.converter import ConfigConverter
from mailman_pgp.config.validator import ConfigValidator


@public
class Config(ConfigParser):
    """A ConfigParser with a name."""

    def __init__(self):
        super().__init__()
        self.name = None
        self.dict = None
        schema = resource_string('mailman_pgp.config',
                                 'schema.cfg').decode('utf-8')
        self.validator = ConfigValidator(schema)
        self.converter = ConfigConverter(schema)

    def load(self, name):
        """
        Load the plugin configuration, and set our name.

        :param name: The name to set/load configuration for.
        :type name: str
        """
        self.name = name
        self.read(expand_path(
                dict(mailman_config.plugin_configs)[self.name].configuration))

    def validate(self):
        self.validator.validate(self)

    def convert(self):
        self.dict = self.converter.convert(self)

    def get_value(self, section, option):
        return self.dict[section][option]

    def set(self, section, option, value=None):
        self.dict[section][option] = self.converter.converter(section, option)(
                value)
        return super().set(section, option, value)