Browse Source

Add documentation.

Cixo Develop 1 week ago
parent
commit
c3316b5632
6 changed files with 330 additions and 72 deletions
  1. 1 1
      source/__init__.py
  2. 52 1
      source/async_logger.py
  3. 0 66
      source/log_directory.py
  4. 5 1
      source/logger.py
  5. 170 0
      source/logs_manager.py
  6. 102 3
      source/sync_logger.py

+ 1 - 1
source/__init__.py

@@ -6,4 +6,4 @@ from .levels import levels
 from .logger import logger
 from .async_logger import async_logger
 from .sync_logger import sync_logger
-from .log_directory import log_directory
+from .logs_manager import logs_manager

+ 52 - 1
source/async_logger.py

@@ -42,7 +42,7 @@ class async_logger(logger):
 
     async def warning(self, content: str, *args, **kwargs) -> None:
         """
-        That log info level message.
+        That log warning level message.
 
         Parameters
         ----------
@@ -57,17 +57,68 @@ class async_logger(logger):
         await self.log(levels.warning, content, *args, **kwargs)
 
     async def error(self, content: str, *args, **kwargs) -> None:
+        """
+        That log error level message.
+
+        Parameters
+        ----------
+        content : str
+            Content to store in the log.
+
+        *args, **kwargs
+            When any of that parameters had been given, then format funcion
+            hed been used on the content.
+        """
+
         await self.log(levels.error, content, *args, **kwargs)
 
     async def critical(self, content: str, *args, **kwargs) -> None:
+        """
+        That log critical level message.
+
+        Parameters
+        ----------
+        content : str
+            Content to store in the log.
+
+        *args, **kwargs
+            When any of that parameters had been given, then format funcion
+            hed been used on the content.
+        """
+
         await self.log(levels.critical, content, *args, **kwargs)
 
     async def log(self, level: levels, content: str, *args, **kwargs) -> None:
+        """
+        That log message, log level is given in the parameter.
+
+        Parameters
+        ----------
+        level : levels
+            Level of the message to save.
+        
+        content : str
+            Content to store in the log.
+
+        *args, **kwargs
+            When any of that parameters had been given, then format funcion
+            hed been used on the content.
+        """
+        
         await self._write_to_all(
             self._get_message(level, content, *args, **kwargs)
         )
     
     async def _write_to_all(self, content: str) -> None:
+        """
+        That write content to all handlers.
+
+        Parameters
+        ----------
+        content : str
+            Content to been writen.
+        """
+
         for handler in self._get_handlers():
             await handler.adding(content) 
 

+ 0 - 66
source/log_directory.py

@@ -1,66 +0,0 @@
-import pathlib
-import time
-
-from .file_handler import file_handler
-
-class log_directory:
-    def __init__(self, target: pathlib.Path | None = None) -> None:
-        if target is None:
-            target = pathlib.Path("./logs")
-
-        if not target.is_dir():
-            target.mkdir()
-
-        self.__root = target
-
-    @staticmethod
-    def _ends_with(name: str, ending: str) -> bool:
-        return name[-len(ending):] == ending
-
-    @property
-    def root(self) -> pathlib.Path:
-        return self.__root
-
-    @property
-    def logs(self) -> tuple:
-        return tuple(self.iter_logs())
-
-    def iter_logs(self) -> pathlib.Path:
-        for count in self.__root.iterdir():
-            if self._ends_with(count.name, ".log"):
-                yield self.__root / count
-
-    def get_logs_for_day(self, name: str | None = None) -> tuple:
-        if name is None:
-            name = self._base_name
-
-        logs = self.iter_logs()
-        filtered = filter(lambda count: str(count).find(name) != -1, logs)
-
-        return tuple(filtered)
-
-    @property
-    def _base_name(self) -> str:
-        return time.strftime("%Y-%m-%d", time.localtime())
-    
-    def get_new_file(self) -> pathlib.Path:
-        base_name = self._base_name
-        name_logs = self.get_logs_for_day(base_name)
-        name_count = len(name_logs)
-
-        while True:
-            result_name = (
-                base_name + "-" + \
-                str(name_count + 1) + ".log" \
-            )
-
-            result_path = self.root / pathlib.Path(result_name)
-
-            if not result_path.exists():
-                return result_path
-            
-            name_count = name_count + 1
-
-    def get_new_handler(self) -> file_handler:
-        return file_handler(self.get_new_file())
-

+ 5 - 1
source/logger.py

@@ -109,7 +109,7 @@ class logger:
 
         return ("[" + name + "]")
 
-    def use_handler(self, target: handler) -> None:
+    def use_handler(self, target: handler) -> object:
         """
         That add new handler to the handlers set.
 
@@ -117,6 +117,10 @@ class logger:
         ----------
         target : handler
             New handler to add.
