bear-utils 0.8.0__tar.gz → 0.8.1__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 (109) hide show
  1. {bear_utils-0.8.0 → bear_utils-0.8.1}/.bumpversion.cfg +1 -1
  2. {bear_utils-0.8.0 → bear_utils-0.8.1}/PKG-INFO +3 -3
  3. {bear_utils-0.8.0 → bear_utils-0.8.1}/README.md +1 -1
  4. {bear_utils-0.8.0 → bear_utils-0.8.1}/pyproject.toml +2 -2
  5. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/config/settings_manager.py +1 -0
  6. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/loggers/_console_logger.pyi +1 -0
  7. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/loggers/_file_logger.py +2 -0
  8. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/loggers/_sub_logger.py +1 -0
  9. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/monitoring/host_monitor.py +1 -1
  10. {bear_utils-0.8.0 → bear_utils-0.8.1}/tests/test_function_response.py +20 -24
  11. {bear_utils-0.8.0 → bear_utils-0.8.1}/tests/test_logger.py +5 -0
  12. {bear_utils-0.8.0 → bear_utils-0.8.1}/uv.lock +5 -80
  13. {bear_utils-0.8.0 → bear_utils-0.8.1}/.gitignore +0 -0
  14. {bear_utils-0.8.0 → bear_utils-0.8.1}/.python-version +0 -0
  15. {bear_utils-0.8.0 → bear_utils-0.8.1}/AGENTS.md +0 -0
  16. {bear_utils-0.8.0 → bear_utils-0.8.1}/config/coverage.ini +0 -0
  17. {bear_utils-0.8.0 → bear_utils-0.8.1}/config/default.toml +0 -0
  18. {bear_utils-0.8.0 → bear_utils-0.8.1}/config/git-changelog.toml +0 -0
  19. {bear_utils-0.8.0 → bear_utils-0.8.1}/config/pytest.ini +0 -0
  20. {bear_utils-0.8.0 → bear_utils-0.8.1}/config/ruff.toml +0 -0
  21. {bear_utils-0.8.0 → bear_utils-0.8.1}/config/vscode/launch.json +0 -0
  22. {bear_utils-0.8.0 → bear_utils-0.8.1}/config/vscode/settings.json +0 -0
  23. {bear_utils-0.8.0 → bear_utils-0.8.1}/config/vscode/tasks.json +0 -0
  24. {bear_utils-0.8.0 → bear_utils-0.8.1}/directory_structure.txt +0 -0
  25. {bear_utils-0.8.0 → bear_utils-0.8.1}/maskfile.md +0 -0
  26. {bear_utils-0.8.0 → bear_utils-0.8.1}/noxfile.py +0 -0
  27. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/__init__.py +0 -0
  28. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/__main__.py +0 -0
  29. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/_internal/__init__.py +0 -0
  30. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/_internal/cli.py +0 -0
  31. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/_internal/debug.py +0 -0
  32. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/ai/__init__.py +0 -0
  33. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/ai/ai_helpers/__init__.py +0 -0
  34. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/ai/ai_helpers/_common.py +0 -0
  35. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/ai/ai_helpers/_config.py +0 -0
  36. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/ai/ai_helpers/_parsers.py +0 -0
  37. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/ai/ai_helpers/_types.py +0 -0
  38. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/cache/__init__.py +0 -0
  39. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/cli/__init__.py +0 -0
  40. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/cli/commands.py +0 -0
  41. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/cli/prompt_helpers.py +0 -0
  42. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/cli/shell/__init__.py +0 -0
  43. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/cli/shell/_base_command.py +0 -0
  44. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/cli/shell/_base_shell.py +0 -0
  45. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/cli/shell/_common.py +0 -0
  46. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/config/__init__.py +0 -0
  47. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/config/config_manager.py +0 -0
  48. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/config/dir_manager.py +0 -0
  49. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/constants/__init__.py +0 -0
  50. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/constants/_exceptions.py +0 -0
  51. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/constants/_lazy_typing.py +0 -0
  52. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/constants/date_related.py +0 -0
  53. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/constants/logger_protocol.py +0 -0
  54. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/constants/time_related.py +0 -0
  55. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/database/__init__.py +0 -0
  56. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/database/_db_manager.py +0 -0
  57. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/events/__init__.py +0 -0
  58. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/events/events_class.py +0 -0
  59. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/events/events_module.py +0 -0
  60. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/extras/__init__.py +0 -0
  61. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/extras/_async_helpers.py +0 -0
  62. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/extras/_tools.py +0 -0
  63. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/extras/platform_utils.py +0 -0
  64. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/extras/responses/__init__.py +0 -0
  65. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/extras/responses/function_response.py +0 -0
  66. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/extras/wrappers/__init__.py +0 -0
  67. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/extras/wrappers/add_methods.py +0 -0
  68. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/files/__init__.py +0 -0
  69. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/files/file_handlers/__init__.py +0 -0
  70. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/files/file_handlers/_base_file_handler.py +0 -0
  71. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/files/file_handlers/file_handler_factory.py +0 -0
  72. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/files/file_handlers/json_file_handler.py +0 -0
  73. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/files/file_handlers/log_file_handler.py +0 -0
  74. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/files/file_handlers/toml_file_handler.py +0 -0
  75. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/files/file_handlers/txt_file_handler.py +0 -0
  76. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/files/file_handlers/yaml_file_handler.py +0 -0
  77. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/files/ignore_parser.py +0 -0
  78. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/graphics/__init__.py +0 -0
  79. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/graphics/bear_gradient.py +0 -0
  80. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/graphics/image_helpers.py +0 -0
  81. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/gui/__init__.py +0 -0
  82. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/gui/gui_tools/__init__.py +0 -0
  83. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/gui/gui_tools/_settings.py +0 -0
  84. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/gui/gui_tools/_types.py +0 -0
  85. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/gui/gui_tools/qt_app.py +0 -0
  86. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/gui/gui_tools/qt_color_picker.py +0 -0
  87. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/gui/gui_tools/qt_file_handler.py +0 -0
  88. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/gui/gui_tools/qt_input_dialog.py +0 -0
  89. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/__init__.py +0 -0
  90. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/_common.py +0 -0
  91. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/_console_junk.py +0 -0
  92. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/_styles.py +0 -0
  93. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/loggers/__init__.py +0 -0
  94. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/loggers/_base_logger.py +0 -0
  95. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/loggers/_base_logger.pyi +0 -0
  96. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/loggers/_buffer_logger.py +0 -0
  97. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/loggers/_console_logger.py +0 -0
  98. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/loggers/_level_sin.py +0 -0
  99. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/loggers/_logger.py +0 -0
  100. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/logger_manager/loggers/_sub_logger.pyi +0 -0
  101. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/monitoring/__init__.py +0 -0
  102. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/monitoring/_common.py +0 -0
  103. {bear_utils-0.8.0 → bear_utils-0.8.1}/src/bear_utils/time/__init__.py +0 -0
  104. {bear_utils-0.8.0 → bear_utils-0.8.1}/tests/__init__.py +0 -0
  105. {bear_utils-0.8.0 → bear_utils-0.8.1}/tests/test_add_ord_suffix.py +0 -0
  106. {bear_utils-0.8.0 → bear_utils-0.8.1}/tests/test_clipboard.py +0 -0
  107. {bear_utils-0.8.0 → bear_utils-0.8.1}/tests/test_default_shell.py +0 -0
  108. {bear_utils-0.8.0 → bear_utils-0.8.1}/tests/test_gradient.py +0 -0
  109. {bear_utils-0.8.0 → bear_utils-0.8.1}/tests/test_platform_utils.py +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 0.8.0
