[Mailman-Developers] Discussion On Project Idea "Preset List Settings Templates" .
Harshit Bansal
harshitbansal2015 at gmail.com
Sat Jan 30 14:11:29 EST 2016
Hi Steve,
On 1/27/16, Stephen J. Turnbull <stephen at xemacs.org> wrote:
> Harshit Bansal writes:
>
> > Figure out how to store and access the styles as some of them are
> > defined in the source code and the ones created by the by users would
> > have to be stored in databases?
>
> You also need a read/print repr. A Python dict may be a reasonable
> one, but JSON, YAML, init, etc could all be considered.
>
I am planning to use dictionary.
> > Styles will be stored in database in a dedicated table.
>
> You may want more than one table. Or you may be able to store them in
> the same table as currently used for list configs, with that table
> updated to allow "unstyled" as a value for its columns. (List id,
> for example, would be "unstyled", since it is supposed to be globally
> unique. Probably list name should be too, but domain would very
> likely be styled.)
>
> > The style manager will update all the styles 'predefined in the
> > source code' as well as the styles 'defined by users(by
> > implementing the IStyle interface)' to the database. Currently we
> > define a list of python import paths which are used for styles.
>
> Do you mean "configs"?
>
> > These will be collected in the style manager and then updated in
> > the database. These styles will be publicly viewable but the users
> > wouldn't be able to modify/change them(using Postorius) otherwise
> > we would have to update those changes in the files as well.
>
> I don't understand why you wouldn't be able to modify them. The
> presets probably should be read-only, and you might want to have a
> permissions system such that only the owner of the style can change
> it. Others would need to copy the style, modify the copy, and then
> apply it to their own lists.
>
Here, I meant to say that the 'predefined-styles' would be
read-only(not modifiable) while the style defined by the user(using
Postorius) would be readable/editable as per the permissions system.
> > Should we even allow changing list styles after lists have been
> > created?
>
> Certainly. Consider the case where a dramatic improvement in MUAs
> commonly used by a subscriber base makes it possible to use Wrap
> Message instead of Munge From as DMARC mitigation. You want to change
> all your lists in one go if they all have the same subscriber base
> (consider an enterprise setting where the subscribers are mostly using
> enterprise webmail).
>
> > Does changing a list style in database/source code changes
> > the settings for list?
>
> IMO, yes. But source code changes by the Mailman Project would not be
> allowed, except with a looong deprecation/obsoletion cycle, and source
> code changes should be documented as an operation with potential (bad)
> surprises for users.
>
> > I think there is no valid reason to not to allow changing list styles
> > after they have been created but there are two attributes about which
> > I am not sure these are:
> > 1: default_member_action
> > 2: default_nonmember_action
> > The value of these style attributes are first copied to
> > 'member.moderation_action'(moderation_action column of member table)
> > and then this saved value is used to decide the correct moderation
> > action. So changing the value of 'default_member_action' and
> > 'default_nonmember_action' have no effect on the saved values and
> > these will not change. This will have an undesired effect.
>
> I think that this is not a problem. We need to initialize all
> attributes to valid values, and this will probably be hard-coded in
> the source. Then we overlay this with site styles, domain styles,
> list styles, and user attributes, and do the lookup in the opposite
> order. In principle, for each attribute you would drill down as long
> as the value at the current level is "unstyled". In practice, you'd
> keep a cache of the current results of such lookups for users and
> lists to avoid slamming the database, and some way of identifying when
> the cache is out of date (such as a change "generation counter").
> Note that this explains some of the reason why source code changes
> need to be treated with care -- in some sense they are always
> "generation 0" because it's impossible to know in advance what
> generation the installlation is at.
>
> > So I think whenever a user changes these two attributes then we
> > will have to ask the user if he wants to change the saved values or
> > not. Another approach could be to leave these values unchanged and
> > bring this behavior to the knowledge of the user and if he wants
> > then he can manually change the moderation action of some selected
> > members but new members will automatically have their
> > moderation_action set to new the values.
>
> This is the current behavior for default_* actions; I don't see why it
> would change with the introduction of styles.
>
I wanted to ask that what should be the behavior when a user changes
the 'default_member_action' and 'default_nonmember_action' attributes.
Since, the values of these attributes are copied to the
'member.moderation_action' at the time of the creation of a new
member. So, any changes made to the 'default_member_action' and
'default_nonmember_action' attributes will not be reflected in the
already created members which I think may not be the desirable
behavior.
Please do correct me if am wrong somewhere.
> > How to apply styles to lists after they have been created? I will
> > expose the styles via REST API. Whenever the user(admin) will
> > change a mailing list's style in Postorius, it will automatically
> > call 'new_style.apply()' function which will update the mailinglist
> > table with the new values. This will change the list style.
>
> Be careful here. Since some styles percolate up to user level, a site
> with hundreds of thousands of lists and millions of users (they
> exist!) could really slam the database. The whole system would grind
> to a halt.
>
> > After implementing all these things, there will be two ways to create
> > and update styles :
> > 1: Using Postorius
> > 2: By defining a class implementing the IStyle interface and saving it
> > to a file.
>
> I don't see why you would allow 2 at all. IStyle is an internal
> thing, which would be used to provide a Python interface to the
> database backend. Unless you're thinking of dynamic styles (eg,
> theming the list page according to day of week or server load :-)?
>
Earlier, I was thinking to implement a way to add new styles using
Postorius as well as by adding a file to the source code containing a
class implementing the 'IStyle' interface to define the new style. But
now I have dropped this idea as I think that it would not be that
useful.
> Steve
>
Thanks,
Harshit Bansal.
IRC Nick : _Harshit_
More information about the Mailman-Developers
mailing list