metaclass
This module defines a metaclass that should be used for all plugin types.
MarkerMixin ¶
Base class for Metador-internal marker mixins.
It can be used to hand out copies of classes with markings, without actually modifying the original class.
Source code in src/metador_core/plugin/metaclass.py
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 45 46 47 |
|
UndefVersion ¶
Bases: MarkerMixin
Marker for a plugin class retrieved with no specified version.
We have to do this crazy thing, because wrapt.ObjectProxy-wrapped classes can be transparently derived, and what is even worse, the derived class is not wrapped anymore.
The mixin subclass approach therefore makes more sense here, as the metaclass then can check for its presence.
Source code in src/metador_core/plugin/metaclass.py
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
|
PluginMetaclassMixin ¶
Bases: type
Metaclass mixin to be used with plugins of any group.
It provides an is_plugin property to classes to quickly check if they seem to be valid registered plugins.
It ensures that:
* the Plugin
inner class is not automatically inherited
* registered Plugin classes cannot be subclassed if loaded without a fixed version
For the second part, this works together with the PluginGroup implementation,
which makes sure that schemas requested without versions are not actually handed out,
but instead users get a subclass with the UndefVersion
mixin we can detect here.
Source code in src/metador_core/plugin/metaclass.py
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
|