2
+ current_version = 0.8.1
3
3
 
4
4
  [bumpversion:file:pyproject.toml]
5
5
 
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bear-utils
3
- Version: 0.8.0
3
+ Version: 0.8.1
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
7
- Requires-Dist: bear-epoch-time>=1.0.1
7
+ Requires-Dist: bear-epoch-time>=1.1.1
8
8
  Requires-Dist: diskcache<6.0.0,>=5.6.3
9
9
  Requires-Dist: httpx>=0.28.1
10
10
  Requires-Dist: pathspec>=0.12.1
@@ -20,7 +20,7 @@ Requires-Dist: tinydb>=4.8.2
20
20
  Requires-Dist: toml>=0.10.2
21
21
  Description-Content-Type: text/markdown
22
22
 
23
- # Bear Utils v# Bear Utils v0.8.0
23
+ # Bear Utils v# Bear Utils v0.8.1
24
24
 
25
25
  Personal set of tools and utilities for Python projects, focusing on modularity and ease of use. This library includes components for caching, database management, logging, time handling, file operations, CLI prompts, image processing, clipboard interaction, gradient utilities, event systems, and async helpers.
26
26
 
@@ -1,4 +1,4 @@
1
- # Bear Utils v# Bear Utils v0.8.0
1
+ # Bear Utils v# Bear Utils v0.8.1
2
2
 
