bear-utils 0.9.0__py3-none-any.whl → 0.9.3__py3-none-any.whl

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.
@@ -0,0 +1,188 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Callable
4
+ from dataclasses import dataclass
5
+ from io import StringIO
6
+ import re
7
+ from typing import Any, Self
8
+
9
+ from rich.align import Align
10
+ from rich.panel import Panel
11
+ from rich.text import Text
12
+
13
+ from bear_utils.graphics.font._theme import CyberTheme
14
+ from bear_utils.graphics.font.block_font import Style
15
+ from bear_utils.logger_manager import LogConsole as Console
16
+
17
+
18
+ @dataclass
19
+ class HeaderConfig:
20
+ """Configuration for header styling."""
21
+
22
+ top_sep: str = "#"
23
+ left_sep: str = ">"
24
+ right_sep: str = "<"
25
+ bottom_sep: str = "#"
26
+ length: int = 60
27
+ title_style: str = "bold red" # s1
28
+ border_style: str = "bold blue" # s2 - top/bottom lines
29
+ separator_style: str = "bold green" # s3 - left/right separators
30
+ overall_style: str = "bold yellow" # s4
31
+ center_align: bool = True
32
+ return_txt: bool = False
33
+ use_panel: bool = False # New option!
34
+
35
+
36
+ class TextHelper:
37
+ def _create_separator_line(self, char: str, length: int, style: str) -> Text:
38
+ """Create a styled separator line."""
39
+ return Text(char * length, style=style)
40
+
41
+ def _create_title_line_manual(self, title: str, cfg: HeaderConfig) -> Text:
42
+ """Create title line with manual separator padding."""
43
+ title_with_spaces = f" {title} "
44
+ title_length = len(title_with_spaces)
45
+ remaining_space = cfg.length - title_length
46
+ left_padding = remaining_space // 2
47
+ right_padding = remaining_space - left_padding
48
+ title_line = Text()
49
+ title_line.append(cfg.left_sep * left_padding, style=cfg.separator_style)
50
+ title_line.append(f" {title} ", style=cfg.title_style)
51
+ title_line.append(cfg.right_sep * right_padding, style=cfg.separator_style)
52
+ return title_line
53
+
54
+ def _create_title_line_rich(self, title: str, cfg: HeaderConfig) -> Text:
55
+ """Create title line using Rich's alignment."""
56
+ styled_title = Text(f" {title} ", style=cfg.title_style)
57
+ title_line = Text()
58
+ title_line.append(cfg.left_sep, style=cfg.separator_style)
59
+ title_line.append(styled_title)
60
+ title_line.append(cfg.right_sep, style=cfg.separator_style)
61
+ return Text.from_markup(str(Align.center(title_line, width=cfg.length)))
62
+
63
+ def _create_panel_header(self, title: str, cfg: HeaderConfig) -> Panel:
64
+ """Create header using Rich Panel."""
65
+ return Panel(
66
+ f"[{cfg.title_style}]{title}[/{cfg.title_style}]",
67
+ width=cfg.length,
68
+ border_style=cfg.border_style,
69
+ expand=False,
70
+ )
71
+
72
+ def _create_manual_header(self, title: str, cfg: HeaderConfig) -> list[Text]:
73
+ """Create header using manual separator lines."""
74
+ top_line = self._create_separator_line(cfg.top_sep, cfg.length, cfg.border_style)
75
+ bottom_line = self._create_separator_line(cfg.bottom_sep, cfg.length, cfg.border_style)
76
+ title_line = self._create_title_line_manual(title, cfg)
77
+
78
+ return [top_line, title_line, bottom_line]
79
+
80
+ def print_header(self, title: str, config: HeaderConfig | None = None, **kwargs) -> str:
81
+ """Generate a header string with customizable separators and styling.
82
+
83
+ Args:
84
+ title: The title text to display
85
+ config: HeaderConfig object, or None to use defaults
86
+ **kwargs: Override any config values (top_sep, left_sep, etc.)
87
+ """
88
+ local_console = Console()
89
+ cfg = config or HeaderConfig()
90
+ for key, value in kwargs.items():
91
+ if hasattr(cfg, key):
92
+ setattr(cfg, key, value)
93
+
94
+ if cfg.use_panel:
95
+ panel: Panel = self._create_panel_header(title, cfg)
96
+ output: Align | Panel = Align.center(panel) if cfg.center_align else panel
97
+
98
+ if not cfg.return_txt:
99
+ local_console.print(output, style=cfg.overall_style)
100
+
101
+ temp_console = Console(file=StringIO(), width=cfg.length)
102
+ temp_console.print(output, style=cfg.overall_style)
103
+ return temp_console.file.getvalue()
104
+
105
+ header_lines = self._create_manual_header(title, cfg)
106
+
107
+ if cfg.center_align:
108
+ header_lines = [Align.center(line) for line in header_lines]
109
+
110
+ if not cfg.return_txt:
111
+ local_console.print() # Leading newline
112
+ for line in header_lines:
113
+ local_console.print(line, style=cfg.overall_style)
114
+ local_console.print() # Trailing newline
115
+ output_lines: list[str] = [str(line) for line in header_lines]
116
+ return "\n" + "\n".join(output_lines) + "\n"
117
+
118
+ def quick_header(self, title: str, style: str = "cyberpunk") -> str:
119
+ """Quick header with predefined styles."""
120
+ styles = {
121
+ "cyberpunk": HeaderConfig(
122
+ top_sep=str(Style.SOLID),
123
+ left_sep=str(Style.RIGHT_ARROWS),
124
+ right_sep=str(Style.LEFT_ARROWS),
125
+ bottom_sep=str(Style.SOLID),
126
+ title_style="bold bright_magenta",
127
+ border_style="bright_cyan",
128
+ separator_style="bright_green",
129
+ overall_style="",
130
+ use_panel=False,
131
+ ),
132
+ "panel": HeaderConfig(title_style="bold bright_magenta", border_style="bright_cyan", use_panel=True),
133
+ "classic": HeaderConfig(), # Uses defaults
134
+ "minimal": HeaderConfig(top_sep="─", left_sep="", right_sep="", bottom_sep="─", separator_style="dim"),
135
+ }
136
+
137
+ config = styles.get(style, HeaderConfig())
138
+ return self.print_header(title, config)
139
+
140
+
141
+ def ascii_header(title: str, print_out: bool = True, **kwargs) -> str:
142
+ """Generate a header string for visual tests.
143
+
144
+ Args:
145
+ title: The title to display
146
+ print_out: Whether to print or return the header
147
+ **kwargs: Any HeaderConfig parameters (top_sep, length, etc.)
148
+ """
149
+ config = HeaderConfig(return_txt=not print_out, **kwargs)
150
+ text_helper = TextHelper()
151
+ result = text_helper.print_header(title, config)
152
+ return "" if print_out else result
153
+
154
+
155
+ if __name__ == "__main__":
156
+ top = Style.SOLID.text
157
+ bottom = Style.SOLID.text
158
+ left = Style.RIGHT_ARROWS.text
159
+ right = Style.LEFT_ARROWS.text
160
+ ascii_header(
161
+ "Welcome to Bear Utils",
162
+ top_sep=top,
163
+ bottom_sep=bottom,
164
+ left_sep=left,
165
+ right_sep=right,
166
+ title_style=CyberTheme.primary,
167
+ separator_style=CyberTheme.system,
168
+ border_style=CyberTheme.neon_cyan,
169
+ print_out=True,
170
+ )
171
+
172
+ from pyfiglet import figlet_format
173
+
174
+ ANSI_SHADOW = "ansi_shadow"
175
+ BLOODY = "bloody"
176
+ BANNER_3_D = "banner3-D"
177
+ POISON = "poison"
178
+ ALPHA = "alpha"
179
+ DOOM = "doom"
180
+ DOT_MATRIX = "dotmatrix"
181
+ JAZMINE = "jazmine"
182
+ RAMMSTEIN = "rammstein"
183
+ REVERSE = "reverse"
184
+ DIAGONAL_3D = "3d_diagonal"
185
+ GHOST = "ghost"
186
+
187
+ text = figlet_format("BANKER", font="computer")
188
+ print(text)
@@ -3,9 +3,8 @@
3
3
  from rich.align import Align
