forked from p15670423/monkey
Separate collecting the classes from instancing them. Required for exploiter plugin
This commit is contained in:
parent
7cefba293a
commit
55d7eba2d8
|
@ -4,7 +4,7 @@ import logging
|
||||||
from abc import ABCMeta, abstractmethod
|
from abc import ABCMeta, abstractmethod
|
||||||
from os.path import dirname, basename, isfile, join
|
from os.path import dirname, basename, isfile, join
|
||||||
import glob
|
import glob
|
||||||
from typing import Sequence, TypeVar, Type
|
from typing import Sequence, TypeVar, Type, Callable
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -25,11 +25,11 @@ class Plugin(metaclass=ABCMeta):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_instances(cls) -> Sequence[Type[Plugin_type]]:
|
def get_classes(cls) -> Sequence[Callable]:
|
||||||
"""
|
"""
|
||||||
Returns the type objects from base_package_spec.
|
Returns the class objects from base_package_spec
|
||||||
base_package name and file must refer to the same package otherwise bad results
|
base_package name and file must refer to the same package otherwise bad results
|
||||||
:return: A list of parent_class objects.
|
:return: A list of parent_class classes.
|
||||||
"""
|
"""
|
||||||
objects = []
|
objects = []
|
||||||
candidate_files = _get_candidate_files(cls.base_package_file())
|
candidate_files = _get_candidate_files(cls.base_package_file())
|
||||||
|
@ -47,13 +47,29 @@ class Plugin(metaclass=ABCMeta):
|
||||||
LOG.debug("Checking if should run object {}".format(class_object.__name__))
|
LOG.debug("Checking if should run object {}".format(class_object.__name__))
|
||||||
try:
|
try:
|
||||||
if class_object.should_run(class_object.__name__):
|
if class_object.should_run(class_object.__name__):
|
||||||
instance = class_object()
|
objects.append(class_object)
|
||||||
objects.append(instance)
|
|
||||||
LOG.debug("Added {} to list".format(class_object.__name__))
|
LOG.debug("Added {} to list".format(class_object.__name__))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
LOG.warning("Exception {} when checking if {} should run".format(str(e), class_object.__name__))
|
LOG.warning("Exception {} when checking if {} should run".format(str(e), class_object.__name__))
|
||||||
return objects
|
return objects
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_instances(cls) -> Sequence[Type[Plugin_type]]:
|
||||||
|
"""
|
||||||
|
Returns the type objects from base_package_spec.
|
||||||
|
base_package name and file must refer to the same package otherwise bad results
|
||||||
|
:return: A list of parent_class objects.
|
||||||
|
"""
|
||||||
|
class_objects = cls.get_classes()
|
||||||
|
instances = []
|
||||||
|
for class_object in class_objects:
|
||||||
|
try:
|
||||||
|
instance = class_object()
|
||||||
|
instances.append(instance)
|
||||||
|
except Exception as e:
|
||||||
|
LOG.warning("Exception {} when initializing {}".format(str(e), class_object.__name__))
|
||||||
|
return instances
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def base_package_file():
|
def base_package_file():
|
||||||
|
|
Loading…
Reference in New Issue