Source code for acdcli.plugins

import argparse


[docs]class RegisterLeafClasses(type):
[docs] def __init__(cls, name, bases, nmspc): super(RegisterLeafClasses, cls).__init__(name, bases, nmspc) if not hasattr(cls, 'registry'): cls.registry = set() cls.registry.add(cls) cls.registry -= set(bases) # Remove base classes
# metamethods, called on class objects: def __iter__(cls): return iter(cls.registry) def __str__(cls): if cls in cls.registry: return cls.__name__ return cls.__name__ + " leaf classes: " + ", ".join([sc.__name__ for sc in cls])
[docs]class Plugin(object, metaclass=RegisterLeafClasses): """Plugin base class. May be subject to changes.""" MIN_VERSION = None MAX_VERSION = None @classmethod
[docs] def check_version(cls, version: str) -> bool: from distutils.version import StrictVersion if cls.MIN_VERSION: if StrictVersion(cls.MIN_VERSION) > StrictVersion(version): return False if cls.MAX_VERSION: return StrictVersion(cls.MAX_VERSION) >= StrictVersion(version) return True
@classmethod def __str__(cls): return cls.__name__ @classmethod
[docs] def attach(cls, subparsers: argparse.ArgumentParser, log: list, **kwargs): pass
@staticmethod
[docs] def action(args: argparse.Namespace): pass