+        
+        Returns
+        -------
+            Self to chain loading.
         """
 
         self.__handlers.add(target)

+ 170 - 0
source/logs_manager.py

@@ -0,0 +1,170 @@
+import pathlib
+import time
+import typing
+
+from .file_handler import file_handler
+from .async_logger import async_logger
+from .sync_logger import sync_logger
+from .logger import logger
+
+class logs_manager:
+    def __init__(self, target: pathlib.Path | None = None) -> None:
+        """
+        That create new logs manager. It require directory, where logs would
+        be stored.
+
+        Parameters
+        ----------
+        target : pathlib.Path
+        """
+
+        if target is None:
+            target = pathlib.Path("./logs")
+
+        if not target.is_dir():
+            target.mkdir()
+
+        self.__root = target
+
+    @staticmethod
+    def _ends_with(name: str, ending: str) -> bool:
+        """
+        That check name, and returh True when ends with ending.
+
+        Parameters
+        ----------
+        name : str
+            Name to check.
+
+        ending : str
+            Ending to check that name ends with.
+
+        Returns
+        -------
+        bool   
+            True when name ends with ending.
+        """
+
+        return name[-len(ending):] == ending
+
+    @property
+    def root(self) -> pathlib.Path:
+        """
+        Logs directory.
+        """
+
+        return self.__root
+
+    @property
+    def logs(self) -> tuple:
+        """
+        That return tuple with all logs.
+        """
+
+        return tuple(self.iter_logs())
+
+    def iter_logs(self) -> typing.Generator[pathlib.Path]:
+        """
+        That generator iterate all logs in the log directory.
+
+        Returns
+        -------
+        typing.Generator[pathlib.Path]
+            Log files.
+        """
+
+        for count in self.__root.iterdir():
+            if self._ends_with(count.name, ".log"):
+                yield self.__root / count
+
+    def search_log(self, name: str | None = None) -> tuple:
+        """
+        That search for log in the logs directory.
+
+        Parameters
+        ----------
+        name : str | None
+            Name to filter logs by. If none, current date.
+
+        Returns
+        -------
+        tuple
+            All logs for given name.
+        """
+
+        if name is None:
+            name = self._base_name
+
+        logs = self.iter_logs()
+        filtered = filter(lambda count: str(count).find(name) != -1, logs)
+
+        return tuple(filtered)
+
+    @property
+    def _base_name(self) -> str:
+        """
+        That return default base name for current date.
+
+        Returns
+        -------
+        str
+            Name for current date.
+        """
+
+        return time.strftime("%Y-%m-%d", time.localtime())
+    
+    def get_new_file(self) -> pathlib.Path:
+        """
+        That generate new log file handler.
+
+        Returns
+        -------
+        pathlib.Path
+            New file handler.
+        """
+
+        base_name = self._base_name
+        name_logs = self.search_log(base_name)
+        name_count = len(name_logs)
+
+        while True:
+            result_name = (
+                base_name + "-" + \
+                str(name_count + 1) + ".log" \
+            )
+
+            result_path = self.root / pathlib.Path(result_name)
+
+            if not result_path.exists():
+                return result_path
+            
+            name_count = name_count + 1
+
+    def get_new_handler(self) -> file_handler:
+        """
+        That return handler to the new file.
+
+        Returns
+        -------
+        file_handler
+            That return new handler to the new log file.
+        """
+
+        return file_handler(self.get_new_file())
+
+    def get_logger(self, logger_type : type) -> logger:
+        """
+        That return new logger that use new log file.
+
+        Parameters
+        ----------
+        logger_type : type
+            Select async_logger or sync_logger.
+
+        Returns
+        -------
+        logger
+            New logger that use new log file
+        """
+
+        return logger_type().use_handler(self.get_new_handler()) 

+ 102 - 3
source/sync_logger.py

@@ -3,21 +3,120 @@ from .handler import handler
 from .logger import logger
 
 class sync_logger(logger):
+    """
+    That is logger which use standard sync mode..
+
+    Methods
+    -------
+    info(content, *args, **kwargs)
+        That log info level message.
+
+    warning(content, *args, **kwargs)
+        That log warning level message.
+
+    error(content, *args, **kwargs)
+        That log error level message.
+
+    critical(content, *args, **kwargs)
+        That log critical level message.
+
+    log(level, content, *args, **kwargs)
+        That generally save content to log with given level.
+    """
+
+
     def info(self, *args, **kwargs) -> None:
+        """
+        That log info level message.
+
+        Parameters
+        ----------
+        content : str
+            Content to store in the log.
+
+        *args, **kwargs
+            When any of that parameters had been given, then format funcion
+            hed been used on the content.
+        """
+        
         self.log(levels.info, *args, **kwargs)
 
-    def warning(self, *args, **kwargs) -> None:
+def warning(self, *args, **kwargs) -> None:
+        """
+        That log warning level message.
+
+        Parameters
+        ----------
+        content : str
+            Content to store in the log.
+
+        *args, **kwargs
+            When any of that parameters had been given, then format funcion
+            hed been used on the content.
+        """
+        
         self.log(levels.warning, *args, **kwargs)
   
     def error(self, *args, **kwargs) -> None:
+        """
+        That log error level message.
+
+        Parameters
+        ----------
+        content : str
+            Content to store in the log.
+
+        *args, **kwargs
+            When any of that parameters had been given, then format funcion
+            hed been used on the content.
+        """
+
         self.log(levels.error, *args, **kwargs)
     
-    def critical(self, *args, **kwargs) -> None:
+def critical(self, *args, **kwargs) -> None:
+        """
+        That log critical level message.
+
+        Parameters
+        ----------
+        content : str
+            Content to store in the log.
+
+        *args, **kwargs
+            When any of that parameters had been given, then format funcion
+            hed been used on the content.
+        """
+        
         self.log(levels.critical, *args, **kwargs)
 
     def log(self, level: levels, *args, **kwargs) -> None:
+        """
+        That log message, log level is given in the parameter.
+
+        Parameters
+        ----------
+        level : levels
+            Level of the message to save.
+        
+        content : str
+            Content to store in the log.
+
+        *args, **kwargs
+            When any of that parameters had been given, then format funcion
+            hed been used on the content.
+        """
+
         self._write_to_all(self._get_message(level, *args, **kwargs))
 
-    def _write_to_all(self, content: str) -> None:  
+    def _write_to_all(self, content: str) -> None: 
+        """
+        That write content to all handlers.
+
+        Parameters
+        ----------
+        content : str
+            Content to been writen.
+        """
+
         for handler in self._get_handlers():
             handler.add(content)