diff --git a/CHANGELOG.md b/CHANGELOG.md index a2d22f8..8a0dcbf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Method `to_dict` for the `Record` class +- Documentation for project (#6) +- Typings for project + ## [4.2.0] - 2025-01-17 ### Added diff --git a/Taskfile.yml b/Taskfile.yml index 2e627cd..05e5744 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -9,9 +9,11 @@ tasks: lint: cmds: - ruff check --respect-gitignore src + - mypy src # - pyright src format: + ignore_error: true cmd: ruff format --respect-gitignore src fix: @@ -19,7 +21,7 @@ tasks: dev-install: cmds: - - pip install --upgrade ruff pyright pre-commit + - pip install --upgrade ruff pyright pre-commit mypy dev-setup: deps: diff --git a/src/tinylogging/aio/handlers.py b/src/tinylogging/aio/handlers.py index 35acf0d..c53237f 100644 --- a/src/tinylogging/aio/handlers.py +++ b/src/tinylogging/aio/handlers.py @@ -1,6 +1,6 @@ import sys from abc import ABC, abstractmethod -from typing import Optional +from typing import Optional, Any import httpx from anyio import AsyncFile, open_file @@ -141,7 +141,7 @@ def __init__( chat_id: int | str, message_thread_id: Optional[int] = None, ignore_errors: bool = False, - **kwargs, + **kwargs: Any, ) -> None: """ Initializes the AsyncTelegramHandler. diff --git a/src/tinylogging/py.typed b/src/tinylogging/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/src/tinylogging/record.py b/src/tinylogging/record.py index 401267b..3335b0b 100644 --- a/src/tinylogging/record.py +++ b/src/tinylogging/record.py @@ -1,7 +1,8 @@ import inspect import os -from dataclasses import dataclass, field +from dataclasses import dataclass, field, asdict from datetime import datetime +from typing import Any from tinylogging.level import Level @@ -54,16 +55,16 @@ def __post_init__(self) -> None: frame = inspect.stack()[depth] depth = self._get_stack_index() - frame = inspect.currentframe() + frame = inspect.currentframe() # type: ignore for _ in range(depth): - frame = frame.f_back + frame = frame.f_back # type: ignore if not frame: raise RuntimeError("Failed to get stack frame") - self.filename = frame.f_code.co_filename - self.line = frame.f_lineno - self.function = frame.f_code.co_name + self.filename = frame.f_code.co_filename # type: ignore + self.line = frame.f_lineno # type: ignore + self.function = frame.f_code.co_name # type: ignore def _get_stack_index(self) -> int: """Gets the index of the stack frame for the log record. @@ -79,3 +80,14 @@ def _get_stack_index(self) -> int: current_frame = current_frame.f_back index += 1 return 1 + + def to_dict(self) -> dict[str, Any]: + """Converts the log record to a dictionary. + + Returns: + dict: A dictionary representation of the log record. + """ + dict_ = asdict(self) + dict_["basename"] = self.basename + dict_["relpath"] = self.relpath + return dict_ diff --git a/src/tinylogging/sync/handlers.py b/src/tinylogging/sync/handlers.py index 32dbc81..f47f322 100644 --- a/src/tinylogging/sync/handlers.py +++ b/src/tinylogging/sync/handlers.py @@ -1,7 +1,7 @@ import logging import sys from abc import ABC, abstractmethod -from typing import TextIO, Optional +from typing import TextIO, Optional, Any import httpx @@ -163,7 +163,7 @@ def __init__( chat_id: int | str, ignore_errors: bool = False, message_thread_id: Optional[int] = None, - **kwargs, + **kwargs: Any, ) -> None: super().__init__(**kwargs) self.token = token