bear-utils 0.9.2__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.
@@ -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.2
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
@@ -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
@@ -1,9 +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/_version.py,sha256=DD0Z_9sibi1fvTl06e8BFOfZNivv3L6dD-1Z5VTp1ds,18
5
- bear_utils/_internal/cli.py,sha256=RhxLz8qOvcLFVGYwYHUNmOWabUvi4Jj7TuUp_oWWMBc,3593
6
- bear_utils/_internal/debug.py,sha256=UBSBZZUyIvoDxzpFz9CZ6IdKFctTkldg5l8tttVEaFc,4353
4
+ bear_utils/_internal/_version.py,sha256=5OczblwtOeK6BbHkrfkzV4EB_CeD-i098DIU9Qk_IuA,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
7
7
  bear_utils/ai/__init__.py,sha256=Q5P1KpSYS6iMt3vRbmasdWU5Oy5UkXfOGGyDI7Qy3Po,747
8
8
  bear_utils/ai/ai_helpers/__init__.py,sha256=6SiOQ71NNGvIkMX8pMnZ3lxK9WDZ2Zgo3P6TRS5pvP4,4351
9
9
  bear_utils/ai/ai_helpers/_common.py,sha256=KgaOb_IePfC8Z1VsdA0EiodfS_YGVYYnrZFR2ZdsUYM,418
@@ -13,7 +13,7 @@ bear_utils/ai/ai_helpers/_types.py,sha256=rmnl8mTlUj0LyL9USzTb-EN_31TtXY6qzhkOEu
13
13
  bear_utils/cache/__init__.py,sha256=c9z1mLhWpZJHZdXRlviYQXl8tc9KTJCM8vin3moDO3I,4578
14
14
  bear_utils/cli/__init__.py,sha256=PXyieBmyYk4ceIB5gL5KMH8Prpc5xfiUW0_d2zI3bSU,629
15
15
  bear_utils/cli/_args.py,sha256=u5gcJGI90gdLLFH3klWGmGD6e8r2j6Zu8X_d0c7pfmM,285
16
- bear_utils/cli/_get_version.py,sha256=swIFf_ABFfvgUvmUxm3UxZyPStUGq6d0fwPiplc8AFQ,6869
16
+ bear_utils/cli/_get_version.py,sha256=kVbkE26wAxg_tytPBZuYZ17geii25yG5PADAHEMiEgg,6925
17
17
  bear_utils/cli/commands.py,sha256=5ppEjvVV_g28WLaIFtKgz-ctzwoo-g-KpHTXNx9xBzo,3161
18
18
  bear_utils/cli/prompt_helpers.py,sha256=VGNwbPDYXO-FoYkACI0Zq7_IUWThexGlycvt9RBzjEU,6844
19
19
  bear_utils/cli/typer_bridge.py,sha256=RE30vf7LQzdGeWvP08W_N_FZ3r2hoD372uHOqTmzcK0,3405
@@ -27,10 +27,10 @@ bear_utils/config/dir_manager.py,sha256=slIy1oRr7VIPdsiwN66-xQiuSvgqm_j6d1IrKhxR
27
27
  bear_utils/config/settings_manager.py,sha256=0hvqLzSiA8f9UVN45UY2-SIHMmOsg1eDctbg293qyyU,5978
28
28
  bear_utils/constants/__init__.py,sha256=sKcb6f5PG5iKt4QjF04DBnX8uvdwIWCiGPMBEAuRxgc,2185
29
29
  bear_utils/constants/_exceptions.py,sha256=gnAGTmuD9NYpJakeLrYHAyPrAQPHDNahY_rS42Ct39k,251
30
- bear_utils/constants/_exit_code.py,sha256=wXNddil8NhY2a4PJRIpzOEXxx9w0A7D_L0G0xgSXFls,2618
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=xIihBq4tpe-byHmkyLgUH2N5863aQ-m9x5F2OZ3p6TA,3708
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
@@ -38,9 +38,10 @@ bear_utils/database/_db_manager.py,sha256=bbg5zG06DcOvd37oafLIqc480BwF9ZW9qWF3ld
38
38
  bear_utils/events/__init__.py,sha256=EFqmuzhaEYK9kjkGlrM7bjdjPwFEDbKn6RjJKfIBEJY,414
39
39
  bear_utils/events/events_class.py,sha256=vPDjWrbut8L3TFn7byyYFZpWYM5ADIqtW2Aeh-qtKfQ,1632
