source: mailjam/postman/config.py@ 15:8ae771653ffe

Last change on this file since 15:8ae771653ffe was 15:8ae771653ffe, checked in by Borja Lopez <borja@…>, 12 years ago

Added a postman-mta.conf version to be used in the tests

Added a script bin/postman-mta that will run the MTA client from a shell

Renamed the bin/postman_server script to bin/postman-server

Disabled the tests from tests/mta.py, as they are totally outdated and they
break the tests.

Replaced the old code in mta.Sendmail with a new mta.MTAClient class, which
contains code that actually *works* against a postman server (tests to come!)

Restructured the postman-mta.conf configuration file. The sections have better
names now (server, archive) and the archive section contains parameters which
names that reflect much better what they are used for.

Added a new parameter to the postman-mta.conf file (server.uri) that allows
us to set the uri to where any MTA client will have to connect, in only one
shorter line.

Fixed some typos in postman.config

Updated the setup.py script so the bin/postman-* scripts are installed
properly in the bin/ directory.

Added a function, proper_etc_path(), to the setup.py script so the path where
configuration files have to be installed is correctly set when building a
distribution/source package (still to be tested).

Updated the MANIFEST

File size: 3.5 KB
Line 
1# -*- coding: utf-8 -*-
2
3"""
4The postman project - config.py
5
6This file is released under the BSD license, see LICENSE for
7more information.
8
9Francisco de Borja Lopez Rio - <borja@codigo23.net>
10Soluciones Informaticas Codigo23 S.L.U. - http://codigo23.net
11"""
12
13import os
14from ConfigParser import SafeConfigParser
15
16class DaemonConfig():
17 def __init__(self, configfile=None):
18 self.configfile = configfile
19 self.default_paths = ['/usr/local/etc/postman', '/usr/local/etc',
20 '/etc/postman', '/etc',
21 os.path.join(os.path.dirname(__file__),'../conf')]
22 self.config = {}
23
24 @property
25 def default_filename(self):
26 """
27 Method to get the default configuration filename. It is a method instead
28 of an attribute for easier subclassing
29 """
30 return 'postman.conf'
31
32 @property
33 def sections(self):
34 """
35 Method to get the list of available sections in the configuration file.
36 It is a method instead of an attribute for easier subclassing.
37
38 FIXME: Perhaps it would be better to dinamically get the list of
39 sections from the configuration file itself.
40 """
41 return ['xmlrpc_server', 'storage', 'archive',
42 'mailing_lists', 'members']
43
44 def validate_configfile(self):
45 if self.configfile:
46 if not os.path.exists(self.configfile):
47 # the file does not exist, so we override it with None,
48 # allowing the next few lines to search for a valid
49 # config file on the usual places
50 self.configfile = None
51
52 if not self.configfile:
53 for path in self.default_paths:
54 full_path = os.path.join(path, self.default_filename)
55 if os.path.exists(full_path):
56 self.configfile = full_path
57 return full_path
58
59 # if we reach here, self.configfile will be still None, no valid
60 # config files were found, and so we raise an exception
61 raise IOError('ERROR - Can not find ' + self.default_filename + \
62 ' in your environment')
63
64 def load(self):
65 if not self.configfile:
66 self.validate_configfile()
67 parser = SafeConfigParser()
68 parser.read(self.configfile)
69 for section in self.sections:
70 self.config[section] = {}
71 for name, value in parser.items(section):
72 self.config[section][name] = value
73 return self.config
74
75 def get_section_parameters(self, section):
76 if section not in self.sections:
77 raise IndexError('ERROR - ' + section + \
78 ' is not one of the available sections: ' + \
79 ', '.join(self.sections))
80 if section not in self.config.keys():
81 # perhaps the config hasn't been loaded yet
82 self.load()
83
84 return self.config[section]
85
86class MTAClientConfig(DaemonConfig):
87 @property
88 def default_filename(self):
89 return 'postman-mta.conf'
90
91 @property
92 def sections(self):
93 return ['server', 'archive']
94
95
96def get_config_parameters(section=None, configfile=None):
97 """
98 This function is kept here for backwards compatibility.
99 By default all the daemon code will use this function to get
100 configuration parameters from the default configuration file.
101 """
102 config = DaemonConfig(configfile)
103 return config.get_section_parameters(section)
104
105
Note: See TracBrowser for help on using the repository browser.