On 16/03/2023 01.47, Loris Bennett wrote:
I have written a program which, as part of the non-core functionality,
contains a module to generate email. This is currently very specific
to my organisation, so the main program contains
import myorg.mailer
This module is specific to my organisation in that it can ask an
internal server to generate individualised salutations for a given UID
which is known within the organisation.
I want to share the code with other institutions, so I would like to
1. replace the organisation-specific mailer with a generic one
2. allow an organisation-specific mailer to be used instead of the
generic one, if so desired
This may call for the plug-in pattern, ie the user will choose whether
to plug-in the specific, or the generic, module.
In Python, we would tend to use a Dependency Injection approach (one of
Uncle Bob's SOLID principles).
There's a rather abstract description of the plugin pattern at
https://martinfowler.com/eaaCatalog/plugin.html
OpenClassrooms has a more practical discussion at
https://openclassrooms.com/en/courses/6397806-design-your-software-architecture-using-industry-standard-patterns/6896171-plug-in-architecture
There is a PyPi library called pluggy (not used it). I've used informal
approaches using an ABC as a framework/reminder (see @George's response).
--
Regards,
=dn
--
https://mail.python.org/mailman/listinfo/python-list