#2912 - Actioning review comments. Identifiers have been removed from AbstractActions, _legacy folder has been deleted and correction to IPV4Address type hints

This commit is contained in:
Charlie Crane
2025-01-13 16:12:16 +00:00
parent a0a5f2ca38
commit 3cca3d4a5c
12 changed files with 17 additions and 1270 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,7 @@ from pydantic import BaseModel, ConfigDict
from primaite.interface.request import RequestFormat
class AbstractAction(BaseModel):
class AbstractAction(BaseModel, ABC):
"""Base class for actions."""
config: "AbstractAction.ConfigSchema"

View File

@@ -1,7 +1,7 @@
# © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
from __future__ import annotations
from ipaddress import IPv4Address
from abc import ABC
from typing import List
from pydantic import field_validator
@@ -9,7 +9,7 @@ from pydantic import field_validator
from primaite.game.agent.actions.manager import AbstractAction
from primaite.interface.request import RequestFormat
from primaite.utils.validation.ip_protocol import protocol_validator
from primaite.utils.validation.ipv4_address import ipv4_validator
from primaite.utils.validation.ipv4_address import ipv4_validator, IPV4Address
from primaite.utils.validation.port import port_validator
__all__ = (
@@ -20,7 +20,7 @@ __all__ = (
)
class ACLAddRuleAbstractAction(AbstractAction, identifier="acl_add_rule_abstract_action"):
class ACLAddRuleAbstractAction(AbstractAction, ABC):
"""Base abstract class for ACL add rule actions."""
config: ConfigSchema = "ACLAddRuleAbstractAction.ConfigSchema"
@@ -28,11 +28,11 @@ class ACLAddRuleAbstractAction(AbstractAction, identifier="acl_add_rule_abstract
class ConfigSchema(AbstractAction.ConfigSchema):
"""Configuration Schema base for ACL add rule abstract actions."""
src_ip: IPv4Address
src_ip: IPV4Address
protocol_name: str
permission: str
position: int
dst_ip: IPv4Address
dst_ip: IPV4Address
src_port: int
dst_port: int
src_wildcard: int

View File

@@ -1,4 +1,5 @@
# © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
from abc import ABC
from typing import ClassVar
from primaite.game.agent.actions.abstract import AbstractAction
@@ -14,7 +15,7 @@ __all__ = (
)
class NodeApplicationAbstractAction(AbstractAction, identifier="node_application_abstract_action"):
class NodeApplicationAbstractAction(AbstractAction, ABC):
"""
Base class for application actions.

View File

@@ -1,4 +1,5 @@
# © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
from abc import ABC
from typing import ClassVar
from primaite.game.agent.actions.manager import AbstractAction
@@ -16,7 +17,7 @@ __all__ = (
)
class NodeFileAbstractAction(AbstractAction, identifier="node_file_abstract_action"):
class NodeFileAbstractAction(AbstractAction, ABC):
"""Abstract base class for file actions.
Any action which applies to a file and uses node_name, folder_name, and file_name as its

View File

@@ -1,4 +1,5 @@
# © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
from abc import ABC
from typing import ClassVar
from primaite.game.agent.actions.manager import AbstractAction
@@ -13,7 +14,7 @@ __all__ = (
)
class NodeFolderAbstractAction(AbstractAction, identifier="node_folder_abstract"):
class NodeFolderAbstractAction(AbstractAction, ABC):
"""
Base class for folder actions.

View File

@@ -1,4 +1,5 @@
# © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
from abc import ABC
from typing import ClassVar
from primaite.game.agent.actions.manager import AbstractAction
@@ -7,7 +8,7 @@ from primaite.interface.request import RequestFormat
__all__ = ("HostNICEnableAction", "HostNICDisableAction")
class HostNICAbstractAction(AbstractAction, identifier="host_nic_abstract"):
class HostNICAbstractAction(AbstractAction, ABC):
"""
Abstract base class for NIC actions.

View File

@@ -127,9 +127,6 @@ class ActionManager:
:return: The constructed ActionManager.
:rtype: ActionManager
"""
if "ip_list" not in cfg["options"]:
cfg["options"]["ip_list"] = []
obj = cls(
actions=cfg["action_list"],
**cfg["options"],

View File

@@ -207,10 +207,6 @@ class SoftwareManager:
:param session_id: The Session ID from which the payload originates. Optional.
:return: True if the payload was successfully sent, False otherwise.
"""
print(payload)
print(dest_ip_address)
print(src_port)
print(session_id)
return self.session_manager.receive_payload_from_software_manager(
payload=payload,
dst_ip_address=dest_ip_address,

View File

@@ -31,7 +31,7 @@ def ipv4_validator(v: Any) -> IPv4Address:
IPV4Address: Final[Annotated] = Annotated[IPv4Address, BeforeValidator(ipv4_validator)]
"""
IPv4Address with with IPv4Address with with pre-validation and auto-conversion from str using ipv4_validator..
IPv4Address with pre-validation and auto-conversion from str using ipv4_validator..
This type is essentially an IPv4Address from the standard library's ipaddress module,
but with added validation logic. If you use this custom type, the ipv4_validator function

View File

@@ -5,7 +5,7 @@ import pytest
from primaite.game.agent.actions import (
ActionManager,
do_nothingAction,
DoNothingAction,
NodeServiceDisableAction,
NodeServiceEnableAction,
NodeServicePauseAction,

View File

@@ -81,7 +81,7 @@ class TestWebpageUnavailabilitySticky:
reward = WebpageUnavailablePenalty(config=schema)
# no response codes yet, reward is 0
action, params, request = "DO_NOTHING", {}, ["do_nothing"]
action, params, request = "do_nothing", {}, ["do_nothing"]
response = RequestResponse(status="success", data={})
browser_history = []
state = {"network": {"nodes": {"computer": {"applications": {"WebBrowser": {"history": browser_history}}}}}}