bear-utils 0.9.6__tar.gz → 0.9.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. {bear_utils-0.9.6 → bear_utils-0.9.8}/PKG-INFO +1 -1
  2. bear_utils-0.9.8/src/bear_utils/_internal/_version.py +1 -0
  3. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/_internal/cli.py +4 -5
  4. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/_internal/debug.py +41 -13
  5. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/extras/_zapper.py +1 -1
  6. bear_utils-0.9.6/src/bear_utils/logger_manager/_console_junk.py → bear_utils-0.9.8/src/bear_utils/logger_manager/_logger_misc.py +19 -0
  7. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/console_logger.py +19 -1
  8. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/console_logger.pyi +1 -1
  9. bear_utils-0.9.6/src/bear_utils/_internal/_version.py +0 -1
  10. {bear_utils-0.9.6 → bear_utils-0.9.8}/.gitignore +0 -0
  11. {bear_utils-0.9.6 → bear_utils-0.9.8}/.python-version +0 -0
  12. {bear_utils-0.9.6 → bear_utils-0.9.8}/AGENTS.md +0 -0
  13. {bear_utils-0.9.6 → bear_utils-0.9.8}/README.md +0 -0
  14. {bear_utils-0.9.6 → bear_utils-0.9.8}/config/coverage.ini +0 -0
  15. {bear_utils-0.9.6 → bear_utils-0.9.8}/config/default.toml +0 -0
  16. {bear_utils-0.9.6 → bear_utils-0.9.8}/config/git-changelog.toml +0 -0
  17. {bear_utils-0.9.6 → bear_utils-0.9.8}/config/pytest.ini +0 -0
  18. {bear_utils-0.9.6 → bear_utils-0.9.8}/config/ruff.toml +0 -0
  19. {bear_utils-0.9.6 → bear_utils-0.9.8}/directory_structure.txt +0 -0
  20. {bear_utils-0.9.6 → bear_utils-0.9.8}/directory_structure.xml +0 -0
  21. {bear_utils-0.9.6 → bear_utils-0.9.8}/maskfile.md +0 -0
  22. {bear_utils-0.9.6 → bear_utils-0.9.8}/noxfile.py +0 -0
  23. {bear_utils-0.9.6 → bear_utils-0.9.8}/pyproject.toml +0 -0
  24. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/__init__.py +0 -0
  25. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/__main__.py +0 -0
  26. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/_internal/__init__.py +0 -0
  27. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/ai/__init__.py +0 -0
  28. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/ai/ai_helpers/__init__.py +0 -0
  29. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/ai/ai_helpers/_common.py +0 -0
  30. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/ai/ai_helpers/_config.py +0 -0
  31. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/ai/ai_helpers/_parsers.py +0 -0
  32. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/ai/ai_helpers/_types.py +0 -0
  33. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/cache/__init__.py +0 -0
  34. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/cli/__init__.py +0 -0
  35. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/cli/_args.py +0 -0
  36. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/cli/_get_version.py +0 -0
  37. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/cli/commands.py +0 -0
  38. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/cli/prompt_helpers.py +0 -0
  39. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/cli/shell/__init__.py +0 -0
  40. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/cli/shell/_base_command.py +0 -0
  41. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/cli/shell/_base_shell.py +0 -0
  42. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/cli/shell/_common.py +0 -0
  43. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/cli/typer_bridge.py +0 -0
  44. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/config/__init__.py +0 -0
  45. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/config/config_manager.py +0 -0
  46. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/config/dir_manager.py +0 -0
  47. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/config/settings_manager.py +0 -0
  48. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/constants/__init__.py +0 -0
  49. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/constants/_exceptions.py +0 -0
  50. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/constants/_exit_code.py +0 -0
  51. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/constants/_http_status_code.py +0 -0
  52. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/constants/_lazy_typing.py +0 -0
  53. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/constants/_meta.py +0 -0
  54. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/constants/date_related.py +0 -0
  55. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/constants/time_related.py +0 -0
  56. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/database/__init__.py +0 -0
  57. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/database/_db_manager.py +0 -0
  58. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/events/__init__.py +0 -0
  59. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/events/events_class.py +0 -0
  60. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/events/events_module.py +0 -0
  61. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/extras/__init__.py +0 -0
  62. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/extras/_async_helpers.py +0 -0
  63. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/extras/_tools.py +0 -0
  64. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/extras/platform_utils.py +0 -0
  65. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/extras/responses/__init__.py +0 -0
  66. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/extras/responses/function_response.py +0 -0
  67. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/extras/wrappers/__init__.py +0 -0
  68. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/extras/wrappers/add_methods.py +0 -0
  69. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/extras/wrappers/string_io.py +0 -0
  70. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/files/__init__.py +0 -0
  71. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/files/file_handlers/__init__.py +0 -0
  72. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/files/file_handlers/_base_file_handler.py +0 -0
  73. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/files/file_handlers/file_handler_factory.py +0 -0
  74. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/files/file_handlers/json_file_handler.py +0 -0
  75. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/files/file_handlers/log_file_handler.py +0 -0
  76. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/files/file_handlers/toml_file_handler.py +0 -0
  77. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/files/file_handlers/txt_file_handler.py +0 -0
  78. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/files/file_handlers/yaml_file_handler.py +0 -0
  79. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/files/ignore_parser.py +0 -0
  80. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/graphics/__init__.py +0 -0
  81. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/graphics/bear_gradient.py +0 -0
  82. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/graphics/font/__init__.py +0 -0
  83. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/graphics/font/_raw_block_letters.py +0 -0
  84. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/graphics/font/_theme.py +0 -0
  85. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/graphics/font/_utils.py +0 -0
  86. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/graphics/font/block_font.py +0 -0
  87. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/graphics/font/glitch_font.py +0 -0
  88. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/graphics/image_helpers.py +0 -0
  89. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/gui/__init__.py +0 -0
  90. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/gui/gui_tools/__init__.py +0 -0
  91. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/gui/gui_tools/_settings.py +0 -0
  92. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/gui/gui_tools/_types.py +0 -0
  93. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/gui/gui_tools/qt_app.py +0 -0
  94. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/gui/gui_tools/qt_color_picker.py +0 -0
  95. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/gui/gui_tools/qt_file_handler.py +0 -0
  96. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/gui/gui_tools/qt_input_dialog.py +0 -0
  97. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/__init__.py +0 -0
  98. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/_common.py +0 -0
  99. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/_log_level.py +0 -0
  100. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/_styles.py +0 -0
  101. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/logger_protocol.py +0 -0
  102. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/__init__.py +0 -0
  103. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/_console.py +0 -0
  104. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/_level_sin.py +0 -0
  105. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/_logger.py +0 -0
  106. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/base_logger.py +0 -0
  107. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/base_logger.pyi +0 -0
  108. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/basic_logger/__init__.py +0 -0
  109. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/basic_logger/logger.py +0 -0
  110. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/basic_logger/logger.pyi +0 -0
  111. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/buffer_logger.py +0 -0
  112. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/fastapi_logger.py +0 -0
  113. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/file_logger.py +0 -0
  114. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/simple_logger.py +0 -0
  115. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/sub_logger.py +0 -0
  116. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/logger_manager/loggers/sub_logger.pyi +0 -0
  117. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/monitoring/__init__.py +0 -0
  118. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/monitoring/_common.py +0 -0
  119. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/monitoring/host_monitor.py +0 -0
  120. {bear_utils-0.9.6 → bear_utils-0.9.8}/src/bear_utils/time/__init__.py +0 -0
  121. {bear_utils-0.9.6 → bear_utils-0.9.8}/tests/__init__.py +0 -0
  122. {bear_utils-0.9.6 → bear_utils-0.9.8}/tests/test_add_ord_suffix.py +0 -0
  123. {bear_utils-0.9.6 → bear_utils-0.9.8}/tests/test_clipboard.py +0 -0
  124. {bear_utils-0.9.6 → bear_utils-0.9.8}/tests/test_database_manager.py +0 -0
  125. {bear_utils-0.9.6 → bear_utils-0.9.8}/tests/test_default_shell.py +0 -0
  126. {bear_utils-0.9.6 → bear_utils-0.9.8}/tests/test_font_utils.py +0 -0
  127. {bear_utils-0.9.6 → bear_utils-0.9.8}/tests/test_function_response.py +0 -0
  128. {bear_utils-0.9.6 → bear_utils-0.9.8}/tests/test_gradient.py +0 -0
  129. {bear_utils-0.9.6 → bear_utils-0.9.8}/tests/test_logger.py +0 -0
  130. {bear_utils-0.9.6 → bear_utils-0.9.8}/tests/test_platform_utils.py +0 -0
  131. {bear_utils-0.9.6 → bear_utils-0.9.8}/tests/test_prompt_helpers.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bear-utils