3
3
  Personal set of tools and utilities for Python projects, focusing on modularity and ease of use. This library includes components for caching, database management, logging, time handling, file operations, CLI prompts, image processing, clipboard interaction, gradient utilities, event systems, and async helpers.
4
4
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "bear-utils"
3
- version = "0.8.0"
3
+ version = "0.8.1"
4
4
  description = "Various utilities for Bear programmers, including a rich logging utility, a disk cache, and a SQLite database wrapper amongst other things."
5
5
  authors = [{ name = "chaz", email = "bright.lid5647@fastmail.com" }]
6
6
  readme = "README.md"
@@ -17,7 +17,7 @@ dependencies = [
17
17
  "pyyaml>=6.0.2",
18
18
  "singleton-base>=1.0.5",
19
19
  "httpx>=0.28.1",
20
- "bear-epoch-time>=1.0.1",
20
+ "bear-epoch-time>=1.1.1",
21
21
  "toml>=0.10.2",
22
22
  "tinydb>=4.8.2",
23
23
  ]
@@ -27,6 +27,7 @@ class SettingsManager:
27
27
  self.cache: dict[str, Any] = {}
28
28
  file_name: str = f"{settings_name}.json"
29
29
  self.file_path: Path = Path(folder_path) / file_name if folder_path else get_config_folder() / file_name
30
+
30
31
  self.db: TinyDB = TinyDB(self.file_path, indent=4, ensure_ascii=False)
31
32
 
32
33
  atexit.register(self.close)
@@ -6,6 +6,7 @@ from rich.text import Text
6
6
  from rich.theme import Theme
7
7
 
8
8
  from bear_utils.logger_manager._console_junk import ConsoleBuffering, ConsoleHandler
9
+ from bear_utils.logging.logger_manager._console_junk import ConsoleBuffering, ConsoleHandler
9
10
 
10
11
  from ._base_logger import BaseLogger
11
12
  from ._sub_logger import SubConsoleLogger
@@ -5,12 +5,14 @@ from typing import TYPE_CHECKING, Any, override
5
5
  from rich.theme import Theme
6
6
 
7
7
  from bear_utils.logger_manager._common import FIVE_MEGABYTES
8
+ from bear_utils.logging.logger_manager._common import FIVE_MEGABYTES
8
9
 
9
10
  from ._console_logger import ConsoleLogger
10
11
  from ._sub_logger import SubConsoleLogger
11
12
 
12
13
  if TYPE_CHECKING:
13
14
  from bear_utils.logger_manager._styles import LoggerExtraInfo
15
+ from bear_utils.logging.logger_manager._styles import LoggerExtraInfo
14
16
 
