Source code for notify.conf

# coding=utf-8
"""
"""
__author__ = 'Alisue <lambdalisue@hashnote.net>'
import os
import ConfigParser
from StringIO import StringIO

DEFAULT_CONFIG=u"""
[smtp]
host = localhost
port = 25

[mail]
from_addr = notify@localhost
to_addr =
subject = Notify: %(prog)s has %(status)s
encoding = None

[auth]
username =
"""

[docs]def get_user_config_filename(appname='notify'): """ Get user config filename. It will return operating system dependent config filename. Parameters ---------- appname : string An application name used for filename Returns ------- string A filename of user configuration. """ import platform system = platform.system() if system == 'Windows': rootname = os.path.join(os.environ['APPDATA'], appname) filename = appname + ".cfg" prefix = '' elif system == 'Linux': XDG_CONFIG_HOME = os.environ.get('XDG_CONFIG_HOME', None) rootname = XDG_CONFIG_HOME or os.path.join('~', '.config') rootname = os.path.expanduser(rootname) # check if XDG_CONFIG_HOME exists if not os.path.exists(rootname) and XDG_CONFIG_HOME is None: # XDG_CONFIG_HOME is not used rootname = os.path.expanduser('~') filename = appname + ".cfg" prefix = '.' else: rootname = os.path.join(rootname, appname) filename = appname + ".cfg" prefix = '' elif system == 'Darwin': rootname = os.path.expanduser('~') filename = appname + ".cfg" prefix = '.' else: # Unknown rootname = os.path.expanduser('~') filename = appname + ".cfg" prefix = '' return os.path.join(rootname, prefix + filename)
[docs]def config_to_options(config): """ Convert ConfigParser instance to argparse.Namespace Parameters ---------- config : object A ConfigParser instance Returns ------- object An argparse.Namespace instance """ class Options: host=config.get('smtp', 'host', raw=True) port=config.getint('smtp', 'port') to_addr=config.get('mail', 'to_addr', raw=True) from_addr=config.get('mail', 'from_addr', raw=True) subject=config.get('mail', 'subject', raw=True) encoding=config.get('mail', 'encoding', raw=True) username=config.get('auth', 'username') opts = Options() # format opts.from_addr % {'host': opts.host, 'prog': 'notify'} opts.to_addr % {'host': opts.host, 'prog': 'notify'} return opts
[docs]def create_default_config(): """ Create default ConfigParser instance """ import codecs config = ConfigParser.SafeConfigParser() config.readfp(StringIO(DEFAULT_CONFIG)) # Load user settings filename = get_user_config_filename() if not os.path.exists(filename): from wizard import setup_wizard setup_wizard(config) else: try: fi = codecs.open(filename, 'r', encoding='utf-8') config.readfp(fi) finally: fi.close() return config