Merge lp:~raj-abhilash1/mailman/mailman_fix into lp:mailman
- mailman_fix
- Merge into 3.0
Proposed by
Abhilash Raj
Status: | Merged |
---|---|
Merged at revision: | 7305 |
Proposed branch: | lp:~raj-abhilash1/mailman/mailman_fix |
Merge into: | lp:mailman |
Diff against target: |
440 lines (+53/-53) 19 files modified
src/mailman/bin/docs/master.rst (+1/-1) src/mailman/bin/mailman.py (+1/-1) src/mailman/bin/master.py (+1/-1) src/mailman/bin/runner.py (+1/-1) src/mailman/commands/cli_inject.py (+1/-1) src/mailman/commands/cli_status.py (+1/-1) src/mailman/commands/cli_withlist.py (+5/-5) src/mailman/commands/docs/aliases.rst (+1/-1) src/mailman/commands/docs/conf.rst (+2/-2) src/mailman/commands/docs/members.rst (+1/-1) src/mailman/commands/tests/test_create.py (+2/-2) src/mailman/config/config.py (+1/-1) src/mailman/config/schema.cfg (+2/-2) src/mailman/core/logging.py (+1/-1) src/mailman/docs/8-miles-high.rst (+1/-1) src/mailman/docs/DEVELOP.rst (+2/-2) src/mailman/docs/MTA.rst (+1/-1) src/mailman/docs/NEWS.rst (+24/-24) src/mailman/docs/START.rst (+4/-4) |
To merge this branch: | bzr merge lp:~raj-abhilash1/mailman/mailman_fix |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Mailman Coders | Pending | ||
Review via email: mp+252774@code.launchpad.net |
Commit message
Description of the change
Change bin/mailman with mailman everwhere in documentation and docstrings.
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'src/mailman/bin/docs/master.rst' |
2 | --- src/mailman/bin/docs/master.rst 2014-04-28 15:23:35 +0000 |
3 | +++ src/mailman/bin/docs/master.rst 2015-03-12 16:35:40 +0000 |
4 | @@ -4,7 +4,7 @@ |
5 | |
6 | Mailman has a number of *runner subprocesses* which perform long-running tasks |
7 | such as listening on an LMTP port, processing REST API requests, or processing |
8 | -messages in a queue directory. In normal operation, the ``bin/mailman`` |
9 | +messages in a queue directory. In normal operation, the ``mailman`` |
10 | command is used to start, stop and manage the runners. This is just a wrapper |
11 | around the real master watcher, which handles runner starting, stopping, |
12 | exiting, and log file reopening. |
13 | |
14 | === modified file 'src/mailman/bin/mailman.py' |
15 | --- src/mailman/bin/mailman.py 2015-01-05 01:22:39 +0000 |
16 | +++ src/mailman/bin/mailman.py 2015-03-12 16:35:40 +0000 |
17 | @@ -36,7 +36,7 @@ |
18 | |
19 | |
20 | |
21 | def main(): |
22 | - """bin/mailman""" |
23 | + """mailman""" |
24 | # Create the basic parser and add all globally common options. |
25 | parser = argparse.ArgumentParser( |
26 | description=_("""\ |
27 | |
28 | === modified file 'src/mailman/bin/master.py' |
29 | --- src/mailman/bin/master.py 2015-01-05 01:22:39 +0000 |
30 | +++ src/mailman/bin/master.py 2015-03-12 16:35:40 +0000 |
31 | @@ -320,7 +320,7 @@ |
32 | log.info('Master watcher caught SIGUSR1. Exiting.') |
33 | signal.signal(signal.SIGUSR1, sigusr1_handler) |
34 | # SIGTERM is what init will kill this process with when changing run |
35 | - # levels. It's also the signal 'bin/mailman stop' uses. |
36 | + # levels. It's also the signal 'mailman stop' uses. |
37 | def sigterm_handler(signum, frame): |
38 | for pid in self._kids: |
39 | os.kill(pid, signal.SIGTERM) |
40 | |
41 | === modified file 'src/mailman/bin/runner.py' |
42 | --- src/mailman/bin/runner.py 2015-01-05 01:22:39 +0000 |
43 | +++ src/mailman/bin/runner.py 2015-03-12 16:35:40 +0000 |
44 | @@ -116,7 +116,7 @@ |
45 | -r is required unless -l or -h is given, and its argument must |
46 | be one of the names displayed by the -l switch. |
47 | |
48 | - Normally, this script should be started from 'bin/mailman |
49 | + Normally, this script should be started from 'mailman |
50 | start'. Running it separately or with -o is generally useful |
51 | only for debugging. When run this way, the environment variable |
52 | $MAILMAN_UNDER_MASTER_CONTROL will be set which subtly changes |
53 | |
54 | === modified file 'src/mailman/commands/cli_inject.py' |
55 | --- src/mailman/commands/cli_inject.py 2015-01-05 01:22:39 +0000 |
56 | +++ src/mailman/commands/cli_inject.py 2015-03-12 16:35:40 +0000 |
57 | @@ -15,7 +15,7 @@ |
58 | # You should have received a copy of the GNU General Public License along with |
59 | # GNU Mailman. If not, see <http://www.gnu.org/licenses/>. |
60 | |
61 | -"""bin/mailman inject""" |
62 | +"""mailman inject""" |
63 | |
64 | __all__ = [ |
65 | 'Inject', |
66 | |
67 | === modified file 'src/mailman/commands/cli_status.py' |
68 | --- src/mailman/commands/cli_status.py 2015-01-05 01:22:39 +0000 |
69 | +++ src/mailman/commands/cli_status.py 2015-03-12 16:35:40 +0000 |
70 | @@ -15,7 +15,7 @@ |
71 | # You should have received a copy of the GNU General Public License along with |
72 | # GNU Mailman. If not, see <http://www.gnu.org/licenses/>. |
73 | |
74 | -"""bin/mailman status.""" |
75 | +"""mailman status.""" |
76 | |
77 | __all__ = [ |
78 | 'Status', |
79 | |
80 | === modified file 'src/mailman/commands/cli_withlist.py' |
81 | --- src/mailman/commands/cli_withlist.py 2015-01-05 01:22:39 +0000 |
82 | +++ src/mailman/commands/cli_withlist.py 2015-03-12 16:35:40 +0000 |
83 | @@ -15,7 +15,7 @@ |
84 | # You should have received a copy of the GNU General Public License along with |
85 | # GNU Mailman. If not, see <http://www.gnu.org/licenses/>. |
86 | |
87 | -"""bin/mailman withlist""" |
88 | +"""mailman withlist""" |
89 | |
90 | __all__ = [ |
91 | 'Shell', |
92 | @@ -190,7 +190,7 @@ |
93 | this script will take care of the housekeeping (see below for examples). In |
94 | that case, the general usage syntax is: |
95 | |
96 | - % bin/mailman withlist [options] listname [args ...]""")) |
97 | + % mailman withlist [options] listname [args ...]""")) |
98 | print() |
99 | print(_("""\ |
100 | Here's an example of how to use the --run option. Say you have a file in the |
101 | @@ -207,7 +207,7 @@ |
102 | You can print the list's posting address by running the following from the |
103 | command line: |
104 | |
105 | - % bin/mailman withlist -r listaddr mylist@example.com |
106 | + % mailman withlist -r listaddr mylist@example.com |
107 | Importing listaddr ... |
108 | Running listaddr.listaddr() ... |
109 | mylist@example.com""")) |
110 | @@ -215,7 +215,7 @@ |
111 | print(_("""\ |
112 | And you can print the list's request address by running: |
113 | |
114 | - % bin/mailman withlist -r listaddr.requestaddr mylist |
115 | + % mailman withlist -r listaddr.requestaddr mylist |
116 | Importing listaddr ... |
117 | Running listaddr.requestaddr() ... |
118 | mylist-request@example.com""")) |
119 | @@ -232,7 +232,7 @@ |
120 | |
121 | and run this from the command line: |
122 | |
123 | - % bin/mailman withlist -r change mylist@example.com 'My List'""")) |
124 | + % mailman withlist -r change mylist@example.com 'My List'""")) |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | === modified file 'src/mailman/commands/docs/aliases.rst' |
131 | --- src/mailman/commands/docs/aliases.rst 2014-04-28 15:23:35 +0000 |
132 | +++ src/mailman/commands/docs/aliases.rst 2015-03-12 16:35:40 +0000 |
133 | @@ -6,7 +6,7 @@ |
134 | Mailman up to the mail server. The details of this differ for each mail |
135 | server. Generally these files are automatically kept up-to-date when mailing |
136 | lists are created or removed, but you might occasionally need to manually |
137 | -regenerate the file. The ``bin/mailman aliases`` command does this. |
138 | +regenerate the file. The ``mailman aliases`` command does this. |
139 | |
140 | >>> class FakeArgs: |
141 | ... directory = None |
142 | |
143 | === modified file 'src/mailman/commands/docs/conf.rst' |
144 | --- src/mailman/commands/docs/conf.rst 2014-11-08 00:31:21 +0000 |
145 | +++ src/mailman/commands/docs/conf.rst 2015-03-12 16:35:40 +0000 |
146 | @@ -2,12 +2,12 @@ |
147 | Display configuration values |
148 | ============================ |
149 | |
150 | -Just like the `Postfix command postconf(1)`_, the ``bin/mailman conf`` command |
151 | +Just like the `Postfix command postconf(1)`_, the ``mailman conf`` command |
152 | lets you dump one or more Mailman configuration variables to standard output |
153 | or a file. |
154 | |
155 | Mailman's configuration is divided in multiple sections which contain multiple |
156 | -key-value pairs. The ``bin/mailman conf`` command allows you to display |
157 | +key-value pairs. The ``mailman conf`` command allows you to display |
158 | a specific key-value pair, or several key-value pairs. |
159 | |
160 | >>> class FakeArgs: |
161 | |
162 | === modified file 'src/mailman/commands/docs/members.rst' |
163 | --- src/mailman/commands/docs/members.rst 2015-01-05 01:40:47 +0000 |
164 | +++ src/mailman/commands/docs/members.rst 2015-03-12 16:35:40 +0000 |
165 | @@ -2,7 +2,7 @@ |
166 | Managing members |
167 | ================ |
168 | |
169 | -The ``bin/mailman members`` command allows a site administrator to display, |
170 | +The ``mailman members`` command allows a site administrator to display, |
171 | add, and remove members from a mailing list. |
172 | :: |
173 | |
174 | |
175 | === modified file 'src/mailman/commands/tests/test_create.py' |
176 | --- src/mailman/commands/tests/test_create.py 2015-01-05 01:22:39 +0000 |
177 | +++ src/mailman/commands/tests/test_create.py 2015-03-12 16:35:40 +0000 |
178 | @@ -15,7 +15,7 @@ |
179 | # You should have received a copy of the GNU General Public License along with |
180 | # GNU Mailman. If not, see <http://www.gnu.org/licenses/>. |
181 | |
182 | -"""Test `bin/mailman create`.""" |
183 | +"""Test `mailman create`.""" |
184 | |
185 | __all__ = [ |
186 | 'TestCreate', |
187 | @@ -51,7 +51,7 @@ |
188 | |
189 | |
190 | |
191 | class TestCreate(unittest.TestCase): |
192 | - """Test `bin/mailman create`.""" |
193 | + """Test `mailman create`.""" |
194 | |
195 | layer = ConfigLayer |
196 | |
197 | |
198 | === modified file 'src/mailman/config/config.py' |
199 | --- src/mailman/config/config.py 2015-01-06 02:12:52 +0000 |
200 | +++ src/mailman/config/config.py 2015-03-12 16:35:40 +0000 |
201 | @@ -149,7 +149,7 @@ |
202 | # First, collect all variables in a substitution dictionary. $VAR_DIR |
203 | # is taken from the environment or from the configuration file if the |
204 | # environment is not set. Because the var_dir setting in the config |
205 | - # file could be a relative path, and because 'bin/mailman start' |
206 | + # file could be a relative path, and because 'mailman start' |
207 | # chdirs to $VAR_DIR, without this subprocesses bin/master and |
208 | # bin/runner will create $VAR_DIR hierarchies under $VAR_DIR when that |
209 | # path is relative. |
210 | |
211 | === modified file 'src/mailman/config/schema.cfg' |
212 | --- src/mailman/config/schema.cfg 2015-01-05 01:22:39 +0000 |
213 | +++ src/mailman/config/schema.cfg 2015-03-12 16:35:40 +0000 |
214 | @@ -66,7 +66,7 @@ |
215 | |
216 | |
217 | [shell] |
218 | -# `bin/mailman shell` (also `withlist`) gives you an interactive prompt that |
219 | +# `mailman shell` (also `withlist`) gives you an interactive prompt that |
220 | # you can use to interact with an initialized and configured Mailman system. |
221 | # Use --help for more information. This section allows you to configure |
222 | # certain aspects of this interactive shell. |
223 | @@ -100,7 +100,7 @@ |
224 | queue_dir: $var_dir/queue |
225 | # This is the directory containing the Mailman 'runner' and 'master' commands |
226 | # if set to the string '$argv', it will be taken as the directory containing |
227 | -# the 'bin/mailman' command. |
228 | +# the 'mailman' command. |
229 | bin_dir: $argv |
230 | # All list-specific data. |
231 | list_data_dir: $var_dir/lists |
232 | |
233 | === modified file 'src/mailman/core/logging.py' |
234 | --- src/mailman/core/logging.py 2015-01-05 01:22:39 +0000 |
235 | +++ src/mailman/core/logging.py 2015-03-12 16:35:40 +0000 |
236 | @@ -104,7 +104,7 @@ |
237 | log_format = logger_config.format |
238 | log_datefmt = logger_config.datefmt |
239 | # Propagation to the root logger is how we handle logging to stderr |
240 | - # when the runners are not run as a subprocess of 'bin/mailman start'. |
241 | + # when the runners are not run as a subprocess of 'mailman start'. |
242 | log.propagate = (as_boolean(logger_config.propagate) |
243 | if propagate is None else propagate) |
244 | # Set the logger's level. |
245 | |
246 | === modified file 'src/mailman/docs/8-miles-high.rst' |
247 | --- src/mailman/docs/8-miles-high.rst 2013-05-14 04:45:26 +0000 |
248 | +++ src/mailman/docs/8-miles-high.rst 2015-03-12 16:35:40 +0000 |
249 | @@ -162,7 +162,7 @@ |
250 | Shell Commands |
251 | ============== |
252 | |
253 | -`bin/mailman`: This is an ubercommand, with subcommands for all the various |
254 | +`mailman`: This is an ubercommand, with subcommands for all the various |
255 | things admins might want to do, similar to Mailman 2's mailmanctl, but with |
256 | more functionality. |
257 | |
258 | |
259 | === modified file 'src/mailman/docs/DEVELOP.rst' |
260 | --- src/mailman/docs/DEVELOP.rst 2014-12-22 21:19:01 +0000 |
261 | +++ src/mailman/docs/DEVELOP.rst 2015-03-12 16:35:40 +0000 |
262 | @@ -72,10 +72,10 @@ |
263 | include the LMTP server, and the HTTP server for processing REST commands. |
264 | |
265 | All of the runners are managed by a *master watcher* process. When you type |
266 | -``bin/mailman start`` you are actually starting the master. Based on |
267 | +``mailman start`` you are actually starting the master. Based on |
268 | configuration options, the master will start the appropriate runners as |
269 | subprocesses, and it will watch for the clean exiting of these subprocesses |
270 | -when ``bin/mailman stop`` is called. |
271 | +when ``mailman stop`` is called. |
272 | |
273 | |
274 | Rules and chains |
275 | |
276 | === modified file 'src/mailman/docs/MTA.rst' |
277 | --- src/mailman/docs/MTA.rst 2014-04-15 14:34:04 +0000 |
278 | +++ src/mailman/docs/MTA.rst 2015-03-12 16:35:40 +0000 |
279 | @@ -143,7 +143,7 @@ |
280 | |
281 | By default, Mailman works well with Postfix transport maps as a way to deliver |
282 | incoming messages to Mailman's LMTP server. Mailman will automatically write |
283 | -the correct transport map when its ``bin/mailman aliases`` command is run, or |
284 | +the correct transport map when its ``mailman aliases`` command is run, or |
285 | whenever a mailing list is created or removed via other commands. To connect |
286 | Postfix to Mailman's LMTP server, add the following to Postfix's ``main.cf`` |
287 | file:: |
288 | |
289 | === modified file 'src/mailman/docs/NEWS.rst' |
290 | --- src/mailman/docs/NEWS.rst 2015-02-14 01:35:35 +0000 |
291 | +++ src/mailman/docs/NEWS.rst 2015-03-12 16:35:40 +0000 |
292 | @@ -173,7 +173,7 @@ |
293 | ------------- |
294 | * Add support for the Exim 4 MTA. [Stephen Turnbull] |
295 | * When creating the initial file system layout in ``var``, e.g. via |
296 | - ``bin/mailman info``, add an ``var/etc/mailman.cfg`` file if one does not |
297 | + ``mailman info``, add an ``var/etc/mailman.cfg`` file if one does not |
298 | already exist. Also, when initializing the system, look for that file as |
299 | the configuration file, just after ``./mailman.cfg`` and before |
300 | ``~/.mailman.cfg``. (LP: #1157861) |
301 | @@ -291,10 +291,10 @@ |
302 | |
303 | Commands |
304 | -------- |
305 | - * `bin/mailman aliases` loses the `--output`, `--format`, and `--simple` |
306 | + * `mailman aliases` loses the `--output`, `--format`, and `--simple` |
307 | arguments, and adds a `--directory` argument. This is necessary to support |
308 | the Postfix `relay_domains` support. |
309 | - * `bin/mailman start` was passing the wrong relative path to its runner |
310 | + * `mailman start` was passing the wrong relative path to its runner |
311 | subprocesses when -C was given. (LP: #982551) |
312 | * `bin/runner` command has been simplified and its command line options |
313 | reduced. Now, only one `-r/--runner` option may be provided and the |
314 | @@ -437,7 +437,7 @@ |
315 | (LP: #953497) |
316 | * List-Post should be NO when posting is not allowed. (LP: #987563) |
317 | * Non-unicode values in msgdata broke pending requests. (LP: #1031391) |
318 | - * Show devmode in `bin/mailman info` output. (LP: #1035028) |
319 | + * Show devmode in `mailman info` output. (LP: #1035028) |
320 | * Fix residual references to the old `IMailingList` archive variables. |
321 | (LP: #1031393) |
322 | |
323 | @@ -546,11 +546,11 @@ |
324 | |
325 | Commands |
326 | -------- |
327 | - * IPython support in `bin/mailman shell` contributed by Andrea Crotti. |
328 | + * IPython support in `mailman shell` contributed by Andrea Crotti. |
329 | (LP: #949926). |
330 | * The `mailman.cfg` configuration file will now automatically be detected if |
331 | it exists in an `etc` directory which is a sibling of argv0. |
332 | - * `bin/mailman shell` is an alias for `withlist`. |
333 | + * `mailman shell` is an alias for `withlist`. |
334 | * The `confirm` email command now properly handles `Re:`-like prefixes, even |
335 | if they contain non-ASCII characters. (LP: #685261) |
336 | * The `join` email command no longer accepts an `address=` argument. Its |
337 | @@ -638,10 +638,10 @@ |
338 | Commands |
339 | -------- |
340 | * `bin/qrunner` is renamed to `bin/runner`. |
341 | - * `bin/mailman aliases` gains `-f` and `-s` options. |
342 | - * `bin/mailman create` no longer allows a list to be created with bogus owner |
343 | + * `mailman aliases` gains `-f` and `-s` options. |
344 | + * `mailman create` no longer allows a list to be created with bogus owner |
345 | addresses. (LP: #778687) |
346 | - * `bin/mailman start --force` option is fixed. (LP: #869317) |
347 | + * `mailman start --force` option is fixed. (LP: #869317) |
348 | |
349 | Documentation |
350 | ------------- |
351 | @@ -715,11 +715,11 @@ |
352 | |
353 | Commands |
354 | -------- |
355 | - * 'bin/mailman start' does a better job of producing an error when Mailman is |
356 | + * 'mailman start' does a better job of producing an error when Mailman is |
357 | already running. |
358 | - * 'bin/mailman status' added for providing command line status on the master |
359 | + * 'mailman status' added for providing command line status on the master |
360 | queue runner watcher process. |
361 | - * 'bin/mailman info' now prints the REST root url and credentials. |
362 | + * 'mailman info' now prints the REST root url and credentials. |
363 | * mmsitepass removed; there is no more site password. |
364 | |
365 | REST |
366 | @@ -763,8 +763,8 @@ |
367 | Commands |
368 | -------- |
369 | * The functionality of 'bin/list_members' has been moved to |
370 | - 'bin/mailman members'. |
371 | - * 'bin/mailman info' -v/--verbose output displays the file system |
372 | + 'mailman members'. |
373 | + * 'mailman info' -v/--verbose output displays the file system |
374 | layout paths Mailman is currently configured to use. |
375 | |
376 | Configuration |
377 | @@ -825,8 +825,8 @@ |
378 | |
379 | Commands |
380 | -------- |
381 | - * 'bin/dumpdb' is now 'bin/mailman qfile' |
382 | - * 'bin/unshunt' is now 'bin/mailman unshunt' |
383 | + * 'bin/dumpdb' is now 'mailman qfile' |
384 | + * 'bin/unshunt' is now 'mailman unshunt' |
385 | * Mailman now properly handles the '-join', '-leave', and '-confirm' email |
386 | commands and sub-addresses. '-subscribe' and '-unsubscribe' are aliases |
387 | for '-join' and '-leave' respectively. |
388 | @@ -850,16 +850,16 @@ |
389 | |
390 | Commands |
391 | -------- |
392 | - * 'bin/inject' is now 'bin/mailman inject', with some changes |
393 | - * 'bin/mailmanctl' is now 'bin/mailman start|stop|reopen|restart' |
394 | - * 'bin/mailman version' is added (output same as 'bin/mailman --version') |
395 | - * 'bin/mailman members' command line arguments have changed. It also |
396 | + * 'inject' is now 'mailman inject', with some changes |
397 | + * 'mailmanctl' is now 'mailman start|stop|reopen|restart' |
398 | + * 'mailman version' is added (output same as 'mailman --version') |
399 | + * 'mailman members' command line arguments have changed. It also |
400 | now ignores blank lines and lines that start with #. It also no longer |
401 | quits when it sees an address that's already subscribed. |
402 | - * 'bin/withlist' is now 'bin/mailman withlist', and its command line |
403 | + * 'bin/withlist' is now 'mailman withlist', and its command line |
404 | arguments have changed. |
405 | - * 'bin/mailman lists' command line arguments have changed. |
406 | - * 'bin/genaliases' is now 'bin/mailman aliases' |
407 | + * 'mailman lists' command line arguments have changed. |
408 | + * 'bin/genaliases' is now 'mailman aliases' |
409 | |
410 | Architecture |
411 | ------------ |
412 | @@ -901,7 +901,7 @@ |
413 | |
414 | Architecture |
415 | ------------ |
416 | - * 'bin/mailman' is a new super-command for managing Mailman from the command |
417 | + * 'mailman' is a new super-command for managing Mailman from the command |
418 | line. Some older bin scripts have been converted, with more to come. |
419 | * Mailman now has an administrative REST interface which can be used to get |
420 | information from and manage Mailman remotely. |
421 | |
422 | === modified file 'src/mailman/docs/START.rst' |
423 | --- src/mailman/docs/START.rst 2015-01-05 01:22:39 +0000 |
424 | +++ src/mailman/docs/START.rst 2015-03-12 16:35:40 +0000 |
425 | @@ -188,14 +188,14 @@ |
426 | * ``/etc/mailman.cfg`` |
427 | * ``argv[0]/../../etc/mailman.cfg`` |
428 | |
429 | -Run the ``bin/mailman info`` command to see which configuration file Mailman |
430 | +Run the ``mailman info`` command to see which configuration file Mailman |
431 | will use, and where it will put its database file. The first time you run |
432 | this, Mailman will also create any necessary run-time directories and log |
433 | files. |
434 | |
435 | -Try ``bin/mailman --help`` for more details. You can use the commands |
436 | -``bin/mailman start`` to start the runner subprocess daemons, and of course |
437 | -``bin/mailman stop`` to stop them. |
438 | +Try ``mailman --help`` for more details. You can use the commands |
439 | +``mailman start`` to start the runner subprocess daemons, and of course |
440 | +``mailman stop`` to stop them. |
441 | |
442 | Postorius, a web UI for administration and subscriber settings, is being |
443 | developed as a separate, Django-based project. For now, the most flexible |