15
17
 
16
18
  class FileLogger(ConsoleLogger):
@@ -10,6 +10,7 @@ from typing import TYPE_CHECKING, Any, Generic, TypeVar
10
10
  from rich.text import Text
11
11
 
12
12
  from bear_utils.logger_manager._styles import LOGGER_METHODS, LoggerExtraInfo
13
+ from bear_utils.logging.logger_manager._styles import LOGGER_METHODS, LoggerExtraInfo
13
14
 
14
15
  from ._level_sin import check_level
15
16
 
@@ -306,7 +306,7 @@ class HostMonitor:
306
306
  if current_cpu_samples:
307
307
  return round(sum(current_cpu_samples) / len(current_cpu_samples), 2)
308
308
  except Exception as e:
309
- print(f"Error getting CPU temperature: {e}")
309
+ self.console.error(f"Error getting CPU temperature: {e}", exc_info=True)
310
310
  return 0.0
311
311
 
312
312
  async def get_avg_mem_usage(self) -> float:
@@ -203,7 +203,7 @@ class TestSubTaskMethod:
203
203
  """Test basic sub_task functionality."""
204
204
  main_response = FunctionResponse(name="main_task")
205
205
  main_response.sub_task(name="subtask_1", content="sub content")
206
-
206
+
207
207
  assert main_response.number_of_tasks == 1
208
208
  assert main_response.content == ["subtask_1: sub content"]
209
209
  assert main_response.error == []
@@ -212,7 +212,7 @@ class TestSubTaskMethod:
212
212
  """Test sub_task with error."""
213
213
  main_response = FunctionResponse(name="main_task")
214
214
  main_response.sub_task(name="failed_subtask", error="something went wrong")
215
-
215
+
216
216
  assert main_response.number_of_tasks == 1
217
217
  assert main_response.content == []
218
218
  assert main_response.error == ["failed_subtask: something went wrong"]
@@ -221,28 +221,27 @@ class TestSubTaskMethod:
221
221
  """Test that sub_task inherits returncode from parent."""
222
222
  main_response = FunctionResponse(name="main_task", returncode=5)
223
223
  main_response.sub_task(name="subtask", content="test")
224
-
225
224
  # The sub_task should inherit the parent's returncode
226
225
  assert main_response.number_of_tasks == 1
227
226
  # Can't directly test the sub-response returncode, but the behavior should be consistent
228
-
227
+
228
+ # The sub_task should inherit the parent's returncode
229
+ assert main_response.number_of_tasks == 1
230
+ # Can't directly test the sub-response returncode, but the behavior should be consistent
231
+
229
232
  def test_sub_task_override_returncode(self):
230
233
  """Test that sub_task can override returncode."""
231
234
  main_response = FunctionResponse(name="main_task", returncode=0)
232
235
  main_response.sub_task(name="subtask", content="test", returncode=2)
233
-
236
+
234
237
  assert main_response.number_of_tasks == 1
235
238
  # The sub-task uses the overridden returncode
236
-
239
+
237
240
  def test_sub_task_with_extra_and_kwargs(self):
238
241
  """Test sub_task with extra metadata."""
239
242
  main_response = FunctionResponse(name="main_task")
240
- main_response.sub_task(
241
- name="subtask",
242
- content="test content",
243
- extra={"key": "value"}
244
- )
245
-
243
+ main_response.sub_task(name="subtask", content="test content", extra={"key": "value"})
244
+
246
245
  assert main_response.number_of_tasks == 1
247
246
  assert main_response.content == ["subtask: test content"]
248
247
  # Extra metadata gets merged into main response
@@ -253,25 +252,26 @@ class TestSubTaskMethod:
253
252
  """Test that sub_task inherits logger from parent."""
254
253
  # Create main response without logger initially
255
254
  main_response = FunctionResponse(name="main_task")
256
-
255
+
257
256
  # Add subtask - should work even without logger