3
- Version: 0.9.6
3
+ Version: 0.9.8
4
4
  Summary: Various utilities for Bear programmers, including a rich logging utility, a disk cache, and a SQLite database wrapper amongst other things.
5
5
  Author-email: chaz <bright.lid5647@fastmail.com>
6
6
  Requires-Python: >=3.12
@@ -0,0 +1 @@
1
+ __version__ = "0.9.8"
@@ -15,7 +15,6 @@ import sys
15
15
  from typing import Any
16
16
 
17
17
  from bear_utils._internal import debug
18
- from bear_utils._internal._version import __version__
19
18
  from bear_utils.cli._get_version import VALID_BUMP_TYPES, cli_bump
20
19
  from bear_utils.constants import STDERR, ExitCode
21
20
 
@@ -43,14 +42,14 @@ class _Version(Action):
43
42
  super().__init__(nargs=nargs, **kwargs)
44
43
 
45
44
  def __call__(self, *_: Any, **__: Any) -> None:
46
- version: str = f"{debug._get_name()} v{_version}"
45
+ version: str = f"{debug._get_name()} v{debug._get_version()}"
47
46
  print(version)
48
47
  sys.exit(ExitCode.SUCCESS)
49
48
 
50
49
 
51
50
  def get_version() -> ExitCode:
