slither.printers.abstract_printer

 1import abc
 2from logging import Logger
 3
 4from typing import TYPE_CHECKING, Union, List, Optional, Dict
 5
 6from slither.utils import output
 7from slither.utils.output import SupportedOutput
 8
 9if TYPE_CHECKING:
10    from slither import Slither
11
12
13class IncorrectPrinterInitialization(Exception):
14    pass
15
16
17class AbstractPrinter(metaclass=abc.ABCMeta):
18    ARGUMENT = ""  # run the printer with slither.py --ARGUMENT
19    HELP = ""  # help information
20
21    WIKI = ""
22
23    def __init__(self, slither: "Slither", logger: Optional[Logger]) -> None:
24        self.slither = slither
25        self.contracts = slither.contracts
26        self.filename = slither.filename
27        self.logger = logger
28
29        if not self.HELP:
30            raise IncorrectPrinterInitialization(
31                f"HELP is not initialized {self.__class__.__name__}"
32            )
33
34        if not self.ARGUMENT:
35            raise IncorrectPrinterInitialization(
36                f"ARGUMENT is not initialized {self.__class__.__name__}"
37            )
38
39        if not self.WIKI:
40            raise IncorrectPrinterInitialization(
41                f"WIKI is not initialized {self.__class__.__name__}"
42            )
43
44    def info(self, info: str) -> None:
45        if self.logger:
46            self.logger.info(info)
47
48    def generate_output(
49        self,
50        info: Union[str, List[Union[str, SupportedOutput]]],
51        additional_fields: Optional[Dict] = None,
52    ) -> output.Output:
53        if additional_fields is None:
54            additional_fields = {}
55        printer_output = output.Output(info, additional_fields)
56        printer_output.data["printer"] = self.ARGUMENT
57
58        return printer_output
59
60    @abc.abstractmethod
61    def output(self, filename: str) -> output.Output:
62        pass
class IncorrectPrinterInitialization(builtins.Exception):
14class IncorrectPrinterInitialization(Exception):
15    pass

Common base class for all non-exit exceptions.

Inherited Members
builtins.Exception
Exception
builtins.BaseException
with_traceback
args
class AbstractPrinter:
18class AbstractPrinter(metaclass=abc.ABCMeta):
19    ARGUMENT = ""  # run the printer with slither.py --ARGUMENT
20    HELP = ""  # help information
21
22    WIKI = ""
23
24    def __init__(self, slither: "Slither", logger: Optional[Logger]) -> None:
25        self.slither = slither
26        self.contracts = slither.contracts
27        self.filename = slither.filename
28        self.logger = logger
29
30        if not self.HELP:
31            raise IncorrectPrinterInitialization(
32                f"HELP is not initialized {self.__class__.__name__}"
33            )
34
35        if not self.ARGUMENT:
36            raise IncorrectPrinterInitialization(
37                f"ARGUMENT is not initialized {self.__class__.__name__}"
38            )
39
40        if not self.WIKI:
41            raise IncorrectPrinterInitialization(
42                f"WIKI is not initialized {self.__class__.__name__}"
43            )
44
45    def info(self, info: str) -> None:
46        if self.logger:
47            self.logger.info(info)
48
49    def generate_output(
50        self,
51        info: Union[str, List[Union[str, SupportedOutput]]],
52        additional_fields: Optional[Dict] = None,
53    ) -> output.Output:
54        if additional_fields is None:
55            additional_fields = {}
56        printer_output = output.Output(info, additional_fields)
57        printer_output.data["printer"] = self.ARGUMENT
58
59        return printer_output
60
61    @abc.abstractmethod
62    def output(self, filename: str) -> output.Output:
63        pass
ARGUMENT = ''
HELP = ''
WIKI = ''
slither
contracts
filename
logger
def info(self, info: str) -> None:
45    def info(self, info: str) -> None:
46        if self.logger:
47            self.logger.info(info)
49    def generate_output(
50        self,
51        info: Union[str, List[Union[str, SupportedOutput]]],
52        additional_fields: Optional[Dict] = None,
53    ) -> output.Output:
54        if additional_fields is None:
55            additional_fields = {}
56        printer_output = output.Output(info, additional_fields)
57        printer_output.data["printer"] = self.ARGUMENT
58
59        return printer_output
@abc.abstractmethod
def output(self, filename: str) -> slither.utils.output.Output:
61    @abc.abstractmethod
62    def output(self, filename: str) -> output.Output:
63        pass