bear-utils 0.9.3__py3-none-any.whl → 0.9.4__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.
@@ -1 +1 @@
1
- version = "0.9.3"
1
+ version = "0.9.4"
@@ -29,10 +29,9 @@ class RichStrEnum(StrEnum):
29
29
  default: str
30
30
 
31
31
  def __new__(cls, value: StrValue) -> Self:
32
- text: str = value.text
33
32
  obj: Self = str.__new__(cls, value.value)
34
33
  obj._value_ = value.value
35
- obj.text = text
34
+ obj.text = value.text
36
35
  obj.default = value.default
37
36
  return obj
38
37
 
@@ -91,10 +90,9 @@ class RichIntEnum(IntEnum):
91
90
  default: int
92
91
 
93
92
  def __new__(cls, value: IntValue) -> Self:
94
- text: str = value.text
95
93
  obj: Self = int.__new__(cls, value.value)
96
94
  obj._value_ = value.value
97
- obj.text = text
95
+ obj.text = value.text
98
96
  obj.default = value.default
99
97
  return obj
100
98
 
@@ -5,7 +5,6 @@ from .block_font import BLOCK_LETTERS, char_to_block, print_block_font, word_to_
5
5
  __all__ = [
6
6
  "BLOCK_LETTERS",
7
7
  "char_to_block",
8
- "char_to_block",
9
8
  "print_block_font",
10
9
  "word_to_block",
11
10
  ]
@@ -1,10 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import Callable
4
3
  from dataclasses import dataclass
5
4
  from io import StringIO
6
- import re
7
- from typing import Any, Self
8
5
 
9
6
  from rich.align import Align
10
7
  from rich.panel import Panel
@@ -16,14 +16,14 @@ NOTSET: Literal[0] = 0
16
16
  class LogLevel(RichIntEnum):
17
17
  """Enumeration for logging levels."""
18
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")
19
+ NOTSET = Value(NOTSET, "NOTSET", default=NOTSET)
20
+ VERBOSE = Value(VERBOSE, "VERBOSE", default=VERBOSE)
21
+ DEBUG = Value(DEBUG, "DEBUG", default=DEBUG)
22
+ INFO = Value(INFO, "INFO", default=INFO)
23
+ WARNING = Value(WARNING, "WARNING", default=WARNING)
24
+ ERROR = Value(ERROR, "ERROR", default=ERROR)
25
+ FAILURE = Value(FAILURE, "FAILURE", default=FAILURE)
26
+ SUCCESS = Value(SUCCESS, "SUCCESS", default=SUCCESS)
27
27
 
28
28
 
29
29
  level_to_name = {
@@ -45,7 +45,7 @@ class LogRequest(BaseModel):
45
45
  @field_serializer("level")
46
46
  def serialize_level(self, value: LogLevel | int | str) -> int:
47
47
  """Serialize the log level to an integer."""
48
- return LogLevel.get(value).value
48
+ return LogLevel.get(value, default=DEBUG).value
49
49
 
50
50
 
51
51
  class LoggingServer[T: TextIO](SingletonBase):
@@ -65,7 +65,7 @@ class LoggingServer[T: TextIO](SingletonBase):
65
65
  self.port: int = port
66
66
  self.log_file: Path = Path(log_file)
67
67
  self.log_file.parent.mkdir(parents=True, exist_ok=True)
68
- self.level: LogLevel = LogLevel.get(level)
68
+ self.level: LogLevel = LogLevel.get(level, default=DEBUG)
69
69
  self.app = FastAPI()
70
70
  self.server_thread = None
71
71
  self._running = False
@@ -111,7 +111,7 @@ class LoggingServer[T: TextIO](SingletonBase):
111
111
  args=request["args"] if isinstance(request, dict) else request.args,
112
112
  kwargs=request["kwargs"] if isinstance(request, dict) else request.kwargs,
113
113
  )
114
- level: LogLevel = LogLevel.get(request.level)
114
+ level: LogLevel = LogLevel.get(request.level, default=DEBUG)
115
115
  if level.value < self.level.value:
116
116
  return self.response(status="ignored", message="Log level is lower than server's minimum level")
117
117
  message = request.message
@@ -137,7 +137,6 @@ class LoggingServer[T: TextIO](SingletonBase):
137
137
  level: LogLevel,
138
138
  message: str,
139
139
  end: str = "\n",
140
- console: bool = True,
141
140
  *args,
142
141
  **kwargs,
143
142
  ) -> ExitCode:
@@ -152,7 +151,7 @@ class LoggingServer[T: TextIO](SingletonBase):
152
151
  if kwargs:
153
152
  for key, value in kwargs.items():
154
153
  buffer.append(f"{key}={value}{end}")
