Source code for csle_common.dao.emulation_config.flag

from typing import Dict, Any, Union
from csle_base.json_serializable import JSONSerializable


[docs]class Flag(JSONSerializable): """ Class that represents a flag in the environment """ def __init__(self, name: str, dir: str, id: int, path: str, requires_root: bool = False, score: int = 1): """ Initializes the DTO :param name: the name of the flag :param id: the id of the flag :param dir: the directory :param path: the path of the flag :param requires_root: whether the flag requires root or not :param score: the score of the flag """ self.name = name self.id = id self.path = path self.requires_root = requires_root self.score = score self.dir = dir def __str__(self) -> str: """ :return: a string representation of the object """ return "name:{}, id:{}, path:{}, requires_root:{}, score:{}, dir:{}".format( self.name, self.id, self.path, self.requires_root, self.score, self.dir )
[docs] @staticmethod def from_dict(d: Dict[str, Any]) -> "Flag": """ Converts a dict representation into an instance :param d: the dict to convert :return: the created instance """ obj = Flag( name=d["name"], dir=d["dir"], id=d["id"], path=d["path"], requires_root=d["requires_root"], score=d["score"] ) return obj
[docs] def to_dict(self) -> Dict[str, Union[str, int, bool]]: """ Converts the object to a dict representation :return: a dict representation of the object """ d: Dict[str, Union[str, int, bool]] = {} d["name"] = self.name d["dir"] = self.dir d["id"] = self.id d["path"] = self.path d["requires_root"] = self.requires_root d["score"] = self.score return d
def __hash__(self) -> int: """ :return: a hash representation of the object """ return hash(self.id) def __eq__(self, other) -> bool: """ Tests equality with another flag :param other: the flag to compare with :return: True if equal otherwise False """ if not isinstance(other, Flag): # don't attempt to compare against unrelated types return NotImplemented return self.id == other.id and self.name == other.name and self.path == other.path
[docs] @staticmethod def from_json_file(json_file_path: str) -> "Flag": """ Reads a json file and converts it to a DTO :param json_file_path: the json file path :return: the converted DTO """ import io import json with io.open(json_file_path, 'r') as f: json_str = f.read() return Flag.from_dict(json.loads(json_str))
[docs] def copy(self) -> "Flag": """ :return: a copy of the DTO """ return Flag.from_dict(self.to_dict())
[docs] @staticmethod def schema() -> "Flag": """ :return: get the schema of the DTO """ return Flag(name="", dir="", id=-1, path="", requires_root=True, score=-1)