annotate roundup/configuration.py @ 3882:46ef2a6fd79d

config option to limit nosy attachments based on size reworking of patch [SF#772323] from Philipp Gortan It tries to avoid reading the file contents just to get the file size but that was too hard for metakit backends. They don't inherit from blobfiles.FileStorage which makes it more challenging. Really that backend should be reworked to inherit from FileStorage. I'm not sure I like the default being sys.maxint. Maybe have 0 == unlimited? But what if someone really wanted to set it to 0 to mean "don't attach anything"?
author Justus Pendleton <jpend@users.sourceforge.net>
date Mon, 03 Sep 2007 17:14:09 +0000
parents 454ee9411e85
children 6b3919328381
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1 # Roundup Issue Tracker configuration support
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
2 #
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3879
diff changeset
3 # $Id: configuration.py,v 1.47 2007-09-03 17:14:08 jpend Exp $
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
4 #
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
5 __docformat__ = "restructuredtext"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
6
3835
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
7 import ConfigParser
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
8 import getopt
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
9 import imp
3835
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
10 import logging, logging.config
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
11 import os
3835
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
12 import re
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
13 import sys
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
14 import time
3878
6d14a3b4e295 allow admin to specify port and local hostname for SMTP connections
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3877
diff changeset
15 import smtplib
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
16
3620
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
17 import roundup.date
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
18
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
19 # XXX i don't think this module needs string translation, does it?
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
20
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
21 ### Exceptions
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
22
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
23 class ConfigurationError(Exception):
3777
74aebbbea305 Sorry for the mega-patch - was all done on the train:
Richard Jones <richard@users.sourceforge.net>
parents: 3725
diff changeset
24 pass
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
25
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
26 class NoConfigError(ConfigurationError):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
27
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
28 """Raised when configuration loading fails
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
29
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
30 Constructor parameters: path to the directory that was used as HOME
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
31
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
32 """
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
33
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
34 def __str__(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
35 return "No valid configuration files found in directory %s" \
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
36 % self.args[0]
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
37
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
38 class InvalidOptionError(ConfigurationError, KeyError, AttributeError):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
39
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
40 """Attempted access to non-existing configuration option
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
41
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
42 Configuration options may be accessed as configuration object
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
43 attributes or items. So this exception instances also are
3820
771248aa8302 typos in docstrings
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3788
diff changeset
44 instances of KeyError (invalid item access) and AttributeError
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
45 (invalid attribute access).
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
46
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
47 Constructor parameter: option name
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
48
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
49 """
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
50
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
51 def __str__(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
52 return "Unsupported configuration option: %s" % self.args[0]
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
53
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
54 class OptionValueError(ConfigurationError, ValueError):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
55
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
56 """Raised upon attempt to assign an invalid value to config option
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
57
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
58 Constructor parameters: Option instance, offending value
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
59 and optional info string.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
60
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
61 """
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
62
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
63 def __str__(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
64 _args = self.args
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
65 _rv = "Invalid value for %(option)s: %(value)r" % {
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
66 "option": _args[0].name, "value": _args[1]}
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
67 if len(_args) > 2:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
68 _rv += "\n".join(("",) + _args[2:])
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
69 return _rv
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
70
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
71 class OptionUnsetError(ConfigurationError):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
72
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
73 """Raised when no Option value is available - neither set, nor default
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
74
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
75 Constructor parameters: Option instance.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
76
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
77 """
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
78
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
79 def __str__(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
80 return "%s is not set and has no default" % self.args[0].name
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
81
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
82 class UnsetDefaultValue:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
83
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
84 """Special object meaning that default value for Option is not specified"""
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
85
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
86 def __str__(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
87 return "NO DEFAULT"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
88
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
89 NODEFAULT = UnsetDefaultValue()
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
90
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
91 ### Option classes
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
92
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
93 class Option:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
94
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
95 """Single configuration option.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
96
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
97 Options have following attributes:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
98
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
99 config
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
100 reference to the containing Config object
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
101 section
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
102 name of the section in the tracker .ini file
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
103 setting
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
104 option name in the tracker .ini file
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
105 default
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
106 default option value
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
107 description
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
108 option description. Makes a comment in the tracker .ini file
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
109 name
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
110 "canonical name" of the configuration option.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
111 For items in the 'main' section this is uppercased
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
112 'setting' name. For other sections, the name is
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
113 composed of the section name and the setting name,
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
114 joined with underscore.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
115 aliases
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
116 list of "also known as" names. Used to access the settings
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
117 by old names used in previous Roundup versions.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
118 "Canonical name" is also included.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
119
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
120 The name and aliases are forced to be uppercase.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
121 The setting name is forced to lowercase.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
122
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
123 """
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
124
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
125 class_description = None
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
126
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
127 def __init__(self, config, section, setting,
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
128 default=NODEFAULT, description=None, aliases=None
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
129 ):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
130 self.config = config
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
131 self.section = section
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
132 self.setting = setting.lower()
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
133 self.default = default
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
134 self.description = description
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
135 self.name = setting.upper()
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
136 if section != "main":
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
137 self.name = "_".join((section.upper(), self.name))
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
138 if aliases:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
139 self.aliases = [alias.upper() for alias in list(aliases)]
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
140 else:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
141 self.aliases = []
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
142 self.aliases.insert(0, self.name)
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
143 # convert default to internal representation
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
144 if default is NODEFAULT:
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
145 _value = default
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
146 else:
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
147 _value = self.str2value(default)
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
148 # value is private. use get() and set() to access
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
149 self._value = self._default_value = _value
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
150
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
151 def str2value(self, value):
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
152 """Return 'value' argument converted to internal representation"""
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
153 return value
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
154
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
155 def _value2str(self, value):
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
156 """Return 'value' argument converted to external representation
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
157
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
158 This is actual conversion method called only when value
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
159 is not NODEFAULT. Heirs with different conversion rules
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
160 override this method, not the public .value2str().
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
161
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
162 """
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
163 return str(value)
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
164
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
165 def value2str(self, value=NODEFAULT, current=0):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
166 """Return 'value' argument converted to external representation
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
167
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
168 If 'current' is True, use current option value.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
169
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
170 """
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
171 if current:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
172 value = self._value
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
173 if value is NODEFAULT:
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
174 return str(value)
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
175 else:
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
176 return self._value2str(value)
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
177
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
178 def get(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
179 """Return current option value"""
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
180 if self._value is NODEFAULT:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
181 raise OptionUnsetError(self)
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
182 return self._value
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
183
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
184 def set(self, value):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
185 """Update the value"""
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
186 self._value = self.str2value(value)
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
187
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
188 def reset(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
189 """Reset the value to default"""
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
190 self._value = self._default_value
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
191
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
192 def isdefault(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
193 """Return True if current value is the default one"""
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
194 return self._value == self._default_value
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
195
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
196 def isset(self):
3820
771248aa8302 typos in docstrings
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3788
diff changeset
197 """Return True if the value is available (either set or default)"""
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
198 return self._value != NODEFAULT
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
199
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
200 def __str__(self):
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
201 return self.value2str(self._value)
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
202
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
203 def __repr__(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
204 if self.isdefault():
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
205 _format = "<%(class)s %(name)s (default): %(value)s>"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
206 else:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
207 _format = "<%(class)s %(name)s (default: %(default)s): %(value)s>"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
208 return _format % {
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
209 "class": self.__class__.__name__,
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
210 "name": self.name,
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
211 "default": self.value2str(self._default_value),
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
212 "value": self.value2str(self._value),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
213 }
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
214
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
215 def format(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
216 """Return .ini file fragment for this option"""
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
217 _desc_lines = []
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
218 for _description in (self.description, self.class_description):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
219 if _description:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
220 _desc_lines.extend(_description.split("\n"))
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
221 # comment out the setting line if there is no value
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
222 if self.isset():
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
223 _is_set = ""
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
224 else:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
225 _is_set = "#"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
226 _rv = "# %(description)s\n# Default: %(default)s\n" \
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
227 "%(is_set)s%(name)s = %(value)s\n" % {
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
228 "description": "\n# ".join(_desc_lines),
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
229 "default": self.value2str(self._default_value),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
230 "name": self.setting,
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
231 "value": self.value2str(self._value),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
232 "is_set": _is_set
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
233 }
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
234 return _rv
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
235
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
236 def load_ini(self, config):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
237 """Load value from ConfigParser object"""
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
238 if config.has_option(self.section, self.setting):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
239 self.set(config.get(self.section, self.setting))
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
240
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
241 def load_pyconfig(self, config):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
242 """Load value from old-style config (python module)"""
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
243 for _name in self.aliases:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
244 if hasattr(config, _name):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
245 self.set(getattr(config, _name))
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
246 break
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
247
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
248 class BooleanOption(Option):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
249
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
250 """Boolean option: yes or no"""
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
251
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
252 class_description = "Allowed values: yes, no"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
253
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
254 def _value2str(self, value):
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
255 if value:
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
256 return "yes"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
257 else:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
258 return "no"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
259
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
260 def str2value(self, value):
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
261 if type(value) == type(""):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
262 _val = value.lower()
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
263 if _val in ("yes", "true", "on", "1"):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
264 _val = 1
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
265 elif _val in ("no", "false", "off", "0"):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
266 _val = 0
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
267 else:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
268 raise OptionValueError(self, value, self.class_description)
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
269 else:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
270 _val = value and 1 or 0
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
271 return _val
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
272
3544
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
273 class WordListOption(Option):
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
274
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
275 """List of strings"""
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
276
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
277 class_description = "Allowed values: comma-separated list of words"
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
278
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
279 def _value2str(self, value):
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
280 return ','.join(value)
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
281
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
282 def str2value(self, value):
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
283 return value.split(',')
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
284
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
285 class RunDetectorOption(Option):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
286
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
287 """When a detector is run: always, never or for new items only"""
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
288
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
289 class_description = "Allowed values: yes, no, new"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
290
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
291 def str2value(self, value):
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
292 _val = value.lower()
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
293 if _val in ("yes", "no", "new"):
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
294 return _val
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
295 else:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
296 raise OptionValueError(self, value, self.class_description)
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
297
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
298 class MailAddressOption(Option):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
299
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
300 """Email address
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
301
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
302 Email addresses may be either fully qualified or local.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
303 In the latter case MAIL_DOMAIN is automatically added.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
304
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
305 """
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
306
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
307 def get(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
308 _val = Option.get(self)
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
309 if "@" not in _val:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
310 _val = "@".join((_val, self.config["MAIL_DOMAIN"]))
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
311 return _val
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
312
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
313 class FilePathOption(Option):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
314
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
315 """File or directory path name
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
316
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
317 Paths may be either absolute or relative to the HOME.
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
318
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
319 """
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
320
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
321 class_description = "The path may be either absolute or relative\n" \
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
322 "to the directory containig this config file."
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
323
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
324 def get(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
325 _val = Option.get(self)
2619
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
326 if _val and not os.path.isabs(_val):
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
327 _val = os.path.join(self.config["HOME"], _val)
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
328 return _val
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
329
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
330 class FloatNumberOption(Option):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
331
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
332 """Floating point numbers"""
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
333
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
334 def str2value(self, value):
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
335 try:
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
336 return float(value)
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
337 except ValueError:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
338 raise OptionValueError(self, value,
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
339 "Floating point number required")
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
340
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
341 def _value2str(self, value):
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
342 _val = str(value)
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
343 # strip fraction part from integer numbers
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
344 if _val.endswith(".0"):
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
345 _val = _val[:-2]
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
346 return _val
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
347
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
348 class IntegerNumberOption(Option):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
349
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
350 """Integer numbers"""
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
351
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
352 def str2value(self, value):
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
353 try:
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
354 return int(value)
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
355 except ValueError:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
356 raise OptionValueError(self, value, "Integer number required")
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
357
3609
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
358 class OctalNumberOption(Option):
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
359
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
360 """Octal Integer numbers"""
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
361
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
362 def str2value(self, value):
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
363 try:
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
364 return int(value, 8)
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
365 except ValueError:
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
366 raise OptionValueError(self, value, "Octal Integer number required")
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
367
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
368 def _value2str(self, value):
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
369 return oct(value)
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
370
2624
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
371 class NullableOption(Option):
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
372
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
373 """Option that is set to None if it's string value is one of NULL strings
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
374
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
375 Default nullable strings list contains empty string only.
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
376 There is constructor parameter allowing to specify different nullables.
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
377
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
378 Conversion to external representation returns the first of the NULL
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
379 strings list when the value is None.
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
380
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
381 """
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
382
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
383 NULL_STRINGS = ("",)
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
384
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
385 def __init__(self, config, section, setting,
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
386 default=NODEFAULT, description=None, aliases=None,
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
387 null_strings=NULL_STRINGS
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
388 ):
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
389 self.null_strings = list(null_strings)
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
390 Option.__init__(self, config, section, setting, default,
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
391 description, aliases)
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
392
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
393 def str2value(self, value):
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
394 if value in self.null_strings:
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
395 return None
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
396 else:
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
397 return value
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
398
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
399 def _value2str(self, value):
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
400 if value is None:
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
401 return self.null_strings[0]
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
402 else:
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
403 return value
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
404
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
405 class NullableFilePathOption(NullableOption, FilePathOption):
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
406
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
407 # .get() and class_description are from FilePathOption,
2624
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
408 get = FilePathOption.get
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
409 class_description = FilePathOption.class_description
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
410 # everything else taken from NullableOption (inheritance order)
2624
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
411
3620
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
412 class TimezoneOption(Option):
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
413
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
414 class_description = \
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
415 "If pytz module is installed, value may be any valid\n" \
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
416 "timezone specification (e.g. EET or Europe/Warsaw).\n" \
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
417 "If pytz is not installed, value must be integer number\n" \
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
418 "giving local timezone offset from UTC in hours."
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
419
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
420 def str2value(self, value):
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
421 try:
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
422 roundup.date.get_timezone(value)
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
423 except KeyError:
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
424 raise OptionValueError(self, value,
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
425 "Timezone name or numeric hour offset required")
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
426 return value
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
427
3835
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
428 class RegExpOption(Option):
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
429
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
430 """Regular Expression option (value is Regular Expression Object)"""
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
431
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
432 class_description = "Value is Python Regular Expression (UTF8-encoded)."
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
433
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
434 RE_TYPE = type(re.compile(""))
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
435
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
436 def __init__(self, config, section, setting,
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
437 default=NODEFAULT, description=None, aliases=None,
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
438 flags=0,
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
439 ):
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
440 self.flags = flags
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
441 Option.__init__(self, config, section, setting, default,
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
442 description, aliases)
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
443
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
444 def _value2str(self, value):
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
445 assert isinstance(value, self.RE_TYPE)
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
446 return value.pattern
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
447
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
448 def str2value(self, value):
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
449 if not isinstance(value, unicode):
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
450 value = str(value)
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
451 # if it is 7-bit ascii, use it as string,
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
452 # otherwise convert to unicode.
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
453 try:
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
454 value.decode("ascii")
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
455 except UnicodeError:
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
456 value = value.decode("utf-8")
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
457 return re.compile(value, self.flags)
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
458
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
459 ### Main configuration layout.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
460 # Config is described as a sequence of sections,
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
461 # where each section name is followed by a sequence
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
462 # of Option definitions. Each Option definition
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
463 # is a sequence containing class name and constructor
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
464 # parameters, starting from the setting name:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
465 # setting, default, [description, [aliases]]
2627
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
466 # Note: aliases should only exist in historical options for backwards
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
467 # compatibility - new options should *not* have aliases!
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
468 SETTINGS = (
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
469 ("main", (
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
470 (FilePathOption, "database", "db", "Database directory path."),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
471 (FilePathOption, "templates", "html",
2863
ae2907da636d added STATIC_FILES option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2850
diff changeset
472 "Path to the HTML templates directory."),
ae2907da636d added STATIC_FILES option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2850
diff changeset
473 (NullableFilePathOption, "static_files", "",
ae2907da636d added STATIC_FILES option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2850
diff changeset
474 "Path to directory holding additional static files\n"
ae2907da636d added STATIC_FILES option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2850
diff changeset
475 "available via Web UI. This directory may contain\n"
ae2907da636d added STATIC_FILES option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2850
diff changeset
476 "sitewide images, CSS stylesheets etc. and is searched\n"
ae2907da636d added STATIC_FILES option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2850
diff changeset
477 "for these files prior to the TEMPLATES directory\n"
ae2907da636d added STATIC_FILES option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2850
diff changeset
478 "specified above. If this option is not set, all static\n"
ae2907da636d added STATIC_FILES option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2850
diff changeset
479 "files are taken from the TEMPLATES directory"),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
480 (MailAddressOption, "admin_email", "roundup-admin",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
481 "Email address that roundup will complain to"
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
482 " if it runs into trouble."),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
483 (MailAddressOption, "dispatcher_email", "roundup-admin",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
484 "The 'dispatcher' is a role that can get notified\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
485 "of new items to the database.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
486 "It is used by the ERROR_MESSAGES_TO config setting."),
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
487 (Option, "email_from_tag", "",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
488 "Additional text to include in the \"name\" part\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
489 "of the From: address used in nosy messages.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
490 "If the sending user is \"Foo Bar\", the From: line\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
491 "is usually: \"Foo Bar\" <issue_tracker@tracker.example>\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
492 "the EMAIL_FROM_TAG goes inside the \"Foo Bar\" quotes like so:\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
493 "\"Foo Bar EMAIL_FROM_TAG\" <issue_tracker@tracker.example>"),
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
494 (Option, "new_web_user_roles", "User",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
495 "Roles that a user gets when they register"
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
496 " with Web User Interface.\n"
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
497 "This is a comma-separated string of role names"
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
498 " (e.g. 'Admin,User')."),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
499 (Option, "new_email_user_roles", "User",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
500 "Roles that a user gets when they register"
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
501 " with Email Gateway.\n"
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
502 "This is a comma-separated string of role names"
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
503 " (e.g. 'Admin,User')."),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
504 (Option, "error_messages_to", "user",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
505 # XXX This description needs better wording,
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
506 # with explicit allowed values list.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
507 "Send error message emails to the dispatcher, user, or both?\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
508 "The dispatcher is configured using the DISPATCHER_EMAIL"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
509 " setting."),
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
510 (Option, "html_version", "html4",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
511 "HTML version to generate. The templates are html4 by default.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
512 "If you wish to make them xhtml, then you'll need to change this\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
513 "var to 'xhtml' too so all auto-generated HTML is compliant.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
514 "Allowed values: html4, xhtml"),
3620
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
515 (TimezoneOption, "timezone", "UTC", "Default timezone offset,"
17124caa2491 added timezone option (based on patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
516 " applied when user's timezone is not set.",
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
517 ["DEFAULT_TIMEZONE"]),
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2646
diff changeset
518 (BooleanOption, "instant_registration", "no",
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2646
diff changeset
519 "Register new users instantly, or require confirmation via\n"
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2646
diff changeset
520 "email?"),
3469
d3b02352484f enable registration confirmation by web only [SF#1381675]
Richard Jones <richard@users.sourceforge.net>
parents: 3452
diff changeset
521 (BooleanOption, "email_registration_confirmation", "yes",
d3b02352484f enable registration confirmation by web only [SF#1381675]
Richard Jones <richard@users.sourceforge.net>
parents: 3452
diff changeset
522 "Offer registration confirmation by email or only through the web?"),
3544
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
523 (WordListOption, "indexer_stopwords", "",
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
524 "Additional stop-words for the full-text indexer specific to\n"
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
525 "your tracker. See the indexer source for the default list of\n"
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3469
diff changeset
526 "stop-words (eg. A,AND,ARE,AS,AT,BE,BUT,BY, ...)"),
3609
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
527 (OctalNumberOption, "umask", "02",
f2fda3e6fc8b umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents: 3548
diff changeset
528 "Defines the file creation mode mask."),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
529 )),
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
530 ("tracker", (
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
531 (Option, "name", "Roundup issue tracker",
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
532 "A descriptive name for your roundup instance."),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
533 (Option, "web", NODEFAULT,
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
534 "The web address that the tracker is viewable at.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
535 "This will be included in information"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
536 " sent to users of the tracker.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
537 "The URL MUST include the cgi-bin part or anything else\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
538 "that is required to get to the home page of the tracker.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
539 "You MUST include a trailing '/' in the URL."),
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
540 (MailAddressOption, "email", "issue_tracker",
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
541 "Email address that mail to roundup should go to."),
2922
9d2c5d7c6f85 added CoreConfig options TRACKER_LANGUAGE and MAILGW_LANGUAGE
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2906
diff changeset
542 (NullableOption, "language", "",
9d2c5d7c6f85 added CoreConfig options TRACKER_LANGUAGE and MAILGW_LANGUAGE
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2906
diff changeset
543 "Default locale name for this tracker.\n"
9d2c5d7c6f85 added CoreConfig options TRACKER_LANGUAGE and MAILGW_LANGUAGE
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2906
diff changeset
544 "If this option is not set, the language is determined\n"
9d2c5d7c6f85 added CoreConfig options TRACKER_LANGUAGE and MAILGW_LANGUAGE
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2906
diff changeset
545 "by OS environment variable LANGUAGE, LC_ALL, LC_MESSAGES,\n"
9d2c5d7c6f85 added CoreConfig options TRACKER_LANGUAGE and MAILGW_LANGUAGE
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2906
diff changeset
546 "or LANG, in that order of preference."),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
547 )),
3356
2913b42c0810 enabled disabling of REMOTE_USER for when it's not a valid username
Richard Jones <richard@users.sourceforge.net>
parents: 3155
diff changeset
548 ("web", (
3452
be505af06586 web_http_auth is boolean value
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3431
diff changeset
549 (BooleanOption, 'http_auth', "yes",
3356
2913b42c0810 enabled disabling of REMOTE_USER for when it's not a valid username
Richard Jones <richard@users.sourceforge.net>
parents: 3155
diff changeset
550 "Whether to use HTTP Basic Authentication, if present.\n"
2913b42c0810 enabled disabling of REMOTE_USER for when it's not a valid username
Richard Jones <richard@users.sourceforge.net>
parents: 3155
diff changeset
551 "Roundup will use either the REMOTE_USER or HTTP_AUTHORIZATION\n"
2913b42c0810 enabled disabling of REMOTE_USER for when it's not a valid username
Richard Jones <richard@users.sourceforge.net>
parents: 3155
diff changeset
552 "variables supplied by your web server (in that order).\n"
2913b42c0810 enabled disabling of REMOTE_USER for when it's not a valid username
Richard Jones <richard@users.sourceforge.net>
parents: 3155
diff changeset
553 "Set this option to 'no' if you do not wish to use HTTP Basic\n"
2913b42c0810 enabled disabling of REMOTE_USER for when it's not a valid username
Richard Jones <richard@users.sourceforge.net>
parents: 3155
diff changeset
554 "Authentication in your web interface."),
3425
2b27c92d64dc add web/use_browser_language option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3417
diff changeset
555 (BooleanOption, 'use_browser_language', "yes",
2b27c92d64dc add web/use_browser_language option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3417
diff changeset
556 "Whether to use HTTP Accept-Language, if present.\n"
2b27c92d64dc add web/use_browser_language option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3417
diff changeset
557 "Browsers send a language-region preference list.\n"
3548
61d48244e7a8 login may now be for a single session
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
558 "It's usually set in the client's browser or in their\n"
3425
2b27c92d64dc add web/use_browser_language option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3417
diff changeset
559 "Operating System.\n"
2b27c92d64dc add web/use_browser_language option
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3417
diff changeset
560 "Set this option to 'no' if you want to ignore it."),
3548
61d48244e7a8 login may now be for a single session
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
561 (BooleanOption, "debug", "no",
61d48244e7a8 login may now be for a single session
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
562 "Setting this option makes Roundup display error tracebacks\n"
61d48244e7a8 login may now be for a single session
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
563 "in the user's browser rather than emailing them to the\n"
61d48244e7a8 login may now be for a single session
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
564 "tracker admin."),
3356
2913b42c0810 enabled disabling of REMOTE_USER for when it's not a valid username
Richard Jones <richard@users.sourceforge.net>
parents: 3155
diff changeset
565 )),
2634
f47ca4541770 Both RDBMS backends now use the same config.ini section, [rdbms].
Richard Jones <richard@users.sourceforge.net>
parents: 2630
diff changeset
566 ("rdbms", (
f47ca4541770 Both RDBMS backends now use the same config.ini section, [rdbms].
Richard Jones <richard@users.sourceforge.net>
parents: 2630
diff changeset
567 (Option, 'name', 'roundup',
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
568 "Name of the database to use.",
2636
943f9d4592b8 Backwards-compatibility aliases for mysql config.
Richard Jones <richard@users.sourceforge.net>
parents: 2634
diff changeset
569 ['MYSQL_DBNAME']),
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2636
diff changeset
570 (NullableOption, 'host', 'localhost',
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
571 "Database server host.",
2636
943f9d4592b8 Backwards-compatibility aliases for mysql config.
Richard Jones <richard@users.sourceforge.net>
parents: 2634
diff changeset
572 ['MYSQL_DBHOST']),
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
573 (NullableOption, 'port', '',
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
574 "TCP port number of the database server.\n"
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
575 "Postgresql usually resides on port 5432 (if any),\n"
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
576 "for MySQL default port number is 3306.\n"
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
577 "Leave this option empty to use backend default"),
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2636
diff changeset
578 (NullableOption, 'user', 'roundup',
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
579 "Database user name that Roundup should use.",
2636
943f9d4592b8 Backwards-compatibility aliases for mysql config.
Richard Jones <richard@users.sourceforge.net>
parents: 2634
diff changeset
580 ['MYSQL_DBUSER']),
2634
f47ca4541770 Both RDBMS backends now use the same config.ini section, [rdbms].
Richard Jones <richard@users.sourceforge.net>
parents: 2630
diff changeset
581 (NullableOption, 'password', 'roundup',
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
582 "Database user password.",
2636
943f9d4592b8 Backwards-compatibility aliases for mysql config.
Richard Jones <richard@users.sourceforge.net>
parents: 2634
diff changeset
583 ['MYSQL_DBPASSWORD']),
3099
519b92df37dc handle ~/.my.cnf files for MySQL defaults [SF#1096031]
Richard Jones <richard@users.sourceforge.net>
parents: 2922
diff changeset
584 (NullableOption, 'read_default_file', '~/.my.cnf',
519b92df37dc handle ~/.my.cnf files for MySQL defaults [SF#1096031]
Richard Jones <richard@users.sourceforge.net>
parents: 2922
diff changeset
585 "Name of the MySQL defaults file.\n"
519b92df37dc handle ~/.my.cnf files for MySQL defaults [SF#1096031]
Richard Jones <richard@users.sourceforge.net>
parents: 2922
diff changeset
586 "Only used in MySQL connections."),
519b92df37dc handle ~/.my.cnf files for MySQL defaults [SF#1096031]
Richard Jones <richard@users.sourceforge.net>
parents: 2922
diff changeset
587 (NullableOption, 'read_default_group', 'roundup',
519b92df37dc handle ~/.my.cnf files for MySQL defaults [SF#1096031]
Richard Jones <richard@users.sourceforge.net>
parents: 2922
diff changeset
588 "Name of the group to use in the MySQL defaults file (.my.cnf).\n"
519b92df37dc handle ~/.my.cnf files for MySQL defaults [SF#1096031]
Richard Jones <richard@users.sourceforge.net>
parents: 2922
diff changeset
589 "Only used in MySQL connections."),
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
590 ), "Settings in this section are used"
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
591 " by Postgresql and MySQL backends only"
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
592 ),
2619
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
593 ("logging", (
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
594 (FilePathOption, "config", "",
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
595 "Path to configuration file for standard Python logging module.\n"
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
596 "If this option is set, logging configuration is loaded\n"
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
597 "from specified file; options 'filename' and 'level'\n"
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
598 "in this section are ignored."),
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
599 (FilePathOption, "filename", "",
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
600 "Log file name for minimal logging facility built into Roundup.\n"
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
601 "If no file name specified, log messages are written on stderr.\n"
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
602 "If above 'config' option is set, this option has no effect."),
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
603 (Option, "level", "ERROR",
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
604 "Minimal severity level of messages written to log file.\n"
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
605 "If above 'config' option is set, this option has no effect.\n"
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
606 "Allowed values: DEBUG, INFO, WARNING, ERROR"),
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
607 )),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
608 ("mail", (
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
609 (Option, "domain", NODEFAULT, "Domain name used for email addresses."),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
610 (Option, "host", NODEFAULT,
2844
5dddfc64816d mailgw backward-compatibility: "MAILHOST" alias for "MAIL_HOST"
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2839
diff changeset
611 "SMTP mail host that roundup will use to send mail",
5dddfc64816d mailgw backward-compatibility: "MAILHOST" alias for "MAIL_HOST"
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2839
diff changeset
612 ["MAILHOST"],),
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
613 (Option, "username", "", "SMTP login name.\n"
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
614 "Set this if your mail host requires authenticated access.\n"
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
615 "If username is not empty, password (below) MUST be set!"),
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
616 (Option, "password", NODEFAULT, "SMTP login password.\n"
2623
4e1030d49cea fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2622
diff changeset
617 "Set this if your mail host requires authenticated access."),
3878
6d14a3b4e295 allow admin to specify port and local hostname for SMTP connections
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3877
diff changeset
618 (IntegerNumberOption, "port", smtplib.SMTP_PORT,
6d14a3b4e295 allow admin to specify port and local hostname for SMTP connections
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3877
diff changeset
619 "Default port to send SMTP on.\n"
6d14a3b4e295 allow admin to specify port and local hostname for SMTP connections
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3877
diff changeset
620 "Set this if your mail server runs on a different port."),
6d14a3b4e295 allow admin to specify port and local hostname for SMTP connections
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3877
diff changeset
621 (NullableOption, "local_hostname", '',
6d14a3b4e295 allow admin to specify port and local hostname for SMTP connections
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3877
diff changeset
622 "The local hostname to use during SMTP transmission.\n"
6d14a3b4e295 allow admin to specify port and local hostname for SMTP connections
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3877
diff changeset
623 "Set this if your mail server requires something specific."),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
624 (BooleanOption, "tls", "no",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
625 "If your SMTP mail host provides or requires TLS\n"
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
626 "(Transport Layer Security) then set this option to 'yes'."),
2624
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
627 (NullableFilePathOption, "tls_keyfile", "",
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
628 "If TLS is used, you may set this option to the name\n"
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
629 "of a PEM formatted file that contains your private key."),
2624
f40d5f0f1086 added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2623
diff changeset
630 (NullableFilePathOption, "tls_certfile", "",
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
631 "If TLS is used, you may set this option to the name\n"
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
632 "of a PEM formatted certificate chain file."),
2627
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
633 (Option, "charset", "utf-8",
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
634 "Character set to encode email headers with.\n"
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
635 "We use utf-8 by default, as it's the most flexible.\n"
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
636 "Some mail readers (eg. Eudora) can't cope with that,\n"
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
637 "so you might need to specify a more limited character set\n"
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
638 "(eg. iso-8859-1).",
2627
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
639 ["EMAIL_CHARSET"]),
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
640 (FilePathOption, "debug", "",
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
641 "Setting this option makes Roundup to write all outgoing email\n"
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
642 "messages to this file *instead* of sending them.\n"
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
643 "This option has the same effect as environment variable"
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
644 " SENDMAILDEBUG.\nEnvironment variable takes precedence."),
3877
83748b2de465 Make addition of line about new submission/comment at top of each message...
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3854
diff changeset
645 (BooleanOption, "add_authorinfo", "yes",
83748b2de465 Make addition of line about new submission/comment at top of each message...
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3854
diff changeset
646 "Add a line with author information at top of all messages\n"
83748b2de465 Make addition of line about new submission/comment at top of each message...
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3854
diff changeset
647 "sent by roundup"),
83748b2de465 Make addition of line about new submission/comment at top of each message...
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3854
diff changeset
648 (BooleanOption, "add_authoremail", "yes",
83748b2de465 Make addition of line about new submission/comment at top of each message...
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3854
diff changeset
649 "Add the mail address of the author to the author information at\n"
3879
454ee9411e85 Fix truncated comment for add_authoremail option.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3878
diff changeset
650 "the top of all messages.\n"
454ee9411e85 Fix truncated comment for add_authoremail option.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3878
diff changeset
651 "If this is false but add_authorinfo is true, only the name\n"
454ee9411e85 Fix truncated comment for add_authoremail option.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3878
diff changeset
652 "of the actor is added which protects the mail address of the\n"
454ee9411e85 Fix truncated comment for add_authoremail option.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3878
diff changeset
653 "actor from being exposed at mail archives, etc."),
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
654 ), "Outgoing email options.\nUsed for nozy messages and approval requests"),
2627
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
655 ("mailgw", (
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
656 (BooleanOption, "keep_quoted_text", "yes",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
657 "Keep email citations when accepting messages.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
658 "Setting this to \"no\" strips out \"quoted\" text"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
659 " from the message.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
660 "Signatures are also stripped.",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
661 ["EMAIL_KEEP_QUOTED_TEXT"]),
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
662 (BooleanOption, "leave_body_unchanged", "no",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
663 "Preserve the email body as is - that is,\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
664 "keep the citations _and_ signatures.",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
665 ["EMAIL_LEAVE_BODY_UNCHANGED"]),
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
666 (Option, "default_class", "issue",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
667 "Default class to use in the mailgw\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
668 "if one isn't supplied in email subjects.\n"
2627
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
669 "To disable, leave the value blank.",
ce6a965a86f4 Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents: 2625
diff changeset
670 ["MAIL_DEFAULT_CLASS"]),
2922
9d2c5d7c6f85 added CoreConfig options TRACKER_LANGUAGE and MAILGW_LANGUAGE
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2906
diff changeset
671 (NullableOption, "language", "",
9d2c5d7c6f85 added CoreConfig options TRACKER_LANGUAGE and MAILGW_LANGUAGE
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2906
diff changeset
672 "Default locale name for the tracker mail gateway.\n"
9d2c5d7c6f85 added CoreConfig options TRACKER_LANGUAGE and MAILGW_LANGUAGE
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2906
diff changeset
673 "If this option is not set, mail gateway will use\n"
9d2c5d7c6f85 added CoreConfig options TRACKER_LANGUAGE and MAILGW_LANGUAGE
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2906
diff changeset
674 "the language of the tracker instance."),
3417
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
675 (Option, "subject_prefix_parsing", "strict",
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
676 "Controls the parsing of the [prefix] on subject\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
677 "lines in incoming emails. \"strict\" will return an\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
678 "error to the sender if the [prefix] is not recognised.\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
679 "\"loose\" will attempt to parse the [prefix] but just\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
680 "pass it through as part of the issue title if not\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
681 "recognised. \"none\" will always pass any [prefix]\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
682 "through as part of the issue title."),
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
683 (Option, "subject_suffix_parsing", "strict",
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
684 "Controls the parsing of the [suffix] on subject\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
685 "lines in incoming emails. \"strict\" will return an\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
686 "error to the sender if the [suffix] is not recognised.\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
687 "\"loose\" will attempt to parse the [suffix] but just\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
688 "pass it through as part of the issue title if not\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
689 "recognised. \"none\" will always pass any [suffix]\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
690 "through as part of the issue title."),
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
691 (Option, "subject_suffix_delimiters", "[]",
3725
65badf6ab7ad fix config documentation
Richard Jones <richard@users.sourceforge.net>
parents: 3620
diff changeset
692 "Defines the brackets used for delimiting the prefix and \n"
65badf6ab7ad fix config documentation
Richard Jones <richard@users.sourceforge.net>
parents: 3620
diff changeset
693 'suffix in a subject line. The presence of "suffix" in\n'
65badf6ab7ad fix config documentation
Richard Jones <richard@users.sourceforge.net>
parents: 3620
diff changeset
694 "the config option name is a historical artifact and may\n"
65badf6ab7ad fix config documentation
Richard Jones <richard@users.sourceforge.net>
parents: 3620
diff changeset
695 "be ignored."),
3417
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
696 (Option, "subject_content_match", "always",
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
697 "Controls matching of the incoming email subject line\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
698 "against issue titles in the case where there is no\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
699 "designator [prefix]. \"never\" turns off matching.\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
700 "\"creation + interval\" or \"activity + interval\"\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
701 "will match an issue for the interval after the issue's\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
702 "creation or last activity. The interval is a standard\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
703 "Roundup interval."),
3854
f4e8dc583256 Restored subject parser regexp to the string it was before the...
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3835
diff changeset
704 (RegExpOption, "refwd_re", "(\s*\W?\s*(fw|fwd|re|aw|sv|ang)\W)+",
3831
14ec78618bd5 Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents: 3820
diff changeset
705 "Regular expression matching a single reply or forward\n"
14ec78618bd5 Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents: 3820
diff changeset
706 "prefix prepended by the mailer. This is explicitly\n"
14ec78618bd5 Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents: 3820
diff changeset
707 "stripped from the subject during parsing."),
3835
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
708 (RegExpOption, "origmsg_re",
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
709 "^[>|\s]*-----\s?Original Message\s?-----$",
3831
14ec78618bd5 Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents: 3820
diff changeset
710 "Regular expression matching start of an original message\n"
14ec78618bd5 Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents: 3820
diff changeset
711 "if quoted the in body."),
3835
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
712 (RegExpOption, "sign_re", "^[>|\s]*-- ?$",
3831
14ec78618bd5 Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents: 3820
diff changeset
713 "Regular expression matching the start of a signature\n"
14ec78618bd5 Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents: 3820
diff changeset
714 "in the message body."),
3835
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
715 (RegExpOption, "eol_re", r"[\r\n]+",
3831
14ec78618bd5 Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents: 3820
diff changeset
716 "Regular expression matching end of line."),
3835
b66615f3007b added RegExpOption
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3831
diff changeset
717 (RegExpOption, "blankline_re", r"[\r\n]+\s*[\r\n]+",
3831
14ec78618bd5 Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents: 3820
diff changeset
718 "Regular expression matching a blank line."),
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
719 ), "Roundup Mail Gateway options"),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
720 ("nosy", (
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
721 (RunDetectorOption, "messages_to_author", "no",
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
722 "Send nosy messages to the author of the message.",
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
723 ["MESSAGES_TO_AUTHOR"]),
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
724 (Option, "signature_position", "bottom",
2630
a65bae7af6d1 NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2629
diff changeset
725 "Where to place the email signature.\n"
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
726 "Allowed values: top, bottom, none",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
727 ["EMAIL_SIGNATURE_POSITION"]),
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
728 (RunDetectorOption, "add_author", "new",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
729 "Does the author of a message get placed on the nosy list\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
730 "automatically? If 'new' is used, then the author will\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
731 "only be added when a message creates a new issue.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
732 "If 'yes', then the author will be added on followups too.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
733 "If 'no', they're never added to the nosy.\n",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
734 ["ADD_AUTHOR_TO_NOSY"]),
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
735 (RunDetectorOption, "add_recipients", "new",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
736 "Do the recipients (To:, Cc:) of a message get placed on the\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
737 "nosy list? If 'new' is used, then the recipients will\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
738 "only be added when a message creates a new issue.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
739 "If 'yes', then the recipients will be added on followups too.\n"
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
740 "If 'no', they're never added to the nosy.\n",
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
741 ["ADD_RECIPIENTS_TO_NOSY"]),
3417
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
742 (Option, "email_sending", "single",
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
743 "Controls the email sending from the nosy reactor. If\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
744 "\"multiple\" then a separate email is sent to each\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
745 "recipient. If \"single\" then a single email is sent with\n"
07c696890f55 mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents: 3356
diff changeset
746 "each recipient as a CC address."),
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3879
diff changeset
747 (IntegerNumberOption, "max_attachment_size", sys.maxint,
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3879
diff changeset
748 "Attachments larger than the given number of bytes\n"
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3879
diff changeset
749 "won't be attached to nosy mails. They will be replaced by\n"
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3879
diff changeset
750 "a link to the tracker's download page for the file.")
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
751 ), "Nosy messages sending"),
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
752 )
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
753
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
754 ### Configuration classes
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
755
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
756 class Config:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
757
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
758 """Base class for configuration objects.
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
759
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
760 Configuration options may be accessed as attributes or items
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
761 of instances of this class. All option names are uppercased.
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
762
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
763 """
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
764
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
765 # Config file name
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
766 INI_FILE = "config.ini"
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
767
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
768 # Object attributes that should not be taken as common configuration
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
769 # options in __setattr__ (most of them are initialized in constructor):
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
770 # builtin pseudo-option - package home directory
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
771 HOME = "."
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
772 # names of .ini file sections, in order
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
773 sections = None
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
774 # section comments
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
775 section_descriptions = None
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
776 # lists of option names for each section, in order
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
777 section_options = None
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
778 # mapping from option names and aliases to Option instances
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
779 options = None
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
780 # actual name of the config file. set on load.
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
781 filepath = os.path.join(HOME, INI_FILE)
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
782
3431
26dc6b92ac26 Config, CoreConfig: accept setting overrides in constructor
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3425
diff changeset
783 def __init__(self, config_path=None, layout=None, settings={}):
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
784 """Initialize confing instance
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
785
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
786 Parameters:
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
787 config_path:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
788 optional directory or file name of the config file.
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
789 If passed, load the config after processing layout (if any).
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
790 If config_path is a directory name, use default base name
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
791 of the config file.
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
792 layout:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
793 optional configuration layout, a sequence of
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
794 section definitions suitable for .add_section()
3431
26dc6b92ac26 Config, CoreConfig: accept setting overrides in constructor
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3425
diff changeset
795 settings:
26dc6b92ac26 Config, CoreConfig: accept setting overrides in constructor
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3425
diff changeset
796 optional setting overrides (dictionary).
26dc6b92ac26 Config, CoreConfig: accept setting overrides in constructor
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3425
diff changeset
797 The overrides are applied after loading config file.
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
798
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
799 """
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
800 # initialize option containers:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
801 self.sections = []
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
802 self.section_descriptions = {}
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
803 self.section_options = {}
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
804 self.options = {}
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
805 # add options from the layout structure
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
806 if layout:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
807 for section in layout:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
808 self.add_section(*section)
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
809 if config_path is not None:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
810 self.load(config_path)
3431
26dc6b92ac26 Config, CoreConfig: accept setting overrides in constructor
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3425
diff changeset
811 for (name, value) in settings.items():
26dc6b92ac26 Config, CoreConfig: accept setting overrides in constructor
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3425
diff changeset
812 self[name.upper()] = value
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
813
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
814 def add_section(self, section, options, description=None):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
815 """Define new config section
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
816
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
817 Parameters:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
818 section - name of the config.ini section
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
819 options - a sequence of Option definitions.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
820 Each Option definition is a sequence
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
821 containing class object and constructor
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
822 parameters, starting from the setting name:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
823 setting, default, [description, [aliases]]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
824 description - optional section comment
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
825
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
826 Note: aliases should only exist in historical options
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
827 for backwards compatibility - new options should
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
828 *not* have aliases!
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
829
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
830 """
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
831 if description or not self.section_descriptions.has_key(section):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
832 self.section_descriptions[section] = description
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
833 for option_def in options:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
834 klass = option_def[0]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
835 args = option_def[1:]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
836 option = klass(self, section, *args)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
837 self.add_option(option)
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
838
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
839 def add_option(self, option):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
840 """Adopt a new Option object"""
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
841 _section = option.section
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
842 _name = option.setting
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
843 if _section not in self.sections:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
844 self.sections.append(_section)
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
845 _options = self._get_section_options(_section)
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
846 if _name not in _options:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
847 _options.append(_name)
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
848 # (section, name) key is used for writing .ini file
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
849 self.options[(_section, _name)] = option
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
850 # make the option known under all of it's A.K.A.s
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
851 for _name in option.aliases:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
852 self.options[_name] = option
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
853
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
854 def update_option(self, name, klass,
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
855 default=NODEFAULT, description=None
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
856 ):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
857 """Override behaviour of early created option.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
858
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
859 Parameters:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
860 name:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
861 option name
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
862 klass:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
863 one of the Option classes
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
864 default:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
865 optional default value for the option
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
866 description:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
867 optional new description for the option
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
868
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
869 Conversion from current option value to new class value
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
870 is done via string representation.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
871
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
872 This method may be used to attach some brains
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
873 to options autocreated by UserConfig.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
874
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
875 """
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
876 # fetch current option
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
877 option = self._get_option(name)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
878 # compute constructor parameters
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
879 if default is NODEFAULT:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
880 default = option.default
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
881 if description is None:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
882 description = option.description
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
883 value = option.value2str(current=1)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
884 # resurrect the option
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
885 option = klass(self, option.section, option.setting,
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
886 default=default, description=description)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
887 # apply the value
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
888 option.set(value)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
889 # incorporate new option
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
890 del self[name]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
891 self.add_option(option)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
892
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
893 def reset(self):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
894 """Set all options to their default values"""
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
895 for _option in self.items():
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
896 _option.reset()
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
897
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
898 # Meant for commandline tools.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
899 # Allows automatic creation of configuration files like this:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
900 # roundup-server -p 8017 -u roundup --save-config
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
901 def getopt(self, args, short_options="", long_options=(),
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
902 config_load_options=("C", "config"), **options
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
903 ):
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
904 """Apply options specified in command line arguments.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
905
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
906 Parameters:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
907 args:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
908 command line to parse (sys.argv[1:])
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
909 short_options:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
910 optional string of letters for command line options
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
911 that are not config options
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
912 long_options:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
913 optional list of names for long options
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
914 that are not config options
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
915 config_load_options:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
916 two-element sequence (letter, long_option) defining
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
917 the options for config file. If unset, don't load
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
918 config file; otherwise config file is read prior
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
919 to applying other options. Short option letter
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
920 must not have a colon and long_option name must
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
921 not have an equal sign or '--' prefix.
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
922 options:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
923 mapping from option names to command line option specs.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
924 e.g. server_port="p:", server_user="u:"
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
925 Names are forced to lower case for commandline parsing
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
926 (long options) and to upper case to find config options.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
927 Command line options accepting no value are assumed
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
928 to be binary and receive value 'yes'.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
929
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
930 Return value: same as for python standard getopt(), except that
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
931 processed options are removed from returned option list.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
932
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
933 """
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
934 # take a copy of long_options
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
935 long_options = list(long_options)
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
936 # build option lists
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
937 cfg_names = {}
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
938 booleans = []
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
939 for (name, letter) in options.items():
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
940 cfg_name = name.upper()
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
941 short_opt = "-" + letter[0]
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
942 name = name.lower().replace("_", "-")
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
943 cfg_names.update({short_opt: cfg_name, "--" + name: cfg_name})
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
944
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
945 short_options += letter
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
946 if letter[-1] == ":":
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
947 long_options.append(name + "=")
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
948 else:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
949 booleans.append(short_opt)
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
950 long_options.append(name)
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
951
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
952 if config_load_options:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
953 short_options += config_load_options[0] + ":"
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
954 long_options.append(config_load_options[1] + "=")
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
955 # compute names that will be searched in getopt return value
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
956 config_load_options = (
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
957 "-" + config_load_options[0],
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
958 "--" + config_load_options[1],
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
959 )
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
960 # parse command line arguments
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
961 optlist, args = getopt.getopt(args, short_options, long_options)
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
962 # load config file if requested
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
963 if config_load_options:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
964 for option in optlist:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
965 if option[0] in config_load_options:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
966 self.load_ini(option[1])
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
967 optlist.remove(option)
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
968 break
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
969 # apply options
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
970 extra_options = []
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
971 for (opt, arg) in optlist:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
972 if (opt in booleans): # and not arg
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
973 arg = "yes"
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
974 try:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
975 name = cfg_names[opt]
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
976 except KeyError:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
977 extra_options.append((opt, arg))
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
978 else:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
979 self[name] = arg
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
980 return (extra_options, args)
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
981
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
982 # option and section locators (used in option access methods)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
983
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
984 def _get_option(self, name):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
985 try:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
986 return self.options[name]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
987 except KeyError:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
988 raise InvalidOptionError(name)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
989
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
990 def _get_section_options(self, name):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
991 return self.section_options.setdefault(name, [])
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
992
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
993 def _get_unset_options(self):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
994 """Return options that need manual adjustments
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
995
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
996 Return value is a dictionary where keys are section
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
997 names and values are lists of option names as they
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
998 appear in the config file.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
999
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1000 """
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1001 need_set = {}
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1002 for option in self.items():
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1003 if not option.isset():
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1004 need_set.setdefault(option.section, []).append(option.setting)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1005 return need_set
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1006
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1007 def _adjust_options(self, config):
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1008 """Load ad-hoc option definitions from ConfigParser instance."""
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1009 pass
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1010
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1011 def _get_name(self):
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1012 """Return the service name for config file heading"""
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1013 return ""
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1014
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1015 # file operations
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1016
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1017 def load_ini(self, config_path, defaults=None):
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1018 """Set options from config.ini file in given home_dir
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1019
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1020 Parameters:
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1021 config_path:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1022 directory or file name of the config file.
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1023 If config_path is a directory name, use default
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1024 base name of the config file
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1025 defaults:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1026 optional dictionary of defaults for ConfigParser
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1027
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1028 Note: if home_dir does not contain config.ini file,
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1029 no error is raised. Config will be reset to defaults.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1030
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1031 """
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1032 if os.path.isdir(config_path):
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1033 home_dir = config_path
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1034 config_path = os.path.join(config_path, self.INI_FILE)
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1035 else:
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1036 home_dir = os.path.dirname(config_path)
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1037 # parse the file
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1038 config_defaults = {"HOME": home_dir}
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1039 if defaults:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1040 config_defaults.update(defaults)
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1041 config = ConfigParser.ConfigParser(config_defaults)
2839
f965de0c1e75 fix load_ini: configuration file name was ignored after all
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2770
diff changeset
1042 config.read([config_path])
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1043 # .ini file loaded ok.
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1044 self.HOME = home_dir
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1045 self.filepath = config_path
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1046 self._adjust_options(config)
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1047 # set the options, starting from HOME
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1048 self.reset()
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1049 for option in self.items():
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1050 option.load_ini(config)
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1051
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1052 def load(self, home_dir):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1053 """Load configuration settings from home_dir"""
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1054 self.load_ini(home_dir)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1055
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1056 def save(self, ini_file=None):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1057 """Write current configuration to .ini file
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1058
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1059 'ini_file' argument, if passed, must be valid full path
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1060 to the file to write. If omitted, default file in current
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1061 HOME is created.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1062
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1063 If the file to write already exists, it is saved with '.bak'
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1064 extension.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1065
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1066 """
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1067 if ini_file is None:
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1068 ini_file = self.filepath
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1069 _tmp_file = os.path.splitext(ini_file)[0]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1070 _bak_file = _tmp_file + ".bak"
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1071 _tmp_file = _tmp_file + ".tmp"
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1072 _fp = file(_tmp_file, "wt")
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1073 _fp.write("# %s configuration file\n" % self._get_name())
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1074 _fp.write("# Autogenerated at %s\n" % time.asctime())
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1075 need_set = self._get_unset_options()
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1076 if need_set:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1077 _fp.write("\n# WARNING! Following options need adjustments:\n")
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1078 for section, options in need_set.items():
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1079 _fp.write("# [%s]: %s\n" % (section, ", ".join(options)))
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1080 for section in self.sections:
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1081 comment = self.section_descriptions.get(section, None)
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1082 if comment:
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1083 _fp.write("\n# ".join([""] + comment.split("\n")) +"\n")
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1084 else:
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1085 # no section comment - just leave a blank line between sections
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1086 _fp.write("\n")
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1087 _fp.write("[%s]\n" % section)
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1088 for option in self._get_section_options(section):
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1089 _fp.write("\n" + self.options[(section, option)].format())
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1090 _fp.close()
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1091 if os.access(ini_file, os.F_OK):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1092 if os.access(_bak_file, os.F_OK):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1093 os.remove(_bak_file)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1094 os.rename(ini_file, _bak_file)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1095 os.rename(_tmp_file, ini_file)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1096
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1097 # container emulation
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1098
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1099 def __len__(self):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1100 return len(self.items())
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1101
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1102 def __getitem__(self, name):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1103 if name == "HOME":
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1104 return self.HOME
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1105 else:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1106 return self._get_option(name).get()
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1107
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1108 def __setitem__(self, name, value):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1109 if name == "HOME":
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1110 self.HOME = value
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1111 else:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1112 self._get_option(name).set(value)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1113
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1114 def __delitem__(self, name):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1115 _option = self._get_option(name)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1116 _section = _option.section
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1117 _name = _option.setting
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1118 self._get_section_options(_section).remove(_name)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1119 del self.options[(_section, _name)]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1120 for _alias in _option.aliases:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1121 del self.options[_alias]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1122
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1123 def items(self):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1124 """Return the list of Option objects, in .ini file order
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1125
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1126 Note that HOME is not included in this list
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1127 because it is builtin pseudo-option, not a real Option
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1128 object loaded from or saved to .ini file.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1129
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1130 """
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1131 return [self.options[(_section, _name)]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1132 for _section in self.sections
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1133 for _name in self._get_section_options(_section)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1134 ]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1135
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1136 def keys(self):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1137 """Return the list of "canonical" names of the options
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1138
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1139 Unlike .items(), this list also includes HOME
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1140
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1141 """
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1142 return ["HOME"] + [_option.name for _option in self.items()]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1143
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1144 # .values() is not implemented because i am not sure what should be
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1145 # the values returned from this method: Option instances or config values?
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1146
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1147 # attribute emulation
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1148
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1149 def __setattr__(self, name, value):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1150 if self.__dict__.has_key(name) or hasattr(self.__class__, name):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1151 self.__dict__[name] = value
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1152 else:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1153 self._get_option(name).set(value)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1154
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1155 # Note: __getattr__ is not symmetric to __setattr__:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1156 # self.__dict__ lookup is done before calling this method
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1157 def __getattr__(self, name):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1158 return self[name]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1159
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1160 class UserConfig(Config):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1161
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1162 """Configuration for user extensions.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1163
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1164 Instances of this class have no predefined configuration layout.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1165 Options are created on the fly for each setting present in the
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1166 config file.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1167
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1168 """
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1169
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1170 def _adjust_options(self, config):
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1171 # config defaults appear in all sections.
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1172 # we'll need to filter them out.
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1173 defaults = config.defaults().keys()
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1174 # see what options are already defined and add missing ones
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1175 preset = [(option.section, option.setting) for option in self.items()]
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1176 for section in config.sections():
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1177 for name in config.options(section):
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1178 if ((section, name) not in preset) \
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1179 and (name not in defaults):
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1180 self.add_option(Option(self, section, name))
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1181
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1182 class CoreConfig(Config):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1183
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1184 """Roundup instance configuration.
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1185
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1186 Core config has a predefined layout (see the SETTINGS structure),
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1187 supports loading of old-style pythonic configurations and holds
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1188 three additional attributes:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1189 logging:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1190 instance logging engine, from standard python logging module
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1191 or minimalistic logger implemented in Roundup
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1192 detectors:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1193 user-defined configuration for detectors
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1194 ext:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1195 user-defined configuration for extensions
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1196
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1197 """
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1198
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1199 # module name for old style configuration
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1200 PYCONFIG = "config"
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1201 # user configs
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1202 ext = None
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1203 detectors = None
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1204
3431
26dc6b92ac26 Config, CoreConfig: accept setting overrides in constructor
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3425
diff changeset
1205 def __init__(self, home_dir=None, settings={}):
26dc6b92ac26 Config, CoreConfig: accept setting overrides in constructor
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3425
diff changeset
1206 Config.__init__(self, home_dir, layout=SETTINGS, settings=settings)
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1207 # load the config if home_dir given
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1208 if home_dir is None:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1209 self.init_logging()
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1210
2654
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1211 def _get_unset_options(self):
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1212 need_set = Config._get_unset_options(self)
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1213 # remove MAIL_PASSWORD if MAIL_USER is empty
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1214 if "password" in need_set.get("mail", []):
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1215 if not self["MAIL_USERNAME"]:
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1216 settings = need_set["mail"]
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1217 settings.remove("password")
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1218 if not settings:
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1219 del need_set["mail"]
eccb8e15a83f implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2649
diff changeset
1220 return need_set
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1221
2770
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1222 def _get_name(self):
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1223 return self["TRACKER_NAME"]
cdf6787ffeda implement getopt().
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2654
diff changeset
1224
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1225 def reset(self):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1226 Config.reset(self)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1227 if self.ext:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1228 self.ext.reset()
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1229 if self.detectors:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1230 self.detectors.reset()
2619
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
1231 self.init_logging()
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
1232
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
1233 def init_logging(self):
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
1234 _file = self["LOGGING_CONFIG"]
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
1235 if _file and os.path.isfile(_file):
3155
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1236 logging.config.fileConfig(_file)
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1237 return
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1238
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1239 _file = self["LOGGING_FILENAME"]
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1240 # set file & level on the root logger
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1241 logger = logging.getLogger()
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1242 if _file:
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1243 hdlr = logging.FileHandler(_file)
2619
4b4ca3bd086b added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2618
diff changeset
1244 else:
3155
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1245 hdlr = logging.StreamHandler(sys.stdout)
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1246 formatter = logging.Formatter(
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1247 '%(asctime)s %(levelname)s %(message)s')
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1248 hdlr.setFormatter(formatter)
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1249 # no logging API to remove all existing handlers!?!
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1250 logger.handlers = [hdlr]
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3099
diff changeset
1251 logger.setLevel(logging._levelNames[self["LOGGING_LEVEL"] or "ERROR"])
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1252
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1253 def load(self, home_dir):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1254 """Load configuration from path designated by home_dir argument"""
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1255 if os.path.isfile(os.path.join(home_dir, self.INI_FILE)):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1256 self.load_ini(home_dir)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1257 else:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1258 self.load_pyconfig(home_dir)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1259 self.init_logging()
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1260 self.ext = UserConfig(os.path.join(home_dir, "extensions"))
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1261 self.detectors = UserConfig(os.path.join(home_dir, "detectors"))
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1262
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1263 def load_ini(self, home_dir, defaults=None):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1264 """Set options from config.ini file in given home_dir directory"""
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1265 config_defaults = {"TRACKER_HOME": home_dir}
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1266 if defaults:
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1267 config_defaults.update(defaults)
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1268 Config.load_ini(self, home_dir, config_defaults)
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1269
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1270 def load_pyconfig(self, home_dir):
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1271 """Set options from config.py file in given home_dir directory"""
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1272 # try to locate and import the module
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1273 _mod_fp = None
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1274 try:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1275 try:
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1276 _module = imp.find_module(self.PYCONFIG, [home_dir])
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1277 _mod_fp = _module[0]
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1278 _config = imp.load_module(self.PYCONFIG, *_module)
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1279 except ImportError:
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1280 raise NoConfigError(home_dir)
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1281 finally:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1282 if _mod_fp is not None:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1283 _mod_fp.close()
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1284 # module loaded ok. set the options, starting from HOME
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1285 self.reset()
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1286 self.HOME = home_dir
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1287 for _option in self.items():
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1288 _option.load_pyconfig(_config)
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1289 # backward compatibility:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1290 # SMTP login parameters were specified as a tuple in old style configs
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1291 # convert them to new plain string options
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1292 _mailuser = getattr(_config, "MAILUSER", ())
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1293 if len(_mailuser) > 0:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1294 self.MAIL_USERNAME = _mailuser[0]
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1295 if len(_mailuser) > 1:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1296 self.MAIL_PASSWORD = _mailuser[1]
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1297
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1298 # in this config, HOME is also known as TRACKER_HOME
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1299 def __getitem__(self, name):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1300 if name == "TRACKER_HOME":
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1301 return self.HOME
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1302 else:
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1303 return Config.__getitem__(self, name)
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1304
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1305 def __setitem__(self, name, value):
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1306 if name == "TRACKER_HOME":
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1307 self.HOME = value
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1308 else:
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1309 self._get_option(name).set(value)
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1310
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1311 def __setattr__(self, name, value):
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1312 if name == "TRACKER_HOME":
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1313 self.__dict__["HOME"] = value
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1314 else:
2646
fd7b2fc1eb28 Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
1315 Config.__setattr__(self, name, value)
2618
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1316
8b08558e30a0 Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1317 # vim: set et sts=4 sw=4 :

Roundup Issue Tracker: http://roundup-tracker.org/