155
- if console:
154
+ if kwargs.pop("console", False):
156
155
  self.print(f"{end}".join(buffer))
157
156
  with open(self.log_file, "a", encoding="utf-8") as f:
158
157
  for line in buffer:
@@ -207,14 +206,14 @@ class LoggingClient[T: TextIO]:
207
206
  server_url: str | None = None,
208
207
  host: str = "http://localhost",
209
208
  port: int = 8080,
210
- level: LogLevel | int | str = INFO,
209
+ level: LogLevel | int | str = DEBUG,
211
210
  file: T = DEVNULL, # Default to DEVNULL to discard console output
212
211
  ) -> None:
213
212
  """Initialize the ServerLogger."""
214
213
  self.host: str = host
215
214
  self.port: int = port
216
215
  self.server_url: str = server_url or f"{self.host}:{self.port}"
217
- self.level: LogLevel = LogLevel.get(level)
216
+ self.level: LogLevel = LogLevel.get(level, default=DEBUG)
218
217
  self.client: AsyncClient = AsyncClient(timeout=5.0)
219
218
  self.file: T = file
220
219
 
@@ -3,19 +3,17 @@
3
3
  from io import StringIO
4
4
  from typing import TextIO
5
5
 
6
- from bear_utils.constants import STDERR, STDOUT
6
+ from bear_utils.constants import STDERR, STDOUT, NullFile
7
7
  from bear_utils.logger_manager._log_level import LogLevel
8
8
  from bear_utils.time import EpochTimestamp
9
9
 
10
- VERBOSE: LogLevel = LogLevel.get("VERBOSE")
11
- DEBUG: LogLevel = LogLevel.get("DEBUG")
12
- INFO: LogLevel = LogLevel.get("INFO")
13
- WARNING: LogLevel = LogLevel.get("WARNING")
14
- ERROR: LogLevel = LogLevel.get("ERROR")
15
- SUCCESS: LogLevel = LogLevel.get("SUCCESS")
16
- FAILURE: LogLevel = LogLevel.get("FAILURE")
17
-
18
- CHOICES = [STDOUT, STDERR, StringIO]
10
+ VERBOSE: LogLevel = LogLevel.VERBOSE
11
+ DEBUG: LogLevel = LogLevel.DEBUG
12
+ INFO: LogLevel = LogLevel.INFO
13
+ WARNING: LogLevel = LogLevel.WARNING
14
+ ERROR: LogLevel = LogLevel.ERROR
15
+ SUCCESS: LogLevel = LogLevel.SUCCESS
16
+ FAILURE: LogLevel = LogLevel.FAILURE
19
17
 
20
18
 
21
19
  class SimpleLogger[T: TextIO]:
@@ -23,8 +21,8 @@ class SimpleLogger[T: TextIO]:
23
21
 
24
22
  def __init__(self, level: str | int | LogLevel = "DEBUG", file: T = STDERR) -> None:
25
23
  """Initialize the logger with a minimum log level and output file."""
26
- self.level: LogLevel = LogLevel.get(level)
27
- self.file: T = file
24
+ self.level: LogLevel = LogLevel.get(level, default=DEBUG)
25
+ self.file: T = file # Can be STDOUT, STDERR, StringIO, NullFile or other TextIO Objects
28
26
  self.buffer: list[str] = []
29
27
 
30
28
  def print(self, msg: object, end: str = "\n") -> None:
@@ -80,10 +78,18 @@ class SimpleLogger[T: TextIO]:
80
78
  self.log(FAILURE, msg, *args, **kwargs)
81
79
 
82
80
 
81
+ __all__ = [
82
+ "STDERR",
83
+ "STDOUT",
84
+ "LogLevel",
85
+ "NullFile",
86
+ "SimpleLogger",
87
+ ]
88
+
83
89
  # Example usage:
84
90
  if __name__ == "__main__":
85
91
  logger = SimpleLogger(file=StringIO())
86
- logger_two = SimpleLogger(level="INFO", file=STDERR)
92
+ logger_two = SimpleLogger(level="INFO", file=NullFile())
87
93
  logger.info(msg="This is an info message")
88
94
  logger_two.info(msg="This is an info message")
89
95
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bear-utils
3
- Version: 0.9.3
3
+ Version: 0.9.4
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
@@ -1,7 +1,7 @@
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/_version.py,sha256=tI57X4zg5nDl2nSObnWy9eZf4h_gg1HykM7ngZXWIpo,18
4
+ bear_utils/_internal/_version.py,sha256=5OczblwtOeK6BbHkrfkzV4EB_CeD-i098DIU9Qk_IuA,18
5
5
  bear_utils/_internal/cli.py,sha256=6DfA_6DsgUN61YXkWPMnS7-wDp10weFfNltv-NVmyPk,4476
