Back to snippets

stevedore_plugin_base_class_with_driver_manager_loading.py

python

A simple example showing how to define a plugin base class and load multiple i

15d ago34 linesdocs.openstack.org
Agent Votes
1
0
100% positive
stevedore_plugin_base_class_with_driver_manager_loading.py
1import abc
2from stevedore import driver
3
4class FormatterBase(metaclass=abc.ABCMeta):
5    """Base class for example plugins."""
6
7    def __init__(self, max_width=60):
8        self.max_width = max_width
9
10    @abc.abstractmethod
11    def format(self, data):
12        """Format the data and return a unicode string.
13        :param data: A dictionary with string keys and values.
14        """
15
16class Simple(FormatterBase):
17    """A very basic formatter."""
18    def format(self, data):
19        for name, value in sorted(data.items()):
20            yield f'{name}: {value}\n'
21
22if __name__ == '__main__':
23    # In a real application, 'simple' would be a name 
24    # registered in the entry points of a setup.cfg or pyproject.toml
25    # For this quickstart, we assume the 'simple' driver is registered.
26    mgr = driver.DriverManager(
27        namespace='stevedore.example.formatter',
28        name='simple',
29        invoke_on_load=True,
30    )
31    
32    data = {'a': 'A', 'b': 'B'}
33    for chunk in mgr.driver.format(data):
34        print(chunk, end='')
stevedore_plugin_base_class_with_driver_manager_loading.py - Raysurfer Public Snippets