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):
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
def
generate_output( self, info: Union[str, List[Union[str, slither.core.variables.variable.Variable, slither.core.declarations.contract.Contract, slither.core.declarations.function.Function, slither.core.declarations.enum.Enum, slither.core.declarations.event.Event, slither.core.declarations.structure.Structure, slither.core.declarations.pragma_directive.Pragma, slither.core.cfg.node.Node]]], additional_fields: Union[Dict, NoneType] = None) -> slither.utils.output.Output:
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