6
6
  bear_utils/_internal/debug.py,sha256=zYnv-mfGqHjvVG01LIw_jIachKN4A2pd-qd4Th9Utd8,4994
7
7
  bear_utils/ai/__init__.py,sha256=Q5P1KpSYS6iMt3vRbmasdWU5Oy5UkXfOGGyDI7Qy3Po,747
@@ -30,7 +30,7 @@ bear_utils/constants/_exceptions.py,sha256=gnAGTmuD9NYpJakeLrYHAyPrAQPHDNahY_rS4
30
30
  bear_utils/constants/_exit_code.py,sha256=0Eh_FNTBtdTXksP-tQUuETGpdhyH_D8UPDNN3gvEiX0,2618
31
31
  bear_utils/constants/_http_status_code.py,sha256=C-wH9VDdeer7DWogaEsLsLlxdYYfPcczz6w8-R80ioU,1186
32
32
  bear_utils/constants/_lazy_typing.py,sha256=WfuWpRqx9XchvuyPWg3tVjMC5-C4QA-Bhwfskf4YmAE,339
33
- bear_utils/constants/_meta.py,sha256=GKSimcD_RQ_c8L5ufDrhc9vgKf7t2Vh5-GnNkwliuIo,5801
33
+ bear_utils/constants/_meta.py,sha256=9QatGk_GvyxI2PBfG9spZz4HDh8yXOh0FPoE0yoy18Q,5751
34
34
  bear_utils/constants/date_related.py,sha256=vwgPPGamVJ8p12iRFu3IzTksmGfhqYULwrk-W2LLiZU,559
35
35
  bear_utils/constants/time_related.py,sha256=Mykb27THqC-K0HFrbbrdkTNJUKhzBEOfmPJ0rx2-L6E,705
36
36
  bear_utils/database/__init__.py,sha256=dS_HHJKESpsI6BFDLVx055o0GCJV9CMYOQVuHs7EfgY,192
@@ -61,10 +61,10 @@ bear_utils/files/file_handlers/yaml_file_handler.py,sha256=iUFAJle2t67SX6uvPiutj
61
61
  bear_utils/graphics/__init__.py,sha256=uR_NFKfskJGDPT0PGiw38rRniV945H67fvDALxUTnVw,268
62
62
  bear_utils/graphics/bear_gradient.py,sha256=36B9hjU_qDjdgZaVcRl4jE3uQyU8k8G_MiORFzaendE,5272
63
63
  bear_utils/graphics/image_helpers.py,sha256=AaDQm6uunIdVkcMSXmoiaNQ68zRQQJ6bbhoApk6GSKU,1649
64
- bear_utils/graphics/font/__init__.py,sha256=lW6ZPepKHS9fBkWEwV_n5YSqlS5S9bMMogHtaXaHHd0,291
64
+ bear_utils/graphics/font/__init__.py,sha256=3KcWWBblAymT_-Ndt94XjoE1TJXDLrFFLPRTDV-vPNI,270
65
65
  bear_utils/graphics/font/_raw_block_letters.py,sha256=i85DN-Va_u3D-gXvbIYyjL0FDv9jd-1UcmObw5rxgMY,7143
66
66
  bear_utils/graphics/font/_theme.py,sha256=H1kNvpd_9T_SdO5nF3oA_47lMV62P3a6ZoFE2dc8f4U,344
67
- bear_utils/graphics/font/_utils.py,sha256=Pp-L_xwKlB8ha1RuNWOWI1T3Whnjx3QkKCmJLJjZ5cA,6975
67
+ bear_utils/graphics/font/_utils.py,sha256=lJMyc7ByURqMVEhK9_n-xpVA442Hj0JS4ry8vouS5wM,6899
68
68
  bear_utils/graphics/font/block_font.py,sha256=hCtzMnLDXB9cEABOa7L9EWsAxVQ92K_zspKda5owiI0,4697
69
69
  bear_utils/graphics/font/glitch_font.py,sha256=154PlocfMZcPe-26hP5hd6wFSi-DX5P4ql1gqYM5MIY,2012
70
70
  bear_utils/gui/__init__.py,sha256=z_rOZ-nN3E6Hd_nGD6SdDVqE61VUk2OOogI6U89nkkA,349
@@ -78,7 +78,7 @@ bear_utils/gui/gui_tools/qt_input_dialog.py,sha256=5KaCM9q8kmoy-Fd0j1FbXIVrLlE7W
78
78
  bear_utils/logger_manager/__init__.py,sha256=rzBrDWHwwPTe29pi5YdJP_s_5u-Ufm64WX4R9-bCFAw,3863
