Mercurial > p > roundup > code
annotate roundup/configuration.py @ 2654:eccb8e15a83f
implemented section comments;
fix Config.load_ini(): HOME was not passed in defaults;
CoreConfig: don't require MAIL_PASSWORD if MAIL_USERNAME is not set
| author | Alexander Smishlajev <a1s@users.sourceforge.net> |
|---|---|
| date | Wed, 28 Jul 2004 09:46:58 +0000 |
| parents | 1df7d4a41da4 |
| children | cdf6787ffeda |
| 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 # |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
3 # $Id: configuration.py,v 1.16 2004-07-28 09:46:58 a1s 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 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
7 import imp |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
8 import os |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
9 import time |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
10 import ConfigParser |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
11 |
|
2620
92c820cfcc4a
cannot import roundup.instance because of import loop.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2619
diff
changeset
|
12 from roundup import rlog |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
13 # 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
|
14 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
15 ### Exceptions |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
16 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
17 class ConfigurationError(Exception): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
18 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
19 # without this, pychecker complains about missing class attribute... |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
20 args = () |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
21 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
22 class NoConfigError(ConfigurationError): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
23 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
24 """Raised when configuration loading fails |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
25 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
26 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
|
27 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
28 """ |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
29 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
30 def __str__(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
31 return "No valid configuration files found in directory %s" \ |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
32 % self.args[0] |
|
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 class InvalidOptionError(ConfigurationError, KeyError, AttributeError): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
35 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
36 """Attempted access to non-existing configuration option |
|
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 Configuration options may be accessed as configuration object |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
39 attributes or items. So this exception instances also are |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
40 instances of KeyError (invalid item access) and AttrributeError |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
41 (invalid attribute access). |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
42 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
43 Constructor parameter: option name |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
44 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
45 """ |
|
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 def __str__(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
48 return "Unsupported configuration option: %s" % self.args[0] |
|
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 class OptionValueError(ConfigurationError, ValueError): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
51 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
52 """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
|
53 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
54 Constructor parameters: Option instance, offending value |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
55 and optional info string. |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
56 |
|
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 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
59 def __str__(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
60 _args = self.args |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
61 _rv = "Invalid value for %(option)s: %(value)r" % { |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
62 "option": _args[0].name, "value": _args[1]} |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
63 if len(_args) > 2: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
64 _rv += "\n".join(("",) + _args[2:]) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
65 return _rv |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
66 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
67 class OptionUnsetError(ConfigurationError): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
68 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
69 """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
|
70 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
71 Constructor parameters: Option instance. |
|
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 """ |
|
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 def __str__(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
76 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
|
77 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
78 class UnsetDefaultValue: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
79 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
80 """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
|
81 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
82 def __str__(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
83 return "NO DEFAULT" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
84 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
85 NODEFAULT = UnsetDefaultValue() |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
86 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
87 ### Option classes |
|
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 class Option: |
|
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 """Single configuration option. |
|
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 Options have following attributes: |
|
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 config |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
96 reference to the containing Config object |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
97 section |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
98 name of the section in the tracker .ini file |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
99 setting |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
100 option name in the tracker .ini file |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
101 default |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
102 default option value |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
103 description |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
104 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
|
105 name |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
106 "canonical name" of the configuration option. |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
107 For items in the 'main' section this is uppercased |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
108 'setting' name. For other sections, the name is |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
109 composed of the section name and the setting name, |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
110 joined with underscore. |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
111 aliases |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
112 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
|
113 by old names used in previous Roundup versions. |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
114 "Canonical name" is also included. |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
115 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
116 The name and aliases are forced to be uppercase. |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
117 The setting name is forced to lowercase. |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
118 |
|
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 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
121 class_description = None |
|
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 def __init__(self, config, section, setting, |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
124 default=NODEFAULT, description=None, aliases=None |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
125 ): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
126 self.config = config |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
127 self.section = section |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
128 self.setting = setting.lower() |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
129 self.default = default |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
130 self.description = description |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
131 self.name = setting.upper() |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
132 if section != "main": |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
133 self.name = "_".join((section.upper(), self.name)) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
134 if aliases: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
135 self.aliases = [alias.upper() for alias in list(aliases)] |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
136 else: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
137 self.aliases = [] |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
138 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
|
139 # convert default to internal representation |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
140 if default is NODEFAULT: |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
141 _value = default |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
142 else: |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
143 _value = self.str2value(default) |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
144 # 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
|
145 self._value = self._default_value = _value |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
146 |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
147 def str2value(self, value): |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
148 """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
|
149 return 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 _value2str(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 external representation |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
153 |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
154 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
|
155 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
|
156 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
|
157 |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
158 """ |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
159 return str(value) |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
160 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
161 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
|
162 """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
|
163 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
164 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
|
165 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
166 """ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
167 if current: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
168 value = self._value |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
169 if value is NODEFAULT: |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
170 return str(value) |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
171 else: |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
172 return self._value2str(value) |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
173 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
174 def get(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
175 """Return current option value""" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
176 if self._value is NODEFAULT: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
177 raise OptionUnsetError(self) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
178 return self._value |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
179 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
180 def set(self, value): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
181 """Update the value""" |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
182 self._value = self.str2value(value) |
|
2618
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 reset(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
185 """Reset the value to default""" |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
186 self._value = self._default_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 isdefault(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
189 """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
|
190 return 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 isset(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
193 """Return True if the value is avaliable (either set or default)""" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
194 return self._value != NODEFAULT |
|
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 __str__(self): |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
197 return self.value2str(self._value) |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
198 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
199 def __repr__(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
200 if self.isdefault(): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
201 _format = "<%(class)s %(name)s (default): %(value)s>" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
202 else: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
203 _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
|
204 return _format % { |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
205 "class": self.__class__.__name__, |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
206 "name": self.name, |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
207 "default": self.value2str(self._default_value), |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
208 "value": self.value2str(self._value), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
209 } |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
210 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
211 def format(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
212 """Return .ini file fragment for this option""" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
213 _desc_lines = [] |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
214 for _description in (self.description, self.class_description): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
215 if _description: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
216 _desc_lines.extend(_description.split("\n")) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
217 # 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
|
218 if self.isset(): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
219 _is_set = "" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
220 else: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
221 _is_set = "#" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
222 _rv = "# %(description)s\n# Default: %(default)s\n" \ |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
223 "%(is_set)s%(name)s = %(value)s\n" % { |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
224 "description": "\n# ".join(_desc_lines), |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
225 "default": self.value2str(self._default_value), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
226 "name": self.setting, |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
227 "value": self.value2str(self._value), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
228 "is_set": _is_set |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
229 } |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
230 return _rv |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
231 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
232 def load_ini(self, config): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
233 """Load value from ConfigParser object""" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
234 if config.has_option(self.section, self.setting): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
235 self.set(config.get(self.section, self.setting)) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
236 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
237 def load_pyconfig(self, config): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
238 """Load value from old-style config (python module)""" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
239 for _name in self.aliases: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
240 if hasattr(config, _name): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
241 self.set(getattr(config, _name)) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
242 break |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
243 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
244 class BooleanOption(Option): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
245 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
246 """Boolean option: yes or no""" |
|
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_description = "Allowed values: yes, no" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
249 |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
250 def _value2str(self, value): |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
251 if value: |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
252 return "yes" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
253 else: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
254 return "no" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
255 |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
256 def str2value(self, value): |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
257 if type(value) == type(""): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
258 _val = value.lower() |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
259 if _val in ("yes", "true", "on", "1"): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
260 _val = 1 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
261 elif _val in ("no", "false", "off", "0"): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
262 _val = 0 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
263 else: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
264 raise OptionValueError(self, value, self.class_description) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
265 else: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
266 _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
|
267 return _val |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
268 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
269 class RunDetectorOption(Option): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
270 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
271 """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
|
272 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
273 class_description = "Allowed values: yes, no, new" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
274 |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
275 def str2value(self, value): |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
276 _val = value.lower() |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
277 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
|
278 return _val |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
279 else: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
280 raise OptionValueError(self, value, self.class_description) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
281 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
282 class MailAddressOption(Option): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
283 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
284 """Email address |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
285 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
286 Email addresses may be either fully qualified or local. |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
287 In the latter case MAIL_DOMAIN is automatically added. |
|
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 """ |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
290 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
291 def get(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
292 _val = Option.get(self) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
293 if "@" not in _val: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
294 _val = "@".join((_val, self.config["MAIL_DOMAIN"])) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
295 return _val |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
296 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
297 class FilePathOption(Option): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
298 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
299 """File or directory path name |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
300 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
301 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
|
302 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
303 """ |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
304 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
305 class_description = "The path may be either absolute or relative\n" \ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
306 " 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
|
307 |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
308 def get(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
309 _val = Option.get(self) |
|
2619
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
310 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
|
311 _val = os.path.join(self.config["HOME"], _val) |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
312 return _val |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
313 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
314 class FloatNumberOption(Option): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
315 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
316 """Floating point numbers""" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
317 |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
318 def str2value(self, value): |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
319 try: |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
320 return float(value) |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
321 except ValueError: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
322 raise OptionValueError(self, value, |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
323 "Floating point number required") |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
324 |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
325 def _value2str(self, value): |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
326 _val = str(value) |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
327 # strip fraction part from integer numbers |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
328 if _val.endswith(".0"): |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
329 _val = _val[:-2] |
|
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
330 return _val |
|
2618
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 class IntegerNumberOption(Option): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
333 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
334 """Integer numbers""" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
335 |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
336 def str2value(self, value): |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
337 try: |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
338 return int(value) |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
339 except ValueError: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
340 raise OptionValueError(self, value, "Integer number required") |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
341 |
|
2624
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
342 class NullableOption(Option): |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
343 |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
344 """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
|
345 |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
346 Default nullable strings list contains empty string only. |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
347 There is constructor parameter allowing to specify different nullables. |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
348 |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
349 Conversion to external representation returns the first of the NULL |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
350 strings list when the value is None. |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
351 |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
352 """ |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
353 |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
354 NULL_STRINGS = ("",) |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
355 |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
356 def __init__(self, config, section, setting, |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
357 default=NODEFAULT, description=None, aliases=None, |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
358 null_strings=NULL_STRINGS |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
359 ): |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
360 self.null_strings = list(null_strings) |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
361 Option.__init__(self, config, section, setting, default, |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
362 description, aliases) |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
363 |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
364 def str2value(self, value): |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
365 if value in self.null_strings: |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
366 return None |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
367 else: |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
368 return value |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
369 |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
370 def _value2str(self, value): |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
371 if value is None: |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
372 return self.null_strings[0] |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
373 else: |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
374 return value |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
375 |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
376 class NullableFilePathOption(NullableOption, FilePathOption): |
|
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
377 |
|
2630
a65bae7af6d1
NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2629
diff
changeset
|
378 # .get() and class_description are from FilePathOption, |
|
2624
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
379 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
|
380 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
|
381 # everything else taken from NullableOption (inheritance order) |
|
2624
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
382 |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
383 ### Main configuration layout. |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
384 # Config is described as a sequence of sections, |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
385 # where each section name is followed by a sequence |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
386 # of Option definitions. Each Option definition |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
387 # is a sequence containing class name and constructor |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
388 # parameters, starting from the setting name: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
389 # 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
|
390 # 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
|
391 # compatibility - new options should *not* have aliases! |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
392 SETTINGS = ( |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
393 ("main", ( |
|
2630
a65bae7af6d1
NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2629
diff
changeset
|
394 (FilePathOption, "database", "db", "Database directory path."), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
395 (FilePathOption, "templates", "html", |
|
2630
a65bae7af6d1
NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2629
diff
changeset
|
396 "Path to the HTML templates directory."), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
397 (MailAddressOption, "admin_email", "roundup-admin", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
398 "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
|
399 " if it runs into trouble."), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
400 (MailAddressOption, "dispatcher_email", "roundup-admin", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
401 "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
|
402 "of new items to the database.\n" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
403 "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
|
404 (Option, "email_from_tag", "", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
405 "Additional text to include in the \"name\" part\n" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
406 "of the From: address used in nosy messages.\n" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
407 "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
|
408 "is usually: \"Foo Bar\" <issue_tracker@tracker.example>\n" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
409 "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
|
410 "\"Foo Bar EMAIL_FROM_TAG\" <issue_tracker@tracker.example>"), |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
411 (Option, "new_web_user_roles", "User", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
412 "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
|
413 " with Web User Interface.\n" |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
414 "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
|
415 " (e.g. 'Admin,User')."), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
416 (Option, "new_email_user_roles", "User", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
417 "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
|
418 " with Email Gateway.\n" |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
419 "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
|
420 " (e.g. 'Admin,User')."), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
421 (Option, "error_messages_to", "user", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
422 # XXX This description needs better wording, |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
423 # with explicit allowed values list. |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
424 "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
|
425 "The dispatcher is configured using the DISPATCHER_EMAIL" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
426 " setting."), |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
427 (Option, "html_version", "html4", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
428 "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
|
429 "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
|
430 "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
|
431 "Allowed values: html4, xhtml"), |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
432 # It seems to me that all timezone offsets in the modern world |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
433 # are integral hours. However, there were fractional hour offsets |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
434 # in the past. Use float number for sure. |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
435 (FloatNumberOption, "timezone", "0", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
436 "Numeric timezone offset used when users do not choose their own\n" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
437 "in their settings.", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
438 ["DEFAULT_TIMEZONE"]), |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2646
diff
changeset
|
439 (BooleanOption, "instant_registration", "no", |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2646
diff
changeset
|
440 "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
|
441 "email?"), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
442 )), |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
443 ("tracker", ( |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
444 (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
|
445 "A descriptive name for your roundup instance."), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
446 (Option, "web", NODEFAULT, |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
447 "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
|
448 "This will be included in information" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
449 " sent to users of the tracker.\n" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
450 "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
|
451 "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
|
452 "You MUST include a trailing '/' in the URL."), |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
453 (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
|
454 "Email address that mail to roundup should go to."), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
455 )), |
|
2634
f47ca4541770
Both RDBMS backends now use the same config.ini section, [rdbms].
Richard Jones <richard@users.sourceforge.net>
parents:
2630
diff
changeset
|
456 ("rdbms", ( |
|
f47ca4541770
Both RDBMS backends now use the same config.ini section, [rdbms].
Richard Jones <richard@users.sourceforge.net>
parents:
2630
diff
changeset
|
457 (Option, 'name', 'roundup', |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
458 "Name of the database to use.", |
|
2636
943f9d4592b8
Backwards-compatibility aliases for mysql config.
Richard Jones <richard@users.sourceforge.net>
parents:
2634
diff
changeset
|
459 ['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
|
460 (NullableOption, 'host', 'localhost', |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
461 "Database server host.", |
|
2636
943f9d4592b8
Backwards-compatibility aliases for mysql config.
Richard Jones <richard@users.sourceforge.net>
parents:
2634
diff
changeset
|
462 ['MYSQL_DBHOST']), |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
463 (NullableOption, 'port', '', |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
464 "TCP port number of the database server.\n" |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
465 "Postgresql usually resides on port 5432 (if any),\n" |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
466 "for MySQL default port number is 3306.\n" |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
467 "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
|
468 (NullableOption, 'user', 'roundup', |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
469 "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
|
470 ['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
|
471 (NullableOption, 'password', 'roundup', |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
472 "Database user password.", |
|
2636
943f9d4592b8
Backwards-compatibility aliases for mysql config.
Richard Jones <richard@users.sourceforge.net>
parents:
2634
diff
changeset
|
473 ['MYSQL_DBPASSWORD']), |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
474 ), "Settings in this section are used" |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
475 " by Postgresql and MySQL backends only" |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
476 ), |
|
2619
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
477 ("logging", ( |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
478 (FilePathOption, "config", "", |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
479 "Path to configuration file for standard Python logging module.\n" |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
480 "If this option is set, logging configuration is loaded\n" |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
481 "from specified file; options 'filename' and 'level'\n" |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
482 "in this section are ignored."), |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
483 (FilePathOption, "filename", "", |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
484 "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
|
485 "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
|
486 "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
|
487 (Option, "level", "ERROR", |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
488 "Minimal severity level of messages written to log file.\n" |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
489 "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
|
490 "Allowed values: DEBUG, INFO, WARNING, ERROR"), |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
491 )), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
492 ("mail", ( |
|
2623
4e1030d49cea
fix: Option defaults were applied as strings...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2622
diff
changeset
|
493 (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
|
494 (Option, "host", NODEFAULT, |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
495 "SMTP mail host that roundup will use to send mail"), |
|
2630
a65bae7af6d1
NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2629
diff
changeset
|
496 (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
|
497 "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
|
498 "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
|
499 (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
|
500 "Set this if your mail host requires authenticated access."), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
501 (BooleanOption, "tls", "no", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
502 "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
|
503 "(Transport Layer Security) then set this option to 'yes'."), |
|
2624
f40d5f0f1086
added NullableOption, NullableFilePathOption;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2623
diff
changeset
|
504 (NullableFilePathOption, "tls_keyfile", "", |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
505 "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
|
506 "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
|
507 (NullableFilePathOption, "tls_certfile", "", |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
508 "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
|
509 "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
|
510 (Option, "charset", "utf-8", |
|
ce6a965a86f4
Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents:
2625
diff
changeset
|
511 "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
|
512 "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
|
513 "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
|
514 "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
|
515 "(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
|
516 ["EMAIL_CHARSET"]), |
|
ce6a965a86f4
Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents:
2625
diff
changeset
|
517 (FilePathOption, "debug", "", |
|
ce6a965a86f4
Move around some option groupings as I see them.
Richard Jones <richard@users.sourceforge.net>
parents:
2625
diff
changeset
|
518 "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
|
519 "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
|
520 "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
|
521 " SENDMAILDEBUG.\nEnvironment variable takes precedence."), |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
522 ), "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
|
523 ("mailgw", ( |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
524 (BooleanOption, "keep_quoted_text", "yes", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
525 "Keep email citations when accepting messages.\n" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
526 "Setting this to \"no\" strips out \"quoted\" text" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
527 " from the message.\n" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
528 "Signatures are also stripped.", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
529 ["EMAIL_KEEP_QUOTED_TEXT"]), |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
530 (BooleanOption, "leave_body_unchanged", "no", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
531 "Preserve the email body as is - that is,\n" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
532 "keep the citations _and_ signatures.", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
533 ["EMAIL_LEAVE_BODY_UNCHANGED"]), |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
534 (Option, "default_class", "issue", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
535 "Default class to use in the mailgw\n" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
536 "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
|
537 "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
|
538 ["MAIL_DEFAULT_CLASS"]), |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
539 ), "Roundup Mail Gateway options"), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
540 ("nosy", ( |
|
2630
a65bae7af6d1
NOSY_MESSAGES_TO_AUTHOR is RunDetectorOption (values: yes, no, new)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2629
diff
changeset
|
541 (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
|
542 "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
|
543 ["MESSAGES_TO_AUTHOR"]), |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
544 (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
|
545 "Where to place the email signature.\n" |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
546 "Allowed values: top, bottom, none", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
547 ["EMAIL_SIGNATURE_POSITION"]), |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
548 (RunDetectorOption, "add_author", "new", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
549 "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
|
550 "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
|
551 "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
|
552 "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
|
553 "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
|
554 ["ADD_AUTHOR_TO_NOSY"]), |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
555 (RunDetectorOption, "add_recipients", "new", |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
556 "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
|
557 "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
|
558 "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
|
559 "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
|
560 "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
|
561 ["ADD_RECIPIENTS_TO_NOSY"]), |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
562 ), "Nosy messages sending"), |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
563 ) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
564 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
565 ### Configuration classes |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
566 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
567 class Config: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
568 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
569 """Base class for configuration objects. |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
570 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
571 Configuration options may be accessed as attributes or items |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
572 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
|
573 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
574 """ |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
575 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
576 # Config file name |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
577 INI_FILE = "config.ini" |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
578 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
579 # 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
|
580 # 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
|
581 # 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
|
582 HOME = "." |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
583 # names of .ini file sections, in order |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
584 sections = None |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
585 # section comments |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
586 section_descriptions = None |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
587 # lists of option names for each section, in order |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
588 section_options = None |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
589 # mapping from option names and aliases to Option instances |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
590 options = None |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
591 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
592 def __init__(self, home_dir=None, layout=None): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
593 """Initialize confing instance |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
594 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
595 Parameters: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
596 home_dir: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
597 optional configuration directory. |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
598 If passed, load the config from that directory |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
599 after processing config layout (if any). |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
600 layout: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
601 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
|
602 section definitions suitable for .add_section() |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
603 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
604 """ |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
605 # initialize option containers: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
606 self.sections = [] |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
607 self.section_descriptions = {} |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
608 self.section_options = {} |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
609 self.options = {} |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
610 # 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
|
611 if layout: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
612 for section in layout: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
613 self.add_section(*section) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
614 if home_dir is not None: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
615 self.load(home_dir) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
616 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
617 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
|
618 """Define new config section |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
619 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
620 Parameters: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
621 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
|
622 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
|
623 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
|
624 containing class object and constructor |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
625 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
|
626 setting, default, [description, [aliases]] |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
627 description - optional section comment |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
628 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
629 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
|
630 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
|
631 *not* have aliases! |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
632 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
633 """ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
634 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
|
635 self.section_descriptions[section] = description |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
636 for option_def in options: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
637 klass = option_def[0] |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
638 args = option_def[1:] |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
639 option = klass(self, section, *args) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
640 self.add_option(option) |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
641 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
642 def add_option(self, option): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
643 """Adopt a new Option object""" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
644 _section = option.section |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
645 _name = option.setting |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
646 if _section not in self.sections: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
647 self.sections.append(_section) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
648 _options = self._get_section_options(_section) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
649 if _name not in _options: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
650 _options.append(_name) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
651 # (section, name) key is used for writing .ini file |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
652 self.options[(_section, _name)] = option |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
653 # 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
|
654 for _name in option.aliases: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
655 self.options[_name] = option |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
656 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
657 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
|
658 default=NODEFAULT, description=None |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
659 ): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
660 """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
|
661 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
662 Parameters: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
663 name: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
664 option name |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
665 klass: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
666 one of the Option classes |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
667 default: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
668 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
|
669 description: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
670 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
|
671 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
672 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
|
673 is done via string representation. |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
674 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
675 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
|
676 to options autocreated by UserConfig. |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
677 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
678 """ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
679 # fetch current option |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
680 option = self._get_option(name) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
681 # compute constructor parameters |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
682 if default is NODEFAULT: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
683 default = option.default |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
684 if description is None: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
685 description = option.description |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
686 value = option.value2str(current=1) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
687 # resurrect the option |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
688 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
|
689 default=default, description=description) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
690 # apply the value |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
691 option.set(value) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
692 # incorporate new option |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
693 del self[name] |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
694 self.add_option(option) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
695 |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
696 def reset(self): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
697 """Set all options to their default values""" |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
698 for _option in self.items(): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
699 _option.reset() |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
700 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
701 # This is a placeholder. TBD. |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
702 # Meant for commandline tools. |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
703 # 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
|
704 # roundup-server -p 8017 -u roundup --save-config |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
705 def getopt(self, args, **options): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
706 """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
|
707 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
708 Parameters: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
709 args: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
710 command line to parse (sys.argv[1:]) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
711 options: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
712 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
|
713 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
|
714 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
|
715 (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
|
716 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
|
717 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
|
718 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
719 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
|
720 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
|
721 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
722 """ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
723 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
724 # 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
|
725 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
726 def _get_option(self, name): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
727 try: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
728 return self.options[name] |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
729 except KeyError: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
730 raise InvalidOptionError(name) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
731 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
732 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
|
733 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
|
734 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
735 def _get_unset_options(self): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
736 """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
|
737 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
738 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
|
739 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
|
740 appear in the config file. |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
741 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
742 """ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
743 need_set = {} |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
744 for option in self.items(): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
745 if not option.isset(): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
746 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
|
747 return need_set |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
748 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
749 # file operations |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
750 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
751 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
|
752 """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
|
753 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
754 Parameters: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
755 home_dir: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
756 config home directory |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
757 defaults: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
758 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
|
759 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
760 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
|
761 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
|
762 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
763 """ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
764 # parse the file |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
765 config_defaults = {"HOME": home_dir} |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
766 if defaults: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
767 config_defaults.update(defaults) |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
768 config = ConfigParser.ConfigParser(config_defaults) |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
769 config.read([os.path.join(home_dir, self.INI_FILE)]) |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
770 # .ini file loaded ok. set the options, starting from HOME |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
771 self.reset() |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
772 self.HOME = home_dir |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
773 for option in self.items(): |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
774 option.load_ini(config) |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
775 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
776 def load(self, home_dir): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
777 """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
|
778 self.load_ini(home_dir) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
779 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
780 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
|
781 """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
|
782 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
783 '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
|
784 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
|
785 HOME is created. |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
786 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
787 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
|
788 extension. |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
789 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
790 """ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
791 if ini_file is None: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
792 ini_file = os.path.join(self.HOME, self.INI_FILE) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
793 _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
|
794 _bak_file = _tmp_file + ".bak" |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
795 _tmp_file = _tmp_file + ".tmp" |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
796 _fp = file(_tmp_file, "wt") |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
797 _fp.write("# %s configuration file\n" % self["TRACKER_NAME"]) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
798 _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
|
799 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
|
800 if need_set: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
801 _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
|
802 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
|
803 _fp.write("# [%s]: %s\n" % (section, ", ".join(options))) |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
804 for section in self.sections: |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
805 comment = self.section_descriptions.get(section, None) |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
806 if comment: |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
807 _fp.write("\n# ".join([""] + comment.split("\n")) +"\n") |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
808 else: |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
809 # no section comment - just leave a blank line between sections |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
810 _fp.write("\n") |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
811 _fp.write("[%s]\n" % section) |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
812 for option in self._get_section_options(section): |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
813 _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
|
814 _fp.close() |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
815 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
|
816 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
|
817 os.remove(_bak_file) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
818 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
|
819 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
|
820 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
821 # container emulation |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
822 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
823 def __len__(self): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
824 return len(self.items()) |
|
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 def __getitem__(self, name): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
827 if name == "HOME": |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
828 return self.HOME |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
829 else: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
830 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
|
831 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
832 def __setitem__(self, name, value): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
833 if name == "HOME": |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
834 self.HOME = value |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
835 else: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
836 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
|
837 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
838 def __delitem__(self, name): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
839 _option = self._get_option(name) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
840 _section = _option.section |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
841 _name = _option.setting |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
842 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
|
843 del self.options[(_section, _name)] |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
844 for _alias in _option.aliases: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
845 del self.options[_alias] |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
846 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
847 def items(self): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
848 """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
|
849 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
850 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
|
851 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
|
852 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
|
853 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
854 """ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
855 return [self.options[(_section, _name)] |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
856 for _section in self.sections |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
857 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
|
858 ] |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
859 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
860 def keys(self): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
861 """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
|
862 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
863 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
|
864 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
865 """ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
866 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
|
867 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
868 # .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
|
869 # 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
|
870 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
871 # attribute emulation |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
872 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
873 def __setattr__(self, name, value): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
874 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
|
875 self.__dict__[name] = value |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
876 else: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
877 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
|
878 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
879 # 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
|
880 # 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
|
881 def __getattr__(self, name): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
882 return self[name] |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
883 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
884 class UserConfig(Config): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
885 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
886 """Configuration for user extensions. |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
887 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
888 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
|
889 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
|
890 config file. |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
891 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
892 """ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
893 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
894 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
|
895 """Load 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
|
896 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
897 Parameters: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
898 home_dir: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
899 config home directory |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
900 defaults: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
901 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
|
902 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
903 Options are automatically created as they are read |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
904 from the config file. |
|
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 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
|
907 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
|
908 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
909 """ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
910 # parse the file |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
911 config_defaults = {"HOME": home_dir} |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
912 if defaults: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
913 config_defaults.update(defaults) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
914 config = ConfigParser.ConfigParser(defaults) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
915 config.read([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
|
916 # .ini file loaded ok. |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
917 self.HOME = home_dir |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
918 # 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
|
919 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
|
920 for section in config.sections(): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
921 for name in config.options(section): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
922 if (section, name) not in preset: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
923 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
|
924 # set the options |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
925 self.reset() |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
926 for option in self.items(): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
927 option.load_ini(config) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
928 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
929 class CoreConfig(Config): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
930 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
931 """Roundup instance configuration. |
|
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 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
|
934 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
|
935 three additional attributes: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
936 logging: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
937 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
|
938 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
|
939 detectors: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
940 user-defined configuration for detectors |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
941 ext: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
942 user-defined configuration for extensions |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
943 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
944 """ |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
945 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
946 # 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
|
947 PYCONFIG = "config" |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
948 # logging engine |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
949 logging = rlog.BasicLogging() |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
950 # user configs |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
951 ext = None |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
952 detectors = None |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
953 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
954 def __init__(self, home_dir=None): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
955 Config.__init__(self, home_dir, SETTINGS) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
956 # 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
|
957 if home_dir is None: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
958 self.init_logging() |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
959 |
|
2654
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
960 def _get_unset_options(self): |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
961 need_set = Config._get_unset_options(self) |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
962 # remove MAIL_PASSWORD if MAIL_USER is empty |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
963 if "password" in need_set.get("mail", []): |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
964 if not self["MAIL_USERNAME"]: |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
965 settings = need_set["mail"] |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
966 settings.remove("password") |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
967 if not settings: |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
968 del need_set["mail"] |
|
eccb8e15a83f
implemented section comments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2649
diff
changeset
|
969 return need_set |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
970 |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
971 def reset(self): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
972 Config.reset(self) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
973 if self.ext: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
974 self.ext.reset() |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
975 if self.detectors: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
976 self.detectors.reset() |
|
2619
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
977 self.init_logging() |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
978 |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
979 def init_logging(self): |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
980 _file = self["LOGGING_CONFIG"] |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
981 if _file and os.path.isfile(_file): |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
982 try: |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
983 import logging |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
984 _logging = logging |
|
2620
92c820cfcc4a
cannot import roundup.instance because of import loop.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2619
diff
changeset
|
985 except ImportError, _err: |
|
92c820cfcc4a
cannot import roundup.instance because of import loop.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2619
diff
changeset
|
986 _option = self._get_option("LOGGING_CONFIG") |
|
92c820cfcc4a
cannot import roundup.instance because of import loop.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2619
diff
changeset
|
987 raise OptionValueError(_option, _file, |
|
92c820cfcc4a
cannot import roundup.instance because of import loop.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2619
diff
changeset
|
988 "Python logging module is not available: %s" % _err) |
|
2619
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
989 _logging.fileConfig(_file) |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
990 else: |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
991 _logging = rlog.BasicLogging() |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
992 _file = self["LOGGING_FILENAME"] |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
993 if _file: |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
994 _logging.setFile(_file) |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
995 _logging.setLevel(self["LOGGING_LEVEL"] or "ERROR") |
|
4b4ca3bd086b
added logging support;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2618
diff
changeset
|
996 self.logging = _logging |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
997 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
998 def load(self, home_dir): |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
999 """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
|
1000 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
|
1001 self.load_ini(home_dir) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1002 else: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1003 self.load_pyconfig(home_dir) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1004 self.init_logging() |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1005 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
|
1006 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
|
1007 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1008 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
|
1009 """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
|
1010 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
|
1011 if defaults: |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1012 config_defaults.update(defaults) |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1013 Config.load_ini(self, home_dir, config_defaults) |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1014 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1015 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
|
1016 """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
|
1017 # try to locate and import the module |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1018 _mod_fp = None |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1019 try: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1020 try: |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1021 _module = imp.find_module(self.PYCONFIG, [home_dir]) |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1022 _mod_fp = _module[0] |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1023 _config = imp.load_module(self.PYCONFIG, *_module) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1024 except ImportError: |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1025 raise NoConfigError(home_dir) |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1026 finally: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1027 if _mod_fp is not None: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1028 _mod_fp.close() |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1029 # 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
|
1030 self.reset() |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1031 self.HOME = home_dir |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1032 for _option in self.items(): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1033 _option.load_pyconfig(_config) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1034 # backward compatibility: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1035 # 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
|
1036 # convert them to new plain string options |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1037 _mailuser = getattr(_config, "MAILUSER", ()) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1038 if len(_mailuser) > 0: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1039 self.MAIL_USERNAME = _mailuser[0] |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1040 if len(_mailuser) > 1: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1041 self.MAIL_PASSWORD = _mailuser[1] |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1042 |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1043 # 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
|
1044 def __getitem__(self, name): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1045 if name == "TRACKER_HOME": |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1046 return self.HOME |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1047 else: |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1048 return Config.__getitem__(self, name) |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1049 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1050 def __setitem__(self, name, value): |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1051 if name == "TRACKER_HOME": |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1052 self.HOME = value |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1053 else: |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1054 self._get_option(name).set(value) |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1055 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1056 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
|
1057 if name == "TRACKER_HOME": |
|
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1058 self.__dict__["HOME"] = value |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1059 else: |
|
2646
fd7b2fc1eb28
Config is now base class for all configurations...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2637
diff
changeset
|
1060 Config.__setattr__(self, name, value) |
|
2618
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1061 |
|
8b08558e30a0
Roundup Issue Tracker configuration support
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1062 # vim: set et sts=4 sw=4 : |