40
40
  bear_utils/events/events_module.py,sha256=DkQsDZ5WzM1MH1Msg7mRny40a17Jl31CXbpw4-pICxc,2349
41
- bear_utils/extras/__init__.py,sha256=0Iz6HxhFlZB9ltyHBKCqKiIFFd5u5r_nXuMDQSxA1rE,611
41
+ bear_utils/extras/__init__.py,sha256=0mz3ZYOkOcW_tUHSx2pV2mtCfyuXwgPe9SYXEqlGHsg,755
42
42
  bear_utils/extras/_async_helpers.py,sha256=4buULZZkR0n2z13Q8_FK59dMchj0Mup03YBaqSCbveQ,2291
43
- 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
44
45
  bear_utils/extras/platform_utils.py,sha256=Ai7ow7S-_cKb5zFwFh8dkC8xmbMJFy-0_-w3NCERdEw,1362
45
46
  bear_utils/extras/responses/__init__.py,sha256=KcBqPszOmCxmb7F9vukzn6TJS-yhNfhH9Tjmi9Xrbzo,204
46
47
  bear_utils/extras/responses/function_response.py,sha256=OLyI495RIM4edhsJZdpnv_CQE1gYxWEHyreek0Drg3c,17954
@@ -60,10 +61,11 @@ bear_utils/files/file_handlers/yaml_file_handler.py,sha256=iUFAJle2t67SX6uvPiutj
60
61
  bear_utils/graphics/__init__.py,sha256=uR_NFKfskJGDPT0PGiw38rRniV945H67fvDALxUTnVw,268
61
62
  bear_utils/graphics/bear_gradient.py,sha256=36B9hjU_qDjdgZaVcRl4jE3uQyU8k8G_MiORFzaendE,5272
62
63
  bear_utils/graphics/image_helpers.py,sha256=AaDQm6uunIdVkcMSXmoiaNQ68zRQQJ6bbhoApk6GSKU,1649
63
- bear_utils/graphics/font/__init__.py,sha256=lW6ZPepKHS9fBkWEwV_n5YSqlS5S9bMMogHtaXaHHd0,291
64
+ bear_utils/graphics/font/__init__.py,sha256=3KcWWBblAymT_-Ndt94XjoE1TJXDLrFFLPRTDV-vPNI,270
64
65
  bear_utils/graphics/font/_raw_block_letters.py,sha256=i85DN-Va_u3D-gXvbIYyjL0FDv9jd-1UcmObw5rxgMY,7143
65
66
  bear_utils/graphics/font/_theme.py,sha256=H1kNvpd_9T_SdO5nF3oA_47lMV62P3a6ZoFE2dc8f4U,344
66
- bear_utils/graphics/font/block_font.py,sha256=iFxZFpVvuiN0Xjj5dTzeMXznyYIWx3oLS86vZz9Th1I,2873
67
+ bear_utils/graphics/font/_utils.py,sha256=lJMyc7ByURqMVEhK9_n-xpVA442Hj0JS4ry8vouS5wM,6899
68
+ bear_utils/graphics/font/block_font.py,sha256=hCtzMnLDXB9cEABOa7L9EWsAxVQ92K_zspKda5owiI0,4697
67
69
  bear_utils/graphics/font/glitch_font.py,sha256=154PlocfMZcPe-26hP5hd6wFSi-DX5P4ql1gqYM5MIY,2012
68
70
  bear_utils/gui/__init__.py,sha256=z_rOZ-nN3E6Hd_nGD6SdDVqE61VUk2OOogI6U89nkkA,349
69
71
  bear_utils/gui/gui_tools/__init__.py,sha256=cD6cKxU1cmKDVaBRT8KsqsCbulf6TUNAmVr50XGPpo8,446
@@ -76,7 +78,7 @@ bear_utils/gui/gui_tools/qt_input_dialog.py,sha256=5KaCM9q8kmoy-Fd0j1FbXIVrLlE7W
76
78
  bear_utils/logger_manager/__init__.py,sha256=rzBrDWHwwPTe29pi5YdJP_s_5u-Ufm64WX4R9-bCFAw,3863
77
79
  bear_utils/logger_manager/_common.py,sha256=kPTE4e0FKI8IBW1B5X7jJPVJtqgJtKYsX8gy8obg9OQ,1866