79
79
  bear_utils/logger_manager/_common.py,sha256=kPTE4e0FKI8IBW1B5X7jJPVJtqgJtKYsX8gy8obg9OQ,1866
80
80
  bear_utils/logger_manager/_console_junk.py,sha256=2fwiYjZZps3GrH5An7aU3Bgvb_aAJiqNzTnKaku6m-0,4916
81
- bear_utils/logger_manager/_log_level.py,sha256=qg2LmxDPp6u5qbYBlD6DA8hJrMHQhR5pyV1BjVGdG_c,1109
81
+ bear_utils/logger_manager/_log_level.py,sha256=1GtCv2mUpZA_NBogA3KNQkpuEGupyal3e0VnGikTgZ4,1237
82
82
  bear_utils/logger_manager/_styles.py,sha256=1mYHnENhLUWHB2QSpT9CB3_dzgBjhBxM1sh5UGEUULU,2527
83
83
  bear_utils/logger_manager/logger_protocol.py,sha256=FONihllK314pVir01RhlJ4sxcluuwYwAt_JZs2TWT-s,1300
84
84
  bear_utils/logger_manager/loggers/__init__.py,sha256=ashcnkvQIUQDLbUtU6QILkMjP_fMaeHAN1w7pHLWqQk,67
@@ -90,9 +90,9 @@ bear_utils/logger_manager/loggers/base_logger.pyi,sha256=ApSDj_fH12tvwNQcyZSTtWE
90
90
  bear_utils/logger_manager/loggers/buffer_logger.py,sha256=wF8s4jyajbfandkb3ZcTdMGjEjefn8H9Jxn4b74VYDg,1700
91
91
  bear_utils/logger_manager/loggers/console_logger.py,sha256=wysIThH_sn4QpQQmOTFCFhTwiom0pNGOZp_iXaEJcxo,10082
92
92
  bear_utils/logger_manager/loggers/console_logger.pyi,sha256=SCEn_TCNVM7GyxL0ObjW7PCWcgsiUsXbktrRqts2qLM,1873
93
- bear_utils/logger_manager/loggers/fastapi_logger.py,sha256=5UrX6dohdQMMOr4io5hjFc_lqeAgkeK-TNXQM-zcZYk,12495
93
+ bear_utils/logger_manager/loggers/fastapi_logger.py,sha256=ndc3_7XkSHm0xuiTTblsXIqy5p8js2Fnr81gRrfUc8A,12547
94
94
  bear_utils/logger_manager/loggers/file_logger.py,sha256=gZEAybd2Yjhh1Zvetl4doaKv8EKW7_hc5yImlS8M9eA,4943
95
- bear_utils/logger_manager/loggers/simple_logger.py,sha256=JwKMqUdn9JGlcJb3wSvVnPEQ5J3RUbLDZbr6TqxC1D0,3557
95
+ bear_utils/logger_manager/loggers/simple_logger.py,sha256=tRlz5padozpcxbWLH4IgJoPho8BlXmEFN51UydgAGZI,3663
96
96
  bear_utils/logger_manager/loggers/sub_logger.py,sha256=5C_8b7juSMbqMIvmWaoC1JklL4pDETfqkMtvpQyO9X4,3501
97
97
  bear_utils/logger_manager/loggers/sub_logger.pyi,sha256=yFTRo99ztzsCaRQ5Oz0bPAPwB_dtvmvR2Al7hIs_doY,1001
98
98
  bear_utils/logger_manager/loggers/basic_logger/__init__.py,sha256=pEUkCpmt79zUVEE8P_OW55LdSu1hXLtpv6Lo2KsbIVo,144
@@ -102,6 +102,6 @@ bear_utils/monitoring/__init__.py,sha256=9DKNIWTp_voLnaWgiP-wJ-o_N0hYixo-MzjUmg8
102
102
  bear_utils/monitoring/_common.py,sha256=LYQFxgTP9fk0cH71IQTuGwBYYPWCqHP_mMRNecoD76M,657
103
103
  bear_utils/monitoring/host_monitor.py,sha256=e0TYRJw9iDj5Ga6y3ck1TBFEeH42Cax5mQYaNU8yams,13241
104
104
  bear_utils/time/__init__.py,sha256=VctjJG17SyEHAFXytI1sZrOrq7zm3hVenIDOJFdaMN0,1424
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,,
105
+ bear_utils-0.9.4.dist-info/METADATA,sha256=7V_ELmcuBENNfCZ12sFfnpazdP9SHMrFqa7qQJsS1rY,8800
106
+ bear_utils-0.9.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
107
+ bear_utils-0.9.4.dist-info/RECORD,,