258
257
  main_response.sub_task(name="subtask", content="test")
259
-
258
+
260
259
  assert main_response.number_of_tasks == 1
261
260
  assert main_response.content == ["subtask: test"]
262
261
 
263
262
  def test_sub_task_multiple_operations(self):
264
263
  """Test adding multiple sub_tasks."""
265
264
  main_response = FunctionResponse(name="batch_operation")
266
-
265
+
267
266
  # Add multiple subtasks
268
267
  main_response.sub_task(name="task1", content="completed task 1")
269
268
  main_response.sub_task(name="task2", error="task 2 failed")
270
269
  main_response.sub_task(name="task3", content="completed task 3")
271
-
270
+
272
271
  assert main_response.number_of_tasks == 3
273
272
  assert len(main_response.content) == 2 # Two successful
274
- assert len(main_response.error) == 1 # One failed
273
+ assert len(main_response.error) == 1 # One failed
274
+
275
275
  assert "task1: completed task 1" in main_response.content
276
276
  assert "task2: task 2 failed" in main_response.error
277
277
  assert "task3: completed task 3" in main_response.content
@@ -279,12 +279,9 @@ class TestSubTaskMethod:
279
279
  def test_sub_task_list_content_and_error(self):
280
280
  """Test sub_task with list content and errors."""
281
281
  main_response = FunctionResponse(name="main_task")
282
- main_response.sub_task(
283
- name="multi_subtask",
284
- content=["output 1", "output 2"],
285
- error=["warning 1", "warning 2"]
286
- )
287
-
282
+
283
+ main_response.sub_task(name="multi_subtask", content=["output 1", "output 2"], error=["warning 1", "warning 2"])
284
+
288
285
  assert main_response.number_of_tasks == 1
289
286
  assert "multi_subtask: output 1" in main_response.content
290
287
  assert "multi_subtask: output 2" in main_response.content
@@ -295,7 +292,6 @@ class TestSubTaskMethod:
295
292
  """Test sub_task with empty name."""
296
293
  main_response = FunctionResponse(name="main_task")
297
294
  main_response.sub_task(content="content without name")
298
-
299
295
  assert main_response.number_of_tasks == 1
300
296
  # Should still add content, just without name prefix
301
297
  assert "content without name" in main_response.content
@@ -5,8 +5,13 @@ from unittest.mock import patch
5
5
  import pytest
6
6
  from rich.console import Console
7
7
 
8
+ <<<<<<< HEAD
8
9
  from bear_utils import VERBOSE, BufferLogger, ConsoleLogger, FileLogger
9
10
  from bear_utils.extras import fmt_header
11
+ =======
12
+ from bear_utils.extras._tools import fmt_header
13
+ from bear_utils.logging import VERBOSE, BufferLogger, ConsoleLogger, FileLogger
14
+ >>>>>>> main
10
15
 
11
16
  console = Console()
12
17
 
