|  | @@ -4,30 +4,95 @@ from .handler import handler
 | 
											
												
													
														|  |  from .levels import levels 
 |  |  from .levels import levels 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  class logger:
 |  |  class logger:
 | 
											
												
													
														|  | 
 |  | +    """
 | 
											
												
													
														|  | 
 |  | +    That class is responsible for managing log handlers, and generating
 | 
											
												
													
														|  | 
 |  | +    log message. That formats log messages by adding time, date and also
 | 
											
												
													
														|  | 
 |  | +    level of the message.
 | 
											
												
													
														|  | 
 |  | +    """
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      def __init__(self) -> None:
 |  |      def __init__(self) -> None:
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +        That initialize handlers set.
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |          self.__handlers = set()
 |  |          self.__handlers = set()
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def _get_handlers(self) -> tuple:   
 |  |      def _get_handlers(self) -> tuple:   
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +        That returns copy of the handlers list.
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |          return tuple(self.__handlers)
 |  |          return tuple(self.__handlers)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    def _get_message(self, level: levels, *args, **kwargs) -> str:
 |  | 
 | 
											
												
													
														|  | -        if len(args) < 1:
 |  | 
 | 
											
												
													
														|  | -            raise RuntimeError("Message or message format is not specified.")
 |  | 
 | 
											
												
													
														|  | 
 |  | +    def _get_message(
 | 
											
												
													
														|  | 
 |  | +        self, 
 | 
											
												
													
														|  | 
 |  | +        level: levels, 
 | 
											
												
													
														|  | 
 |  | +        content: str, 
 | 
											
												
													
														|  | 
 |  | +        *args, 
 | 
											
												
													
														|  | 
 |  | +        **kwargs
 | 
											
												
													
														|  | 
 |  | +    ) -> str:
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +        That try to format log message. It require level of the message and 
 | 
											
												
													
														|  | 
 |  | +        also message itself. When it get only level and message itself, that
 | 
											
												
													
														|  | 
 |  | +        only add message to level and timestamp info. When more parameters
 | 
											
												
													
														|  | 
 |  | +        had been given that run format function on the first message. It is
 | 
											
												
													
														|  | 
 |  | +        useable when log message must contain for example IP address or
 | 
											
												
													
														|  | 
 |  | +        other things like that.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        Parameters
 | 
											
												
													
														|  | 
 |  | +        ----------
 | 
											
												
													
														|  | 
 |  | +        level : levels
 | 
											
												
													
														|  | 
 |  | +            Log level of the message.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        content : str
 | 
											
												
													
														|  | 
 |  | +            Content of the message to log.
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        *args, **kwargs
 | 
											
												
													
														|  | 
 |  | +            Optional arguments used when format would be used.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        Returns
 | 
											
												
													
														|  | 
 |  | +        -------
 | 
											
												
													
														|  | 
 |  | +        str
 | 
											
												
													
														|  | 
 |  | +            Result message which would be saved in the logs.
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        if len(args) > 0 or len(kwargs) > 0:
 | 
											
												
													
														|  | 
 |  | +            content = content.format(*args, **kwargs)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          return ( \
 |  |          return ( \
 | 
											
												
													
														|  |              self.__level_name(level) + " " + \
 |  |              self.__level_name(level) + " " + \
 | 
											
												
													
														|  |              self.time_stamp + " " + \
 |  |              self.time_stamp + " " + \
 | 
											
												
													
														|  | -            self.__formater(*args, **kwargs) \
 |  | 
 | 
											
												
													
														|  | 
 |  | +            content \
 | 
											
												
													
														|  |          )
 |  |          )
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      @property
 |  |      @property
 | 
											
												
													
														|  |      def time_stamp(self) -> str:
 |  |      def time_stamp(self) -> str:
 | 
											
												
													
														|  | -        now = time.localtime()
 |  | 
 | 
											
												
													
														|  | -        formated = time.strftime("%Y-%m-%d %H:%M:%S")
 |  | 
 | 
											
												
													
														|  | -        
 |  | 
 | 
											
												
													
														|  | -        return formated
 |  | 
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +        That return current time as timestamp to use in log message.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        Returns
 | 
											
												
													
														|  | 
 |  | +        -------
 | 
											
												
													
														|  | 
 |  | +        str
 | 
											
												
													
														|  | 
 |  | +            Current time as timestamp.
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        return time.strftime("%Y-%m-%d %H:%M:%S")
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def __level_name(self, level: levels) -> str:
 |  |      def __level_name(self, level: levels) -> str:
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +        That convert level enum value into level stamp.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        Parameters
 | 
											
												
													
														|  | 
 |  | +        ----------
 | 
											
												
													
														|  | 
 |  | +        level : levels
 | 
											
												
													
														|  | 
 |  | +            Level enum to convert.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        Returns
 | 
											
												
													
														|  | 
 |  | +        -------
 | 
											
												
													
														|  | 
 |  | +        str
 | 
											
												
													
														|  | 
 |  | +            Result as string stamp.
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |          name = ""
 |  |          name = ""
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          if level == levels.info:
 |  |          if level == levels.info:
 | 
											
										
											
												
													
														|  | @@ -44,16 +109,16 @@ class logger:
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          return ("[" + name + "]")
 |  |          return ("[" + name + "]")
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    def __formater(self, *args, **kwargs) -> str:
 |  | 
 | 
											
												
													
														|  | -        base = args[0]
 |  | 
 | 
											
												
													
														|  | -        args = args[1:]
 |  | 
 | 
											
												
													
														|  | 
 |  | +    def use_handler(self, target: handler) -> None:
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +        That add new handler to the handlers set.
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        if len(args) == 0 and len(kwargs) == 0:
 |  | 
 | 
											
												
													
														|  | -            return base
 |  | 
 | 
											
												
													
														|  | -        
 |  | 
 | 
											
												
													
														|  | -        return base.format(*args, **kwargs)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        Parameters
 | 
											
												
													
														|  | 
 |  | +        ----------
 | 
											
												
													
														|  | 
 |  | +        target : handler
 | 
											
												
													
														|  | 
 |  | +            New handler to add.
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    def use_handler(self, target: handler) -> None:
 |  | 
 | 
											
												
													
														|  |          self.__handlers.add(target)
 |  |          self.__handlers.add(target)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 |