summaryrefslogtreecommitdiff
path: root/core_changes.md
blob: 2fec7ee1feae24d5c5edfb7576843f2fae39e89d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
## Proposed changes to Mailman core

  1. Add configuration option similar to `config.styles.paths` but for general plugins. Paths in this list will be used to find components that Mailman will use, similar to `find_components` coupled with a standardized plugin structure:
    - `plugin package`
        - `handlers`
        - `rules`
        - `chains`
        - `commands`
        - `pipelines`
        - `styles`
        - `rest`

  2. Let plugins add Pipelines the same way they can add Handlers, Rules etc...
    - This means refactoring `BasePipeline`, `OwnerPipeline`, `PostingPipeline`, `VirginPipeline` from `mailman.core.pipelines.py` into a package `mailman.pipelines`
    - Use `find_components`, or rather it's sibling function created in 1.

  3. Let plugins subscribe to receive events.

  4. Let List creator specify List Style when creating it through Postorius.
     - The REST api supports it, add bindings to MailmanClient and a field to Postorius.

  5. Allow multiple callables in `pre_hook` and `post_hook` run in order specified.
     - Already a [MR](https://gitlab.com/mailman/mailman/merge_requests/264).

  6. Drop `ext_dir`.

  7. Let plugins add routes to the REST API. Under `/plugins/<plugin_name>/...`.

     - Create a new `IRESTSink` interface, that is callable `func(request, response)` and knows it's prefix relative to it's root.
     - Use `falcon.API.add_sink(callable, prefix)` to add all `IRESTSink`s from both `mailman.rest` package(unused, no sinks necessary for core) and plugin's `.rest` package.
     - [falcon.API.add_sink](https://falcon.readthedocs.io/en/stable/api/api.html#falcon.API.add_sink)

  8. ? Make all commands be able to require confirmation and make this a configurable option.

     - How?

  9. Add possibility of config inclusion to `mailman.cfg`, or of per-plugin config.


## Proposed changes to MailmanClient

 1. Add bindings for `/plugins/<plugin_name>/...`.

     - Pretty low-level, since each plugin can handle requests as it wants.