From 8d5a6ffdd4c41d5ab198a3bd6159dd9959022e79 Mon Sep 17 00:00:00 2001 From: Mike Auty Date: Thu, 20 Sep 2018 14:56:16 +0100 Subject: [PATCH] Refactor InstanceRequirement into SimpleTypeRequirement. --- volatility/cli/__init__.py | 2 +- volatility/framework/configuration/requirements.py | 8 ++++---- volatility/framework/interfaces/automagic.py | 4 ++-- volatility/framework/interfaces/configuration.py | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/volatility/cli/__init__.py b/volatility/cli/__init__.py index 0464f9a03..71cb8e59d 100644 --- a/volatility/cli/__init__.py +++ b/volatility/cli/__init__.py @@ -330,7 +330,7 @@ class CommandLine(interfaces.plugins.FileConsumerInterface): if not isinstance(requirement, interfaces.configuration.RequirementInterface): raise TypeError( "Plugin contains requirements that are not RequirementInterfaces: {}".format(configurable.__name__)) - if isinstance(requirement, interfaces.configuration.InstanceRequirement): + if isinstance(requirement, interfaces.configuration.SimpleTypeRequirement): additional["type"] = requirement.instance_type if isinstance(requirement, requirements.IntRequirement): additional["type"] = lambda x: int(x, 0) diff --git a/volatility/framework/configuration/requirements.py b/volatility/framework/configuration/requirements.py index 8ad1aa1d0..f66597171 100644 --- a/volatility/framework/configuration/requirements.py +++ b/volatility/framework/configuration/requirements.py @@ -31,17 +31,17 @@ class MultiRequirement(interfaces_configuration.RequirementInterface): return self.unsatisfied_children(context, config_path) -class BooleanRequirement(interfaces_configuration.InstanceRequirement): +class BooleanRequirement(interfaces_configuration.SimpleTypeRequirement): """A requirement type that contains a boolean value""" # Note, this must be a separate class in order to differentiate between Booleans and other instance requirements -class IntRequirement(interfaces_configuration.InstanceRequirement): +class IntRequirement(interfaces_configuration.SimpleTypeRequirement): """A requirement type that contains a single integer""" instance_type = int # type: typing.ClassVar[typing.Type] -class StringRequirement(interfaces_configuration.InstanceRequirement): +class StringRequirement(interfaces_configuration.SimpleTypeRequirement): """A requirement type that contains a single unicode string""" # TODO: Maybe add string length limits? instance_type = str # type: typing.ClassVar[typing.Type] @@ -52,7 +52,7 @@ class URIRequirement(StringRequirement): # TODO: Maybe a a check that to unsatisfied that the path really is a URL? -class BytesRequirement(interfaces_configuration.InstanceRequirement): +class BytesRequirement(interfaces_configuration.SimpleTypeRequirement): """A requirement type that contains a byte string""" instance_type = bytes # type: typing.ClassVar[typing.Type] diff --git a/volatility/framework/interfaces/automagic.py b/volatility/framework/interfaces/automagic.py index 2568892fa..65cfb69f0 100644 --- a/volatility/framework/interfaces/automagic.py +++ b/volatility/framework/interfaces/automagic.py @@ -39,11 +39,11 @@ class AutomagicInterface(interfaces_configuration.ConfigurableInterface, metacla config_path: str, *args, **kwargs) -> None: super().__init__(context, config_path) for requirement in self.get_requirements(): - if not isinstance(requirement, (interfaces_configuration.InstanceRequirement, + if not isinstance(requirement, (interfaces_configuration.SimpleTypeRequirement, volatility.framework.configuration.requirements.ChoiceRequirement, volatility.framework.configuration.requirements.ListRequirement)): raise ValueError( - "Automagic requirements must be an InstanceRequirement, ChoiceRequirement or ListRequirement") + "Automagic requirements must be an SimpleTypeRequirement, ChoiceRequirement or ListRequirement") def __call__(self, context: interfaces.context.ContextInterface, diff --git a/volatility/framework/interfaces/configuration.py b/volatility/framework/interfaces/configuration.py index 7744dc4c2..7adc70760 100644 --- a/volatility/framework/interfaces/configuration.py +++ b/volatility/framework/interfaces/configuration.py @@ -229,7 +229,7 @@ class RequirementInterface(validity.ValidityRoutines, metaclass = ABCMeta): A requirement is a means for plugins and other framework components to request specific configuration data. Requirements can either be simple types (such as - :class:`~volatility.framework.configuration.requirements.InstanceRequirement`, + :class:`~volatility.framework.configuration.requirements.SimpleTypeRequirement`, :class:`~volatility.framework.configuration.requirements.IntRequirement`, :class:`~volatility.framework.configuration.requirements.BytesRequirement` and :class:`~volatility.framework.configuration.requirements.StringRequirement`) or complex types (such @@ -325,7 +325,7 @@ class RequirementInterface(validity.ValidityRoutines, metaclass = ABCMeta): """ -class InstanceRequirement(RequirementInterface): +class SimpleTypeRequirement(RequirementInterface): """Class to represent a single simple type (such as a boolean, a string, an integer or a series of bytes)""" instance_type = bool # type: typing.ClassVar[typing.Type]