Added new extension mechanism for #425 #427
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull-requests introduces new extensions interface. The old
pkg_resource
based discovery was removed as it is not standard. We are now using the__init_subclass__()
method to register the subclasses.Added new class
Extensible
and all top-level abstract classes for extensions should inherit from this class. The top-level abstract classes have to provide their own__extension_type__
class variable.Extensions are created by subclassing one of the abstract class and explicitly providing extension name:
The extensions are retrieved through:
To manually register extension:
To register extension that lives in a module that is guaranteed to be loadable by standard Python means, but we don't want it to be loaded if not needed:
Note that we don't need to specify class as it will be automatically registered by loading that module when needed.
Other changes:
ext-info
command was renamed toextension
and an option--try-import
to test load-ability of the extensions was added.