@@ -45,23 +45,22 @@ wheels = [
45
45
 
46
46
  [[package]]
47
47
  name = "bear-epoch-time"
48
- version = "1.0.4"
48
+ version = "1.1.1"
49
49
  source = { registry = "https://pypi.org/simple/" }
50
50
  dependencies = [
51
51
  { name = "python-dateutil" },
52
52
  { name = "pytz" },
53
53
  { name = "rich" },
54
- { name = "rich-tree-cli" },
55
54
  { name = "tzlocal" },
56
55
  ]
57
- sdist = { url = "https://files.pythonhosted.org/packages/6d/b4/8b658c78658687b048628784b9e86cce619903a29ccdfbc66303aebf48e9/bear_epoch_time-1.0.4.tar.gz", hash = "sha256:a1d6bebb4a24c53ecfe4a430670b2835a5c54fff73bb5541d5fbd5ffe136b886", size = 38719, upload_time = "2025-06-19T20:48:52.051Z" }
56
+ sdist = { url = "https://files.pythonhosted.org/packages/3e/5a/1045fb6fc92d342765e732d2702548a90c933aba5a33a431ce40da414e98/bear_epoch_time-1.1.1.tar.gz", hash = "sha256:db7477e7551584b827f97249a85ee8085213ea8b079b0866fb9d523152785746", size = 32023, upload_time = "2025-07-07T19:40:07.073Z" }
58
57
  wheels = [
59
- { url = "https://files.pythonhosted.org/packages/92/38/d5c375fbfe5410d151baa614cc01c75f7cfc4043e31a9d0b2f6b0f224833/bear_epoch_time-1.0.4-py3-none-any.whl", hash = "sha256:1f7b6acc02967128725a9ca325a2233b4086ce2a0efdb0711bb985fed6360b7a", size = 14136, upload_time = "2025-06-19T20:48:50.819Z" },
58
+ { url = "https://files.pythonhosted.org/packages/be/7b/209297b64a6a2dd504b618d645fa419a1d44f21ba2745283d561672891cf/bear_epoch_time-1.1.1-py3-none-any.whl", hash = "sha256:f2594ef69cb0cbb87e009f7a76f2439e439bb07b5252b39a7956c2cb9b9c85c3", size = 15140, upload_time = "2025-07-07T19:40:06.208Z" },
60
59
  ]
61
60
 
62
61
  [[package]]
63
62
  name = "bear-utils"
64
- version = "0.7.23"
63
+ version = "0.8.0"
65
64
  source = { editable = "." }
66
65
  dependencies = [
67
66
  { name = "bear-epoch-time" },
@@ -96,7 +95,7 @@ gui = [
96
95
 
97
96
  [package.metadata]
98
97
  requires-dist = [
99
- { name = "bear-epoch-time", specifier = ">=1.0.1" },
98
+ { name = "bear-epoch-time", specifier = ">=1.1.1" },
100
99
  { name = "diskcache", specifier = ">=5.6.3,<6.0.0" },
101
100
  { name = "httpx", specifier = ">=0.28.1" },
102
101
  { name = "pathspec", specifier = ">=0.12.1" },
@@ -493,18 +492,6 @@ wheels = [
493
492
  { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload_time = "2025-02-27T18:51:00.104Z" },
494
493
  ]
495
494
 
496
- [[package]]
497
- name = "jinja2"
498
- version = "3.1.6"
499
- source = { registry = "https://pypi.org/simple/" }
500
- dependencies = [
501
- { name = "markupsafe" },
502
- ]
503
- sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload_time = "2025-03-05T20:05:02.478Z" }
504
- wheels = [
505
- { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload_time = "2025-03-05T20:05:00.369Z" },
506
- ]
507
-
508
495
  [[package]]
509
496
  name = "keyring"
510
497
  version = "25.6.0"
@@ -534,44 +521,6 @@ wheels = [
534
521
  { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload_time = "2023-06-03T06:41:11.019Z" },
535
522
  ]
536
523
 
537
- [[package]]
538
- name = "markupsafe"
539
- version = "3.0.2"
540
- source = { registry = "https://pypi.org/simple/" }
541
- sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload_time = "2024-10-18T15:21:54.129Z" }
542
- wheels = [
543
- { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload_time = "2024-10-18T15:21:13.777Z" },
544
- { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload_time = "2024-10-18T15:21:14.822Z" },
545
- { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload_time = "2024-10-18T15:21:15.642Z" },
546
- { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload_time = "2024-10-18T15:21:17.133Z" },
547
- { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload_time = "2024-10-18T15:21:18.064Z" },
548
- { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload_time = "2024-10-18T15:21:18.859Z" },
549
- { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload_time = "2024-10-18T15:21:19.671Z" },
550
- { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload_time = "2024-10-18T15:21:20.971Z" },
551
- { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload_time = "2024-10-18T15:21:22.646Z" },
552
- { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload_time = "2024-10-18T15:21:23.499Z" },
553
- { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload_time = "2024-10-18T15:21:24.577Z" },
554
- { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload_time = "2024-10-18T15:21:25.382Z" },
555
- { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload_time = "2024-10-18T15:21:26.199Z" },
556
- { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload_time = "2024-10-18T15:21:27.029Z" },
557
- { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload_time = "2024-10-18T15:21:27.846Z" },
558
- { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload_time = "2024-10-18T15:21:28.744Z" },
559
- { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload_time = "2024-10-18T15:21:29.545Z" },
560
- { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload_time = "2024-10-18T15:21:30.366Z" },
561
- { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload_time = "2024-10-18T15:21:31.207Z" },
562
- { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload_time = "2024-10-18T15:21:32.032Z" },
563
- { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload_time = "2024-10-18T15:21:33.625Z" },
564
- { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload_time = "2024-10-18T15:21:34.611Z" },
565
- { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload_time = "2024-10-18T15:21:35.398Z" },
566
- { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload_time = "2024-10-18T15:21:36.231Z" },
567
- { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload_time = "2024-10-18T15:21:37.073Z" },
568
- { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload_time = "2024-10-18T15:21:37.932Z" },
569
- { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload_time = "2024-10-18T15:21:39.799Z" },
570
- { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload_time = "2024-10-18T15:21:40.813Z" },
571
- { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload_time = "2024-10-18T15:21:41.814Z" },
572
- { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload_time = "2024-10-18T15:21:42.784Z" },
573
- ]
574
-
575
524
  [[package]]
576
525
  name = "mdurl"
577
526
  version = "0.1.2"
@@ -1033,21 +982,6 @@ wheels = [
1033
982
  { url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229, upload_time = "2025-03-30T14:15:12.283Z" },
1034
983
  ]
1035
984
 
1036
- [[package]]
1037
- name = "rich-tree-cli"
1038
- version = "0.3.15"
1039
- source = { registry = "https://pypi.org/simple/" }
1040
- dependencies = [
1041
- { name = "jinja2" },
1042
- { name = "pathspec" },
1043
- { name = "rich" },
1044
- { name = "tomli-w" },
1045
- ]
1046
- sdist = { url = "https://files.pythonhosted.org/packages/f6/23/d6ce2039fdd30aae1d489e79a741a8cfb6d592382f178b09bd8bf4ca46ae/rich_tree_cli-0.3.15.tar.gz", hash = "sha256:1b6f03b7cb4e8ad5226d9434ee73c40cf2b18edd20ffa282d285afe5caab8f7e", size = 65297, upload_time = "2025-06-16T05:11:40.017Z" }
1047
- wheels = [
1048
- { url = "https://files.pythonhosted.org/packages/17/7c/f43ee0089dcaafe40dbe128c6e81248d670d717fae681ccb11ef3fc326a9/rich_tree_cli-0.3.15-py3-none-any.whl", hash = "sha256:9f9b6f9edaa638368b439aaf7d98771ab901aeac1ce79e4e63be295dda07a90d", size = 30863, upload_time = "2025-06-16T05:11:39.196Z" },
1049
- ]
1050
-
1051
985
  [[package]]
1052
986
  name = "secretstorage"
1053
987
  version = "3.3.3"
@@ -1135,15 +1069,6 @@ wheels = [
1135
1069
  { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload_time = "2020-11-01T01:40:20.672Z" },
1136
1070
  ]
1137
1071
 
1138
- [[package]]
1139
- name = "tomli-w"
1140
- version = "1.2.0"
1141
- source = { registry = "https://pypi.org/simple/" }
1142
- sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184, upload_time = "2025-01-15T12:07:24.262Z" }
1143
- wheels = [
1144
- { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675, upload_time = "2025-01-15T12:07:22.074Z" },
1145
- ]
1146
-
1147
1072
  [[package]]
1148
1073
  name = "twine"
1149
1074
  version = "6.1.0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes