Refactor InstanceRequirement into SimpleTypeRequirement.

This commit is contained in:
Mike Auty
2018-09-20 14:56:16 +01:00
parent 222b5f14a7
commit 8d5a6ffdd4
4 changed files with 9 additions and 9 deletions
+1 -1
View File
@@ -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)
@@ -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]
+2 -2
View File
@@ -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,
@@ -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]