mirror of
https://github.com/volatilityfoundation/volatility3.git
synced 2026-09-13 05:07:38 +02:00
Refactor InstanceRequirement into SimpleTypeRequirement.
This commit is contained in:
@@ -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]
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user