52
51
  """CLI command to get the version of the package."""
53
- print(__version__)
52
+ print(debug._get_version())
54
53
  return ExitCode.SUCCESS
55
54
 
56
55
 
@@ -64,11 +63,11 @@ def bump_version(args: list[str] | None = None) -> ExitCode:
64
63
  help=f"Type of version bump: {', '.join(VALID_BUMP_TYPES)}",
65
64
  )
66
65
  _args: Namespace = parser.parse_args(args or sys.argv[1:])
67
- return cli_bump([_args.bump_type, debug.__PACKAGE_NAME__, __version__])
66
+ return cli_bump([_args.bump_type, debug._get_name(), debug._get_version()])
68
67
 
69
68
 
70
69
  def get_parser() -> ArgumentParser:
71
- name = debug._get_name()
70
+ name: str = debug._get_name()
72
71
  parser = ArgumentParser(description=name.capitalize(), prog=name, exit_on_error=False)
73
72
  parser.add_argument("-V", "--version", action=_Version, help="Print the version of the package")
74
73
  subparser = parser.add_subparsers(dest="command", required=False, help="Available commands")
@@ -7,22 +7,50 @@ import os
7
7
  import platform
8
8
  import sys
9
9
 
10
+ from pydantic import BaseModel, Field, field_validator
11
+
10
12
  from bear_utils._internal._version import __version__
11
13
  from bear_utils.cli._get_version import Version
12
14
 
13
15
  __PACKAGE_NAME__ = "bear-utils"
14
16
 
15
17
 
18
+ class _ProjectMetadata(BaseModel):
19
+ """Dataclass to store project metadata."""
20
+
21
+ name: str = Field(default=__PACKAGE_NAME__, description="Project name of the package.")
22
+ version: str = Field(default=__version__, description="Project version.")
23
+ description: str = Field(default="No description available.", description="Project description.")
24
+
25
+ def __str__(self) -> str:
26
+ """String representation of the project metadata."""
27
+ return f"{self.name} v{self.version}: {self.description}"
28
+
29
+ @field_validator("version", mode="before")
30
+ @classmethod
31
+ def validate_version(cls, v: str) -> str:
32
+ """Validate the version string."""
33
+ if not isinstance(v, str) or "0.0.0" in v:
34
+ try:
35
+ v = version(__PACKAGE_NAME__)
36
+ except PackageNotFoundError:
37
+ v = "0.0.0"
38
+ return v
39
+
40
+
41
+ _metadata = _ProjectMetadata()
42
+
43
+
16
44
  @dataclass