78
80
  bear_utils/logger_manager/_console_junk.py,sha256=2fwiYjZZps3GrH5An7aU3Bgvb_aAJiqNzTnKaku6m-0,4916
79
- bear_utils/logger_manager/_log_level.py,sha256=qg2LmxDPp6u5qbYBlD6DA8hJrMHQhR5pyV1BjVGdG_c,1109
81
+ bear_utils/logger_manager/_log_level.py,sha256=1GtCv2mUpZA_NBogA3KNQkpuEGupyal3e0VnGikTgZ4,1237
80
82
  bear_utils/logger_manager/_styles.py,sha256=1mYHnENhLUWHB2QSpT9CB3_dzgBjhBxM1sh5UGEUULU,2527
81
83
  bear_utils/logger_manager/logger_protocol.py,sha256=FONihllK314pVir01RhlJ4sxcluuwYwAt_JZs2TWT-s,1300
82
84
  bear_utils/logger_manager/loggers/__init__.py,sha256=ashcnkvQIUQDLbUtU6QILkMjP_fMaeHAN1w7pHLWqQk,67
@@ -88,9 +90,9 @@ bear_utils/logger_manager/loggers/base_logger.pyi,sha256=ApSDj_fH12tvwNQcyZSTtWE
88
90
  bear_utils/logger_manager/loggers/buffer_logger.py,sha256=wF8s4jyajbfandkb3ZcTdMGjEjefn8H9Jxn4b74VYDg,1700
89
91
  bear_utils/logger_manager/loggers/console_logger.py,sha256=wysIThH_sn4QpQQmOTFCFhTwiom0pNGOZp_iXaEJcxo,10082
90
92
  bear_utils/logger_manager/loggers/console_logger.pyi,sha256=SCEn_TCNVM7GyxL0ObjW7PCWcgsiUsXbktrRqts2qLM,1873
91
- 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
92
94
  bear_utils/logger_manager/loggers/file_logger.py,sha256=gZEAybd2Yjhh1Zvetl4doaKv8EKW7_hc5yImlS8M9eA,4943
93
- bear_utils/logger_manager/loggers/simple_logger.py,sha256=JwKMqUdn9JGlcJb3wSvVnPEQ5J3RUbLDZbr6TqxC1D0,3557
95
+ bear_utils/logger_manager/loggers/simple_logger.py,sha256=tRlz5padozpcxbWLH4IgJoPho8BlXmEFN51UydgAGZI,3663
94
96
  bear_utils/logger_manager/loggers/sub_logger.py,sha256=5C_8b7juSMbqMIvmWaoC1JklL4pDETfqkMtvpQyO9X4,3501
95
97
  bear_utils/logger_manager/loggers/sub_logger.pyi,sha256=yFTRo99ztzsCaRQ5Oz0bPAPwB_dtvmvR2Al7hIs_doY,1001
96
98
  bear_utils/logger_manager/loggers/basic_logger/__init__.py,sha256=pEUkCpmt79zUVEE8P_OW55LdSu1hXLtpv6Lo2KsbIVo,144
@@ -100,7 +102,6 @@ bear_utils/monitoring/__init__.py,sha256=9DKNIWTp_voLnaWgiP-wJ-o_N0hYixo-MzjUmg8
100
102
  bear_utils/monitoring/_common.py,sha256=LYQFxgTP9fk0cH71IQTuGwBYYPWCqHP_mMRNecoD76M,657
101
103
  bear_utils/monitoring/host_monitor.py,sha256=e0TYRJw9iDj5Ga6y3ck1TBFEeH42Cax5mQYaNU8yams,13241
102
104
  bear_utils/time/__init__.py,sha256=VctjJG17SyEHAFXytI1sZrOrq7zm3hVenIDOJFdaMN0,1424
103
- bear_utils-0.9.2.dist-info/METADATA,sha256=DPxOotXwR1EJk8VTKce4ROTalUkfP5eXi1rCZsFctko,8769
104
- bear_utils-0.9.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
105
- bear_utils-0.9.2.dist-info/entry_points.txt,sha256=ZG_lgmgtQVuC19anERWKEmvGn5BBUO1UfTxuCb2MVDk,114
106
- bear_utils-0.9.2.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,,
@@ -1,3 +0,0 @@
1
- [console_scripts]
2
- bump = bear_utils._internal.cli:bump_version
3
- get-version = bear_utils._internal.cli:get_version