4
4
  from rich.console import Console
5
5
 
6
- from bear_utils.graphics.font._theme import CyberTheme as Theme
7
-
8
- from ._raw_block_letters import (
6
+ from bear_utils.constants import RichStrEnum, StrValue
7
+ from bear_utils.graphics.font._raw_block_letters import (
9
8
  ASTERISK,
10
9
  AT,
11
10
  BACKWARD_SLASH,
@@ -58,6 +57,7 @@ from ._raw_block_letters import (
58
57
  Y,
59
58
  Z,
60
59
  )
60
+ from bear_utils.graphics.font._theme import CyberTheme as Theme
61
61
 
62
62
  BLOCK_LETTERS: dict[str, list[str]] = {
63
63
  "A": A,
@@ -113,6 +113,37 @@ BLOCK_LETTERS: dict[str, list[str]] = {
113
113
  "$": DOLLAR,
114
114
  }
115
115
 
116
+
117
+ class Style(RichStrEnum):
118
+ """Enumeration for block font styles."""
119
+
120
+ SOLID = StrValue("solid", "█")
121
+ HOLLOW = StrValue("hollow", "░")
122
+ PIPES = StrValue("pipes", "|")
123
+ OUTLINE = StrValue("outline", "■")
124
+ DASHED = StrValue("dashed", "─")
125
+ DOTTED = StrValue("dotted", "·")
126
+ ZIGZAG = StrValue("zigzag", "╱") # noqa: RUF001
127
+ CROSSED = StrValue("crossed", "╳") # noqa: RUF001
128
+ FANCY = StrValue("fancy", "◆")
129
+ RIGHT_ARROWS = StrValue("right_arrows", "▶")
130
+ LEFT_ARROWS = StrValue("left_arrows", "◀")
131
+ STARS = StrValue("stars", "★")
132
+
133
+
134
+ OG_CHAR = Style.SOLID
135
+
136
+
137
+ def apply_block_style(block_rows: list[str], style: str = "solid") -> list[str]:
138
+ """Replace block characters with different symbols."""
139
+ try:
140
+ new_char: Style = Style.get(value=style, default=OG_CHAR)
141
+ return [row.replace(OG_CHAR.text, new_char.text) for row in block_rows]
142
+ except (KeyError, AttributeError) as e:
143
+ available = ", ".join(Style._value2member_map_.keys())
144
+ raise ValueError(f"Invalid style: {style}. Available styles: {available}") from e
145
+
146
+
116
147
  console = Console()
117
148
 
118
149
 
@@ -121,7 +152,7 @@ def char_to_block(char: str) -> list[str]:
121
152
  return BLOCK_LETTERS.get(char.upper(), [" "] * 5)
122
153
 
123
154
 
124
- def word_to_block(word: str) -> list[str]:
155
+ def _word_to_block(word: str) -> list[str]:
125
156
  """Convert a word to its block font representation."""
126
157
  clean_text: str = "".join(char for char in word.upper() if char in BLOCK_LETTERS)
127
158
 
@@ -136,15 +167,45 @@ def word_to_block(word: str) -> list[str]:
136
167
  return rows
137
168
 
138
169
 
170
+ def word_to_block(word: str, font: str = "solid") -> str:
171
+ """Convert a word to its block font representation as a single string.
172
+
173
+ Args:
174
+ word (str): The word to convert.
175
+ font (str): The style of the block font. Defaults to "solid".
176
+
177
+ Returns:
178
+ str: The block font representation of the word.
179
+ """
180
+ block_rows = _word_to_block(word)
181
+ styled_rows = apply_block_style(block_rows, font)
182
+ return "\n".join(styled_rows)
183
+
184
+
139
185
  def print_block_font(text: str, color: str = Theme.neon_green) -> None:
140
186
  """Print block font text with cyberpunk styling."""
141
- block_rows = word_to_block(text)
187
+ block_rows = _word_to_block(text)
142
188
 
143
- console.print()
144
189
  for row in block_rows:
145
190
  console.print(Align.center(f"[{color}]{row}[/{color}]"))
146
- console.print()
191
+
192
+
193
+ def show_off_styles(word: str, style: str = Theme.primary) -> None:
194
+ """Display all block styles by using an example word"""
195
+ console.print("Available block styles:")
196
+
197
+ for symbol in Style:
198
+ styled_word = word_to_block(word, font=symbol.name.lower())
199
+
200
+ console.print()
201
+ console.print(Align.center(f"[{Theme.system}]{symbol.name.title()} Style:[/]"))
202
+ console.print(Align.center(f"[{style}]{styled_word}[/]"))
203
+ console.print()
147
204
 
148
205
 
149
206
  __all__ = ["BLOCK_LETTERS", "char_to_block", "word_to_block"]
150
207
  # fmt: on
208
+
209
+ if __name__ == "__main__":
210
+ WORD = "CLAUDE"
211
+ show_off_styles(WORD)
@@ -1,6 +1,6 @@
1
1
  from typing import Literal
2
2
 
3
- from bear_utils.constants._meta import RichIntEnum, Value
3
+ from bear_utils.constants._meta import IntValue as Value, RichIntEnum
4
4
 
5
5
  FAILURE: Literal[45] = 45
6
6
  ERROR: Literal[40] = 40
@@ -13,6 +13,19 @@ VERBOSE: Literal[5] = 5
13
13
  NOTSET: Literal[0] = 0
14
14
 
15
15
 
16
+ class LogLevel(RichIntEnum):
17
+ """Enumeration for logging levels."""
18
+
19
+ NOTSET = Value(NOTSET, "NOTSET")
20
+ VERBOSE = Value(VERBOSE, "VERBOSE")
21
+ DEBUG = Value(DEBUG, "DEBUG")
22
+ INFO = Value(INFO, "INFO")
23
+ WARNING = Value(WARNING, "WARNING")
24
+ ERROR = Value(ERROR, "ERROR")
25
+ FAILURE = Value(FAILURE, "FAILURE")
26
+ SUCCESS = Value(SUCCESS, "SUCCESS")
27
+
28
+
16
29
  level_to_name = {
17
30
  FAILURE: "FAILURE",
18
31
  ERROR: "ERROR",
@@ -35,16 +48,3 @@ name_to_level = {
35
48
  "VERBOSE": VERBOSE,
36
49
  "NOTSET": NOTSET,
37
50
  }
38
-
39
-
40
- class LogLevel(RichIntEnum):
41
- """Enumeration for logging levels."""
42
-
43
- NOTSET = Value(NOTSET, "NOTSET")
44
- VERBOSE = Value(VERBOSE, "VERBOSE")
45
- DEBUG = Value(DEBUG, "DEBUG")
46
- INFO = Value(INFO, "INFO")
47
- WARNING = Value(WARNING, "WARNING")
48
- ERROR = Value(ERROR, "ERROR")
49
- FAILURE = Value(FAILURE, "FAILURE")
50
- SUCCESS = Value(SUCCESS, "SUCCESS")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bear-utils
3
- Version: 0.9.0
3
+ Version: 0.9.3
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
@@ -12,6 +12,7 @@ Requires-Dist: pathspec>=0.12.1
12
12
  Requires-Dist: pillow<12.0.0,>=11.2.1
13
13
  Requires-Dist: prompt-toolkit<4.0.0,>=3.0.51
14
14
  Requires-Dist: pydantic>=2.11.5
15
+ Requires-Dist: pyfiglet>=1.0.3
15
16
  Requires-Dist: pyglm<3.0.0,>=2.8.2
16
17
  Requires-Dist: pyyaml>=6.0.2
17
18
  Requires-Dist: rich<15.0.0,>=14.0.0
@@ -25,7 +26,7 @@ Provides-Extra: gui
25
26
  Requires-Dist: pyqt6>=6.9.0; extra == 'gui'
26
27
  Description-Content-Type: text/markdown
27
28
 
28
- # Bear Utils v# Bear Utils v0.9.0
29
+ # Bear Utils
29
30
 
30
31
  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.
31
32
 
@@ -1,8 +1,9 @@
1
1
  bear_utils/__init__.py,sha256=Cin66XUC7cwuJ7ePZwgfdDnwFFPX_CHXOI3dMBWuyY8,1515
2
2
  bear_utils/__main__.py,sha256=-FlPquBlI1Tg2RoeX6d0Z8jTAiMFnJ0V06ZeRyiq58k,355
3
3
  bear_utils/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- bear_utils/_internal/cli.py,sha256=w3Cj8AM4iW5FNyM3ffCkBmwRoCWHc4JNYF26A35cxzw,2447
5
- bear_utils/_internal/debug.py,sha256=_Y2UzSuKqLYqNekuDR4NTE3CST5c4TnUHKnTRQ421Jk,4277
4
+ bear_utils/_internal/_version.py,sha256=tI57X4zg5nDl2nSObnWy9eZf4h_gg1HykM7ngZXWIpo,18
5
+ bear_utils/_internal/cli.py,sha256=6DfA_6DsgUN61YXkWPMnS7-wDp10weFfNltv-NVmyPk,4476
6
+ bear_utils/_internal/debug.py,sha256=zYnv-mfGqHjvVG01LIw_jIachKN4A2pd-qd4Th9Utd8,4994
6
7
  bear_utils/ai/__init__.py,sha256=Q5P1KpSYS6iMt3vRbmasdWU5Oy5UkXfOGGyDI7Qy3Po,747
7
8
  bear_utils/ai/ai_helpers/__init__.py,sha256=6SiOQ71NNGvIkMX8pMnZ3lxK9WDZ2Zgo3P6TRS5pvP4,4351
8
9
  bear_utils/ai/ai_helpers/_common.py,sha256=KgaOb_IePfC8Z1VsdA0EiodfS_YGVYYnrZFR2ZdsUYM,418
@@ -12,6 +13,7 @@ bear_utils/ai/ai_helpers/_types.py,sha256=rmnl8mTlUj0LyL9USzTb-EN_31TtXY6qzhkOEu
12
13
  bear_utils/cache/__init__.py,sha256=c9z1mLhWpZJHZdXRlviYQXl8tc9KTJCM8vin3moDO3I,4578
13
14
  bear_utils/cli/__init__.py,sha256=PXyieBmyYk4ceIB5gL5KMH8Prpc5xfiUW0_d2zI3bSU,629
14
15
  bear_utils/cli/_args.py,sha256=u5gcJGI90gdLLFH3klWGmGD6e8r2j6Zu8X_d0c7pfmM,285
16
+ bear_utils/cli/_get_version.py,sha256=kVbkE26wAxg_tytPBZuYZ17geii25yG5PADAHEMiEgg,6925
15
17
  bear_utils/cli/commands.py,sha256=5ppEjvVV_g28WLaIFtKgz-ctzwoo-g-KpHTXNx9xBzo,3161
16
18
  bear_utils/cli/prompt_helpers.py,sha256=VGNwbPDYXO-FoYkACI0Zq7_IUWThexGlycvt9RBzjEU,6844
17
19
  bear_utils/cli/typer_bridge.py,sha256=RE30vf7LQzdGeWvP08W_N_FZ3r2hoD372uHOqTmzcK0,3405
@@ -23,12 +25,12 @@ bear_utils/config/__init__.py,sha256=HC_lWpmLF0kbPr5i1Wa2FLER2b446E_GecgU9EPmc04
23
25
  bear_utils/config/config_manager.py,sha256=Xj0xOmY-wo_rwfcWiXyxNZWX9NknX_Jm9W56Gx8yyHQ,8244
24
26
  bear_utils/config/dir_manager.py,sha256=slIy1oRr7VIPdsiwN66-xQiuSvgqm_j6d1IrKhxRsSk,2028
25
27
  bear_utils/config/settings_manager.py,sha256=0hvqLzSiA8f9UVN45UY2-SIHMmOsg1eDctbg293qyyU,5978
26
- bear_utils/constants/__init__.py,sha256=DUn9znp04gY1YddPdc8DvKa2lFBw5ohiD6-ndmaA6xs,2093
28
+ bear_utils/constants/__init__.py,sha256=sKcb6f5PG5iKt4QjF04DBnX8uvdwIWCiGPMBEAuRxgc,2185
27
29
  bear_utils/constants/_exceptions.py,sha256=gnAGTmuD9NYpJakeLrYHAyPrAQPHDNahY_rS42Ct39k,251
28
- bear_utils/constants/_exit_code.py,sha256=0VR9SW_MSc6oLh8_0OErmsHWDyiPpox33dZnawFq0hw,2606
29
- bear_utils/constants/_http_status_code.py,sha256=LPNRxst_VxZOYOwt2fXjcQwpiPyU3-LooQa_YAFIRxg,1174
30
+ bear_utils/constants/_exit_code.py,sha256=0Eh_FNTBtdTXksP-tQUuETGpdhyH_D8UPDNN3gvEiX0,2618
31
+ bear_utils/constants/_http_status_code.py,sha256=C-wH9VDdeer7DWogaEsLsLlxdYYfPcczz6w8-R80ioU,1186
30
32
  bear_utils/constants/_lazy_typing.py,sha256=WfuWpRqx9XchvuyPWg3tVjMC5-C4QA-Bhwfskf4YmAE,339
31
- bear_utils/constants/_meta.py,sha256=P87e5C0zg3W_HHHW1MfbS4h2CQWE_51KqYZRvKNfZ9c,3026
33
+ bear_utils/constants/_meta.py,sha256=GKSimcD_RQ_c8L5ufDrhc9vgKf7t2Vh5-GnNkwliuIo,5801
32
34
  bear_utils/constants/date_related.py,sha256=vwgPPGamVJ8p12iRFu3IzTksmGfhqYULwrk-W2LLiZU,559
33
35
  bear_utils/constants/time_related.py,sha256=Mykb27THqC-K0HFrbbrdkTNJUKhzBEOfmPJ0rx2-L6E,705
34
36
  bear_utils/database/__init__.py,sha256=dS_HHJKESpsI6BFDLVx055o0GCJV9CMYOQVuHs7EfgY,192
@@ -36,9 +38,10 @@ bear_utils/database/_db_manager.py,sha256=bbg5zG06DcOvd37oafLIqc480BwF9ZW9qWF3ld
36
38
  bear_utils/events/__init__.py,sha256=EFqmuzhaEYK9kjkGlrM7bjdjPwFEDbKn6RjJKfIBEJY,414
37
39
  bear_utils/events/events_class.py,sha256=vPDjWrbut8L3TFn7byyYFZpWYM5ADIqtW2Aeh-qtKfQ,1632
38
40
  bear_utils/events/events_module.py,sha256=DkQsDZ5WzM1MH1Msg7mRny40a17Jl31CXbpw4-pICxc,2349
39
- bear_utils/extras/__init__.py,sha256=0Iz6HxhFlZB9ltyHBKCqKiIFFd5u5r_nXuMDQSxA1rE,611
41
+ bear_utils/extras/__init__.py,sha256=0mz3ZYOkOcW_tUHSx2pV2mtCfyuXwgPe9SYXEqlGHsg,755
40
42
  bear_utils/extras/_async_helpers.py,sha256=4buULZZkR0n2z13Q8_FK59dMchj0Mup03YBaqSCbveQ,2291
41
- bear_utils/extras/_tools.py,sha256=563_-nrhOzQPRLJHBgJcw0xFGghJkPK165M0j9GSxRE,9996
43
+ bear_utils/extras/_tools.py,sha256=cY5XxtUgeJxomeLO_g0X0xX_vEhMrvJkVd4I3-psjaw,6068
44
+ bear_utils/extras/_zapper.py,sha256=tgY1qTp7QOHJpFCYbqEPzGsjl-_McIZR9xjqmSUysRk,15817
42
45
  bear_utils/extras/platform_utils.py,sha256=Ai7ow7S-_cKb5zFwFh8dkC8xmbMJFy-0_-w3NCERdEw,1362
43
46
  bear_utils/extras/responses/__init__.py,sha256=KcBqPszOmCxmb7F9vukzn6TJS-yhNfhH9Tjmi9Xrbzo,204
44
47
  bear_utils/extras/responses/function_response.py,sha256=OLyI495RIM4edhsJZdpnv_CQE1gYxWEHyreek0Drg3c,17954
@@ -61,7 +64,8 @@ bear_utils/graphics/image_helpers.py,sha256=AaDQm6uunIdVkcMSXmoiaNQ68zRQQJ6bbhoA
61
64
  bear_utils/graphics/font/__init__.py,sha256=lW6ZPepKHS9fBkWEwV_n5YSqlS5S9bMMogHtaXaHHd0,291
62
65
  bear_utils/graphics/font/_raw_block_letters.py,sha256=i85DN-Va_u3D-gXvbIYyjL0FDv9jd-1UcmObw5rxgMY,7143
63
66
  bear_utils/graphics/font/_theme.py,sha256=H1kNvpd_9T_SdO5nF3oA_47lMV62P3a6ZoFE2dc8f4U,344
64
- bear_utils/graphics/font/block_font.py,sha256=CZP7mlMqPpQqiQSMXrWn-if1PBYdAGKQWvln4-oNuw4,2542
67
+ bear_utils/graphics/font/_utils.py,sha256=Pp-L_xwKlB8ha1RuNWOWI1T3Whnjx3QkKCmJLJjZ5cA,6975
68
+ bear_utils/graphics/font/block_font.py,sha256=hCtzMnLDXB9cEABOa7L9EWsAxVQ92K_zspKda5owiI0,4697
65
69
  bear_utils/graphics/font/glitch_font.py,sha256=154PlocfMZcPe-26hP5hd6wFSi-DX5P4ql1gqYM5MIY,2012
66
70
  bear_utils/gui/__init__.py,sha256=z_rOZ-nN3E6Hd_nGD6SdDVqE61VUk2OOogI6U89nkkA,349
67
71
  bear_utils/gui/gui_tools/__init__.py,sha256=cD6cKxU1cmKDVaBRT8KsqsCbulf6TUNAmVr50XGPpo8,446
@@ -74,7 +78,7 @@ bear_utils/gui/gui_tools/qt_input_dialog.py,sha256=5KaCM9q8kmoy-Fd0j1FbXIVrLlE7W
74
78
  bear_utils/logger_manager/__init__.py,sha256=rzBrDWHwwPTe29pi5YdJP_s_5u-Ufm64WX4R9-bCFAw,3863
75
79
  bear_utils/logger_manager/_common.py,sha256=kPTE4e0FKI8IBW1B5X7jJPVJtqgJtKYsX8gy8obg9OQ,1866
76
80
  bear_utils/logger_manager/_console_junk.py,sha256=2fwiYjZZps3GrH5An7aU3Bgvb_aAJiqNzTnKaku6m-0,4916
77
- bear_utils/logger_manager/_log_level.py,sha256=fAMaMHqjOfGCe5V-keH1tWYCuiLQ1uvmL4Q0aFtEfpQ,1097
81
+ bear_utils/logger_manager/_log_level.py,sha256=qg2LmxDPp6u5qbYBlD6DA8hJrMHQhR5pyV1BjVGdG_c,1109
78
82
  bear_utils/logger_manager/_styles.py,sha256=1mYHnENhLUWHB2QSpT9CB3_dzgBjhBxM1sh5UGEUULU,2527
79
83
  bear_utils/logger_manager/logger_protocol.py,sha256=FONihllK314pVir01RhlJ4sxcluuwYwAt_JZs2TWT-s,1300
80
84
  bear_utils/logger_manager/loggers/__init__.py,sha256=ashcnkvQIUQDLbUtU6QILkMjP_fMaeHAN1w7pHLWqQk,67
@@ -98,6 +102,6 @@ bear_utils/monitoring/__init__.py,sha256=9DKNIWTp_voLnaWgiP-wJ-o_N0hYixo-MzjUmg8
98
102
  bear_utils/monitoring/_common.py,sha256=LYQFxgTP9fk0cH71IQTuGwBYYPWCqHP_mMRNecoD76M,657
99
103
  bear_utils/monitoring/host_monitor.py,sha256=e0TYRJw9iDj5Ga6y3ck1TBFEeH42Cax5mQYaNU8yams,13241
100
104
  bear_utils/time/__init__.py,sha256=VctjJG17SyEHAFXytI1sZrOrq7zm3hVenIDOJFdaMN0,1424
101
- bear_utils-0.9.0.dist-info/METADATA,sha256=wkFh7g7fEn5xKCk_Ub-RRm7Jl59-ofXoxtW3kAiVIKo,8790
102
- bear_utils-0.9.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
103
- bear_utils-0.9.0.dist-info/RECORD,,
105
+ bear_utils-0.9.3.dist-info/METADATA,sha256=kVG_pKk-App-5w5y8UD7xocxjy3yOy-yiGgyiA0DG_s,8800
106
+ bear_utils-0.9.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
107
+ bear_utils-0.9.3.dist-info/RECORD,,