17
45
  class _Package:
18
46
  """Dataclass to store package information."""
19
47
 
20
- name: str = __PACKAGE_NAME__
48
+ name: str = _metadata.name
21
49
  """Package name."""
22
- version: str = __version__
50
+ version: str = _metadata.version
23
51
  """Package version."""
24
- _version: Version = field(default_factory=lambda: Version.from_string(__version__))
25
- description: str = "No description available."
52
+ _version: Version = field(default_factory=lambda: Version.from_string(_metadata.version))
53
+ description: str = _metadata.description
26
54
  """Package description."""
27
55
 
28
56
  def __post_init__(self) -> None:
@@ -40,7 +68,7 @@ class _Package:
40
68
  return f"{self.name} v{self.version}: {self.description}"
41
69
 
42
70
 
43
- @dataclass
71
+ @dataclass(frozen=True)
44
72
  class _Variable:
45
73
  """Dataclass describing an environment variable."""
46
74
 
@@ -50,7 +78,7 @@ class _Variable:
50
78
  """Variable value."""
51
79
 
52
80
 
53
- @dataclass
81
+ @dataclass(frozen=True)
54
82
  class _Environment:
55
83
  """Dataclass to store environment information."""
56
84
 
@@ -79,18 +107,18 @@ def _interpreter_name_version() -> tuple[str, str]:
79
107
  return "", "0.0.0"
80
108
 
81
109
 
82
- def _get_package_info(dist: str = __PACKAGE_NAME__) -> _Package:
110
+ def _get_package_info(dist: str = _metadata.name) -> _Package:
83
111
  try:
84
112
  return _Package(
85
113
  name=dist,
86
- version=__version__ or version(dist),
114
+ version=_metadata.version or version(dist),
87
115
  description=metadata(dist)["Summary"],
88
116
  )
89
117
  except PackageNotFoundError:
90
118
  return _Package(name=dist)
91
119
 
92
120
 
93
- def _get_name(dist: str = __PACKAGE_NAME__) -> str:
121
+ def _get_name(dist: str = _metadata.name) -> str:
94
122
  """Get name of the given distribution.
95
123
 
96
124
  Parameters:
@@ -102,7 +130,7 @@ def _get_name(dist: str = __PACKAGE_NAME__) -> str:
102
130
  return _get_package_info(dist).name
103
131
 
104
132
 
105
- def _get_version(dist: str = __PACKAGE_NAME__) -> str:
133
+ def _get_version(dist: str = _metadata.name) -> str:
106
134
  """Get version of the given distribution.
107
135
 
108
136
  Parameters:
@@ -114,7 +142,7 @@ def _get_version(dist: str = __PACKAGE_NAME__) -> str:
114
142
  return _get_package_info(dist).version
115
143
 
116
144
 
117
- def _get_description(dist: str = __PACKAGE_NAME__) -> str:
145
+ def _get_description(dist: str = _metadata.name) -> str:
118
146
  """Get description of the given distribution.
119
147
 
120
148
  Parameters:
@@ -133,10 +161,10 @@ def _get_debug_info() -> _Environment:
133
161
  Environment information.
134
162
  """
135
163
  py_name, py_version = _interpreter_name_version()
136
- packages: list[str] = [__PACKAGE_NAME__]
164
+ packages: list[str] = [_metadata.name]
137
165
  variables: list[str] = [
138
166
  "PYTHONPATH",
139
- *[var for var in os.environ if var.startswith(__PACKAGE_NAME__.replace("-", "_"))],
167
+ *[var for var in os.environ if var.startswith(_metadata.name.replace("-", "_"))],
140
168
  ]
