import socket
import os
import copy
+import re
# Third party modules
from ..xlate import XLATOR
CONFIG_DIR = 'pixelpark'
-__version__ = '0.1.4'
+__version__ = '0.2.1'
LOG = logging.getLogger(__name__)
VALID_MAIL_METHODS = ('smtp', 'sendmail')
+DEFAULT_DOMAIN = 'pixelpark.com'
_ = XLATOR.gettext
default_reply_to = 'solution@pixelpark.com'
default_mail_server = 'mx.pixelpark.com'
+ default_smtp_port = 25
current_user_name = pwd.getpwuid(os.getuid()).pw_name
current_user_gecos = pwd.getpwuid(os.getuid()).pw_gecos
+ current_user_gecos = current_user_gecos.strip()
+ current_user_gecos = re.sub(r',+$', '', current_user_gecos)
+ if current_user_gecos == '':
+ current_user_gecos = current_user_name
+
default_domain = socket.getfqdn()
- if not MailAddress.re_valid_domain.search(default_domain):
- default_domain = 'pixelpark.com'
+ if default_domain is None:
+ default_domain = DEFAULT_DOMAIN
+ else:
+ default_domain = default_domain.strip()
+ if not MailAddress.re_valid_domain.match(default_domain):
+ default_domain = DEFAULT_DOMAIN
default_mail_from = MailAddress(user=current_user_name, domain=default_domain)
+ default_mail_from_complete = '{n} <{m}>'.format(n=current_user_gecos, m=default_mail_from)
+
+ valid_mail_methods = VALID_MAIL_METHODS
+ default_mail_method = 'smtp'
# -------------------------------------------------------------------------
def __init__(
self, appname=None, verbose=0, version=__version__, base_dir=None,
append_appname_to_stems=True, config_dir=CONFIG_DIR, additional_stems=None,
additional_cfgdirs=None, encoding=DEFAULT_ENCODING, additional_config_file=None,
- use_chardet=True, raise_on_error=True, initialized=False):
+ ensure_privacy=False, use_chardet=True, raise_on_error=True, initialized=False):
self.mail_recipients = copy.copy(self.default_mail_recipients)
- self.mail_from = '{n} <{m}>'.format(
- n=self.current_user_gecos, m=self.default_mail_from)
+ self.mail_from = self.default_mail_from_complete
self.mail_cc = copy.copy(self.default_mail_cc)
self.reply_to = self.default_reply_to
- self.mail_method = 'smtp'
+ self.mail_method = self.default_mail_method
self.mail_server = self.default_mail_server
- self.smtp_port = 25
- self._config_has_errors = None
+ self.smtp_port = self.default_smtp_port
super(PpBaseConfiguration, self).__init__(
appname=appname, verbose=verbose, version=version, base_dir=base_dir,
append_appname_to_stems=append_appname_to_stems, config_dir=config_dir,
additional_stems=additional_stems, additional_cfgdirs=additional_cfgdirs,
encoding=encoding, additional_config_file=additional_config_file,
- use_chardet=use_chardet, raise_on_error=raise_on_error, initialized=False)
+ ensure_privacy=ensure_privacy, use_chardet=use_chardet,
+ raise_on_error=raise_on_error, initialized=False)
if initialized:
self.initialized = True
+ # -------------------------------------------------------------------------
+ def as_dict(self, short=True):
+ """
+ Transforms the elements of the object into a dict
+
+ @param short: don't include local properties in resulting dict.
+ @type short: bool
+
+ @return: structure as dict
+ @rtype: dict
+ """
+
+ res = super(PpBaseConfiguration, self).as_dict(short=short)
+
+ res['default_mail_recipients'] = self.default_mail_recipients
+ res['default_mail_cc'] = self.default_mail_cc
+ res['default_reply_to'] = self.default_reply_to
+ res['default_mail_server'] = self.default_mail_server
+ res['default_smtp_port'] = self.default_smtp_port
+ res['current_user_name'] = self.current_user_name
+ res['current_user_gecos'] = self.current_user_gecos
+ res['default_mail_from'] = self.default_mail_from
+ res['default_domain'] = self.default_domain
+ res['default_mail_from_complete'] = self.default_mail_from_complete
+ res['default_mail_method'] = self.default_mail_method
+ res['valid_mail_methods'] = self.valid_mail_methods
+
+ return res
+
# =============================================================================
# Standard module
import logging
-import pwd
import re
import copy
-import os
-import socket
# Third party modules
# Own modules
-from fb_tools.common import is_sequence, pp
+from fb_tools.common import is_sequence, pp, to_bool
-# from .config import ConfigError, BaseConfiguration
-from fb_tools.multi_config import MultiConfigError, BaseMultiConfig
from fb_tools.multi_config import DEFAULT_ENCODING
from fb_tools import MailAddress
from .. import __version__ as GLOBAL_VERSION
from .. import MAX_PORT_NUMBER, DEFAULT_CONFIG_DIR
+from . import PpConfigurationError, PpBaseConfiguration
+
from ..xlate import XLATOR
-__version__ = '0.1.11'
+__version__ = '0.2.1'
LOG = logging.getLogger(__name__)
_ = XLATOR.gettext
-VALID_MAIL_METHODS = ('smtp', 'sendmail')
DEFAULT_DOMAIN = 'pixelpark.com'
# =============================================================================
-class MailConfigError(MultiConfigError):
+class MailConfigError(PpConfigurationError):
"""Base error class for all exceptions happened during
execution this configured application"""
# =============================================================================
-class MailConfiguration(BaseMultiConfig):
+class MailConfiguration(PpBaseConfiguration):
"""
A class for providing a configuration for an arbitrary PowerDNS Application
and methods to read it from configuration files.
"""
- default_mail_recipients = [
- 'frank.brehm@pixelpark.com'
- ]
- default_mail_cc = [
- 'thomas.dalichow@pixelpark.com',
- ]
-
- default_reply_to = 'solution@pixelpark.com'
-
- default_mail_server = 'localhost'
- default_smtp_port = 25
-
- default_domain = socket.getfqdn()
- if default_domain is None:
- default_domain = DEFAULT_DOMAIN
- else:
- default_domain = default_domain.strip()
- if not MailAddress.re_valid_domain.match(default_domain):
- default_domain = DEFAULT_DOMAIN
-
- current_user_name = pwd.getpwuid(os.getuid()).pw_name
- current_user_gecos = pwd.getpwuid(os.getuid()).pw_gecos
- default_mail_from = MailAddress(user=current_user_name, domain=default_domain)
- default_mail_from_complete = '{n} <{m}>'.format(n=current_user_gecos, m=default_mail_from)
-
- valid_mail_methods = VALID_MAIL_METHODS
- default_mail_method = 'smtp'
-
whitespace_re = re.compile(r'(?:[,;]+|\s*[,;]*\s+)+')
# -------------------------------------------------------------------------
self, appname=None, verbose=0, version=__version__, base_dir=None,
append_appname_to_stems=True, additional_stems=None, config_dir=DEFAULT_CONFIG_DIR,
additional_config_file=None, additional_cfgdirs=None, encoding=DEFAULT_ENCODING,
- ensure_privacy=False, use_chardet=True, initialized=False):
+ ensure_privacy=False, raise_on_error=True, use_chardet=True, initialized=False):
add_stems = []
if additional_stems:
if 'mail' not in add_stems:
add_stems.append('mail')
- self.mail_recipients = copy.copy(self.default_mail_recipients)
- self.mail_from = self.default_mail_from_complete
- self.mail_cc = copy.copy(self.default_mail_cc)
- self.reply_to = self.default_reply_to
- self.mail_method = self.default_mail_method
- self.mail_server = self.default_mail_server
- self.smtp_port = self.default_smtp_port
self._mail_cc_configured = False
super(MailConfiguration, self).__init__(
append_appname_to_stems=append_appname_to_stems, config_dir=config_dir,
additional_stems=add_stems, additional_config_file=additional_config_file,
additional_cfgdirs=additional_cfgdirs, encoding=encoding, use_chardet=use_chardet,
- ensure_privacy=ensure_privacy, initialized=False,
+ raise_on_error=raise_on_error, ensure_privacy=ensure_privacy, initialized=False,
)
self.xmailer = "{a} (Admin Tools version {v})".format(
if initialized:
self.initialized = True
+ # -----------------------------------------------------------
+ @property
+ def mail_cc_configured(self):
+ """Should there be used LDAPS for communicating with the LDAP server?"""
+ return self._mail_cc_configured
+
+ @mail_cc_configured.setter
+ def mail_cc_configured(self, value):
+ self._mail_cc_configured = to_bool(value)
+
# -------------------------------------------------------------------------
def as_dict(self, short=True):
"""
res = super(MailConfiguration, self).as_dict(short=short)
- res['default_mail_recipients'] = self.default_mail_recipients
- res['default_mail_cc'] = self.default_mail_cc
- res['default_reply_to'] = self.default_reply_to
- res['default_mail_server'] = self.default_mail_server
- res['default_smtp_port'] = self.default_smtp_port
- res['current_user_name'] = self.current_user_name
- res['current_user_gecos'] = self.current_user_gecos
- res['default_mail_from'] = self.default_mail_from
- res['default_mail_from_complete'] = self.default_mail_from_complete
- res['default_mail_method'] = self.default_mail_method
+ res['mail_cc_configured'] = self.mail_cc_configured
return res
if not self.mail_recipients:
self.mail_recipients = copy.copy(self.default_mail_recipients)
- if not self.mail_cc and not self._mail_cc_configured:
+ if not self.mail_cc and not self.mail_cc_configured:
self.mail_cc = copy.copy(self.default_mail_cc)
# -------------------------------------------------------------------------
for key in section.keys():
- self._mail_cc_configured = True
+ self.mail_cc_configured = True
if not re_cc.search(key):
continue