141
169
  return _Environment(
142
170
  interpreter_name=py_name,
@@ -189,7 +189,7 @@ def zap_multi(
189
189
  >>> zap_multi("!?*", "Hello!? World! *", "-")
190
190
  'Hello- World- -'
191
191
  """
192
- zapper = Zapper(sym, src, replace, atomic=atomic)
192
+ zapper: Zapper[str] = Zapper(sym, src, replace, atomic=atomic)
193
193
  return zapper.zap().value
194
194
 
195
195
 
@@ -1,5 +1,6 @@
1
1
  from collections.abc import Callable
2
2
  from io import StringIO
3
+ import json
3
4
  from logging import Formatter, Handler, LogRecord
4
5
  from logging.handlers import BufferingHandler
5
6
  import threading
@@ -94,6 +95,24 @@ class ConsoleFormatter(Formatter):
94
95
  return super().format(record)
95
96
 
96
97
 
98
+ class JSONLFormatter(Formatter):
99
+ """A formatter that outputs log records in JSON Lines format."""
100
+
101
+ def format(self, record: LogRecord) -> str:
102
+ extra: LoggerExtraInfo = get_extra(record)
103
+ log_entry = {
104
+ "time": self.formatTime(record, self.datefmt),
105
+ "level": record.levelname,
106
+ "message": record.msg,
107
+ "funcName": record.funcName,
108
+ "name": record.name,
109
+ "module": record.module,
110
+ "line": record.lineno,
111
+ **extra,
112
+ }
113
+ return json.dumps(log_entry)
114
+
115
+
97
116
  class ConsoleBuffering(BufferingHandler):
98
117
  def __init__(
99
118
  self,
@@ -14,7 +14,7 @@ from rich.theme import Theme
14
14
 
15
15
  from bear_utils.constants.date_related import DATE_TIME_FORMAT
16
16
  from bear_utils.logger_manager._common import FIVE_MEGABYTES, VERBOSE_CONSOLE_FORMAT, VERBOSE_FORMAT, ExecValues
17
- from bear_utils.logger_manager._console_junk import ConsoleBuffering, ConsoleFormatter, ConsoleHandler
17
+ from bear_utils.logger_manager._logger_misc import ConsoleBuffering, ConsoleFormatter, ConsoleHandler
18
18
 
19
19
  from .base_logger import BaseLogger
20
20
 
@@ -124,6 +124,24 @@ class ConsoleLogger(Logger, BaseLogger):
124
124
  for handler in self._handlers:
125
125
  self.addHandler(handler)
126
126
 
127
+ def set_console_formatter(self, fmt: str = VERBOSE_CONSOLE_FORMAT) -> None:
128
+ """Set the formatter for the console handler."""
129
+ if hasattr(self, "console_handler"):
130
+ self.console_handler.setFormatter(ConsoleFormatter(fmt=fmt, datefmt=DATE_TIME_FORMAT))
131
+ self.verbose(f"ConsoleLogger: Console formatter set to {fmt}")
132
+
133
+ def set_file_formatter(self, fmt: str = VERBOSE_FORMAT) -> None:
134
+ """Set the formatter for the file handler."""
135
+ if hasattr(self, "file_handler"):
136
+ self.file_handler.setFormatter(Formatter(fmt=fmt, datefmt=DATE_TIME_FORMAT))
137
+ self.verbose(f"ConsoleLogger: File formatter set to {fmt}")
138
+
139
+ def set_buffer_formatter(self, fmt: str = VERBOSE_CONSOLE_FORMAT) -> None:
140
+ """Set the formatter for the buffer handler."""
141
+ if hasattr(self, "buffer_handler"):
142
+ self.buffer_handler.setFormatter(ConsoleFormatter(fmt=fmt, datefmt=DATE_TIME_FORMAT))
143
+ self.verbose(f"ConsoleLogger: Buffer formatter set to {fmt}")
144
+
127
145
  def stop_queue_listener(self) -> None:
128
146
  """Stop the queue listener if it exists and clean up resources."""
129
147
  if hasattr(self, "listener"):
@@ -5,7 +5,7 @@ from typing import Any
5
5
  from rich.text import Text
6
6
  from rich.theme import Theme
7
7
 
8
- from bear_utils.logger_manager._console_junk import ConsoleBuffering, ConsoleHandler
8
+ from bear_utils.logger_manager._logger_misc import ConsoleBuffering, ConsoleHandler
9
9
 
10
10
  from .base_logger import BaseLogger
11
11
  from .sub_logger import SubConsoleLogger
@@ -1 +0,0 @@
1
- __version__ = "0.9.6"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes