beans-logging 7.0.0__tar.gz → 7.1.0__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 (32) hide show
  1. {beans_logging-7.0.0/src/beans_logging.egg-info → beans_logging-7.1.0}/PKG-INFO +7 -10
  2. {beans_logging-7.0.0 → beans_logging-7.1.0}/README.md +6 -9
  3. beans_logging-7.1.0/src/beans_logging/__version__.py +1 -0
  4. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging/_builder.py +16 -39
  5. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging/config.py +35 -55
  6. {beans_logging-7.0.0 → beans_logging-7.1.0/src/beans_logging.egg-info}/PKG-INFO +7 -10
  7. beans_logging-7.0.0/src/beans_logging/__version__.py +0 -1
  8. {beans_logging-7.0.0 → beans_logging-7.1.0}/.python-version +0 -0
  9. {beans_logging-7.0.0 → beans_logging-7.1.0}/LICENSE.txt +0 -0
  10. {beans_logging-7.0.0 → beans_logging-7.1.0}/pyproject.toml +0 -0
  11. {beans_logging-7.0.0 → beans_logging-7.1.0}/requirements/requirements.build.txt +0 -0
  12. {beans_logging-7.0.0 → beans_logging-7.1.0}/requirements/requirements.dev.txt +0 -0
  13. {beans_logging-7.0.0 → beans_logging-7.1.0}/requirements/requirements.docs.txt +0 -0
  14. {beans_logging-7.0.0 → beans_logging-7.1.0}/requirements/requirements.fastapi.txt +0 -0
  15. {beans_logging-7.0.0 → beans_logging-7.1.0}/requirements/requirements.test.txt +0 -0
  16. {beans_logging-7.0.0 → beans_logging-7.1.0}/requirements.txt +0 -0
  17. {beans_logging-7.0.0 → beans_logging-7.1.0}/setup.cfg +0 -0
  18. {beans_logging-7.0.0 → beans_logging-7.1.0}/setup.py +0 -0
  19. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging/__init__.py +0 -0
  20. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging/_constants.py +0 -0
  21. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging/_core.py +0 -0
  22. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging/_intercept.py +0 -0
  23. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging/auto.py +0 -0
  24. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging/filters.py +0 -0
  25. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging/formats.py +0 -0
  26. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging/rotators.py +0 -0
  27. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging/schemas.py +0 -0
  28. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging/sinks.py +0 -0
  29. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging.egg-info/SOURCES.txt +0 -0
  30. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging.egg-info/dependency_links.txt +0 -0
  31. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging.egg-info/requires.txt +0 -0
  32. {beans_logging-7.0.0 → beans_logging-7.1.0}/src/beans_logging.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: beans_logging
3
- Version: 7.0.0
3
+ Version: 7.1.0
4
4
  Summary: 'beans-logging' is a python package for simple logger and easily managing logs.
5
5
  Author-email: Batkhuu Byambajav <batkhuu10@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/bybatkhuu/module-python-logging
@@ -323,9 +323,6 @@ logger:
323
323
  level:
324
324
  base: INFO
325
325
  err: WARNING
326
- std:
327
- format_str: "[<c>{time:YYYY-MM-DD HH:mm:ss.SSS Z}</c> | <level>{extra[level_short]:<5}</level> | <w>{name}:{line}</w>]: <level>{message}</level>"
328
- colorize: true
329
326
  format_str: "[{time:YYYY-MM-DD HH:mm:ss.SSS Z} | {extra[level_short]:<5} | {name}:{line}]: {message}"
330
327
  file:
331
328
  logs_dir: "./logs"
@@ -333,12 +330,6 @@ logger:
333
330
  rotate_time: "00:00:00"
334
331
  retention: 90
335
332
  encoding: utf8
336
- plain:
337
- log_path: "{app_name}.all.log"
338
- err_path: "{app_name}.err.log"
339
- json:
340
- log_path: "json/{app_name}.json.all.log"
341
- err_path: "json/{app_name}.json.err.log"
342
333
  custom_serialize: false
343
334
  intercept:
344
335
  enabled: true
@@ -349,20 +340,26 @@ logger:
349
340
  handlers:
350
341
  default.all.std_handler:
351
342
  type: STD
343
+ format: "[<c>{time:YYYY-MM-DD HH:mm:ss.SSS Z}</c> | <level>{extra[level_short]:<5}</level> | <w>{name}:{line}</w>]: <level>{message}</level>"
344
+ colorize: true
352
345
  enabled: true
353
346
  default.all.file_handler:
354
347
  type: FILE
348
+ sink: "{app_name}.all.log"
355
349
  enabled: false
356
350
  default.err.file_handler:
357
351
  type: FILE
352
+ sink: "{app_name}.err.log"
358
353
  error: true
359
354
  enabled: false
360
355
  default.all.json_handler:
361
356
  type: FILE
357
+ sink: "json/{app_name}.json.all.log"
362
358
  serialize: true
363
359
  enabled: false
364
360
  default.err.json_handler:
365
361
  type: FILE
362
+ sink: "json/{app_name}.json.err.log"
366
363
  serialize: true
367
364
  error: true
368
365
  enabled: false
@@ -261,9 +261,6 @@ logger:
261
261
  level:
262
262
  base: INFO
263
263
  err: WARNING
264
- std:
265
- format_str: "[<c>{time:YYYY-MM-DD HH:mm:ss.SSS Z}</c> | <level>{extra[level_short]:<5}</level> | <w>{name}:{line}</w>]: <level>{message}</level>"
266
- colorize: true
267
264
  format_str: "[{time:YYYY-MM-DD HH:mm:ss.SSS Z} | {extra[level_short]:<5} | {name}:{line}]: {message}"
268
265
  file:
269
266
  logs_dir: "./logs"
@@ -271,12 +268,6 @@ logger:
271
268
  rotate_time: "00:00:00"
272
269
  retention: 90
273
270
  encoding: utf8
274
- plain:
275
- log_path: "{app_name}.all.log"
276
- err_path: "{app_name}.err.log"
277
- json:
278
- log_path: "json/{app_name}.json.all.log"
279
- err_path: "json/{app_name}.json.err.log"
280
271
  custom_serialize: false
281
272
  intercept:
282
273
  enabled: true
@@ -287,20 +278,26 @@ logger:
287
278
  handlers:
288
279
  default.all.std_handler:
289
280
  type: STD
281
+ format: "[<c>{time:YYYY-MM-DD HH:mm:ss.SSS Z}</c> | <level>{extra[level_short]:<5}</level> | <w>{name}:{line}</w>]: <level>{message}</level>"
282
+ colorize: true
290
283
  enabled: true
291
284
  default.all.file_handler:
292
285
  type: FILE
286
+ sink: "{app_name}.all.log"
293
287
  enabled: false
294
288
  default.err.file_handler:
295
289
  type: FILE
290
+ sink: "{app_name}.err.log"
296
291
  error: true
297
292
  enabled: false
298
293
  default.all.json_handler:
299
294
  type: FILE
295
+ sink: "json/{app_name}.json.all.log"
300
296
  serialize: true
301
297
  enabled: false
302
298
  default.err.json_handler:
303
299
  type: FILE
300
+ sink: "json/{app_name}.json.err.log"
304
301
  serialize: true
305
302
  error: true
306
303
  enabled: false
@@ -0,0 +1 @@
1
+ __version__ = "7.1.0"
@@ -1,5 +1,6 @@
1
1
  import os
2
2
  from typing import Any
3
+ from pathlib import Path
3
4
 
4
5
  from pydantic import validate_call
5
6
 
@@ -39,40 +40,24 @@ def build_handler(handler: LogHandlerPM, config: LoggerConfigPM) -> dict[str, An
39
40
  if _handler_dict.get("sink") is None:
40
41
  if _handler_dict.get("type") == LogHandlerTypeEnum.STD:
41
42
  _handler_dict["sink"] = std_sink
42
- elif _handler_dict.get("type") == LogHandlerTypeEnum.FILE:
43
- _logs_path: str = ""
44
- if _handler_dict.get("serialize") or _handler_dict.get("custom_serialize"):
45
- if _handler_dict.get("error"):
46
- _logs_path = os.path.join(
47
- config.default.file.logs_dir,
48
- config.default.file.json_.err_path,
49
- )
50
- else:
51
- _logs_path = os.path.join(
52
- config.default.file.logs_dir,
53
- config.default.file.json_.log_path,
54
- )
55
- else:
56
- if _handler_dict.get("error"):
57
- _logs_path = os.path.join(
58
- config.default.file.logs_dir,
59
- config.default.file.plain.err_path,
60
- )
61
- else:
62
- _logs_path = os.path.join(
63
- config.default.file.logs_dir,
64
- config.default.file.plain.log_path,
65
- )
66
-
67
- if "{app_name}" in _logs_path:
68
- _logs_path = _logs_path.format(app_name=config.app_name)
69
-
70
- _handler_dict["sink"] = _logs_path
71
43
  else:
72
44
  raise ValueError(
73
- "'sink' attribute is empty, required for any log handler except std and file handlers!"
45
+ "'sink' attribute is empty, required for any log handler except std handler!"
74
46
  )
75
47
 
48
+ _sink = _handler_dict.get("sink")
49
+ if isinstance(_sink, (str, Path)):
50
+ if not os.path.isabs(_sink):
51
+ _sink = os.path.join(config.default.file.logs_dir, _sink)
52
+
53
+ if isinstance(_sink, Path):
54
+ _sink = str(_sink)
55
+
56
+ if "{app_name}" in _sink:
57
+ _sink = _sink.format(app_name=config.app_name)
58
+
59
+ _handler_dict["sink"] = _sink
60
+
76
61
  if _handler_dict.get("level") is None:
77
62
  if _handler_dict.get("error"):
78
63
  _handler_dict["level"] = config.default.level.err
@@ -89,10 +74,7 @@ def build_handler(handler: LogHandlerPM, config: LoggerConfigPM) -> dict[str, An
89
74
  _handler_dict["format"] = json_formatter
90
75
 
91
76
  if (_handler_dict.get("format") is None) and (not _handler_dict.get("serialize")):
92
- if _handler_dict.get("type") == LogHandlerTypeEnum.STD:
93
- _handler_dict["format"] = config.default.std.format_str
94
- else:
95
- _handler_dict["format"] = config.default.format_str
77
+ _handler_dict["format"] = config.default.format_str
96
78
 
97
79
  if _handler_dict.get("filter") is None:
98
80
  if _handler_dict.get("type") == LogHandlerTypeEnum.STD:
@@ -120,11 +102,6 @@ def build_handler(handler: LogHandlerPM, config: LoggerConfigPM) -> dict[str, An
120
102
  ):
121
103
  _handler_dict["diagnose"] = True
122
104
 
123
- if (_handler_dict.get("colorize") is None) and (
124
- _handler_dict.get("type") == LogHandlerTypeEnum.STD
125
- ):
126
- _handler_dict["colorize"] = config.default.std.colorize
127
-
128
105
  if _handler_dict.get("type") == LogHandlerTypeEnum.FILE:
129
106
  if _handler_dict.get("enqueue") is None:
130
107
  _handler_dict["enqueue"] = True
@@ -1,14 +1,9 @@
1
- import sys
1
+ import os
2
2
  import datetime
3
3
  from typing import Any
4
4
 
5
- if sys.version_info >= (3, 11):
6
- from typing import Self
7
- else:
8
- from typing_extensions import Self
9
-
10
5
  import potato_util as utils
11
- from pydantic import Field, model_validator, field_validator
6
+ from pydantic import Field, field_validator
12
7
 
13
8
  from ._constants import LogHandlerTypeEnum, LogLevelEnum
14
9
  from .schemas import ExtraBaseModel, LogHandlerPM, LoguruHandlerPM
@@ -22,53 +17,46 @@ def _get_handlers() -> dict[str, LogHandlerPM]:
22
17
  """
23
18
 
24
19
  _log_handlers: dict[str, LogHandlerPM] = {
25
- "default.all.std_handler": LogHandlerPM(type_=LogHandlerTypeEnum.STD),
20
+ "default.all.std_handler": LogHandlerPM(
21
+ type_=LogHandlerTypeEnum.STD,
22
+ format_=(
23
+ "[<c>{time:YYYY-MM-DD HH:mm:ss.SSS Z}</c> | <level>{extra[level_short]:<5}</level> | "
24
+ "<w>{name}:{line}</w>]: <level>{message}</level>"
25
+ ),
26
+ colorize=True,
27
+ ),
26
28
  "default.all.file_handler": LogHandlerPM(
27
- type_=LogHandlerTypeEnum.FILE, enabled=False
29
+ type_=LogHandlerTypeEnum.FILE,
30
+ sink="{app_name}.all.log",
31
+ enabled=False,
28
32
  ),
29
33
  "default.err.file_handler": LogHandlerPM(
30
- type_=LogHandlerTypeEnum.FILE, error=True, enabled=False
34
+ type_=LogHandlerTypeEnum.FILE,
35
+ sink="{app_name}.err.log",
36
+ error=True,
37
+ enabled=False,
31
38
  ),
32
39
  "default.all.json_handler": LogHandlerPM(
33
- type_=LogHandlerTypeEnum.FILE, serialize=True, enabled=False
40
+ type_=LogHandlerTypeEnum.FILE,
41
+ sink="json/{app_name}.json.all.log",
42
+ serialize=True,
43
+ enabled=False,
34
44
  ),
35
45
  "default.err.json_handler": LogHandlerPM(
36
- type_=LogHandlerTypeEnum.FILE, serialize=True, error=True, enabled=False
46
+ type_=LogHandlerTypeEnum.FILE,
47
+ sink="json/{app_name}.json.err.log",
48
+ serialize=True,
49
+ error=True,
50
+ enabled=False,
37
51
  ),
38
52
  }
39
53
 
40
54
  return _log_handlers
41
55
 
42
56
 
43
- class StdConfigPM(ExtraBaseModel):
44
- format_str: str = Field(
45
- default=(
46
- "[<c>{time:YYYY-MM-DD HH:mm:ss.SSS Z}</c> | <level>{extra[level_short]:<5}</level> | <w>{name}:{line}</w>]:"
47
- " <level>{message}</level>"
48
- ),
49
- min_length=8,
50
- max_length=512,
51
- )
52
- colorize: bool = Field(default=True)
53
-
54
-
55
- class PathsConfigPM(ExtraBaseModel):
56
- log_path: str = Field(..., min_length=4, max_length=1024)
57
- err_path: str = Field(..., min_length=4, max_length=1024)
58
-
59
- @model_validator(mode="after")
60
- def _check_log_path(self) -> Self:
61
- if self.log_path == self.err_path:
62
- raise ValueError(
63
- f"`log_path` and `err_path` attributes have same value: '{self.log_path}', must be different!"
64
- )
65
-
66
- return self
67
-
68
-
69
57
  class FileConfigPM(ExtraBaseModel):
70
58
  logs_dir: str = Field(
71
- default="./logs",
59
+ default_factory=lambda: os.path.join(os.getcwd(), "logs"),
72
60
  min_length=2,
73
61
  max_length=1024,
74
62
  )
@@ -79,21 +67,6 @@ class FileConfigPM(ExtraBaseModel):
79
67
  retention: int = Field(default=90, ge=1)
80
68
  encoding: str = Field(default="utf8", min_length=2, max_length=31)
81
69
 
82
- plain: PathsConfigPM = Field(
83
- default_factory=lambda: PathsConfigPM(
84
- log_path="{app_name}.all.log",
85
- err_path="{app_name}.err.log",
86
- )
87
- )
88
- json_: PathsConfigPM = Field(
89
- default_factory=lambda: PathsConfigPM(
90
- log_path="json/{app_name}.json.all.log",
91
- err_path="json/{app_name}.json.err.log",
92
- ),
93
- validation_alias="json",
94
- serialization_alias="json",
95
- )
96
-
97
70
  @field_validator("rotate_time", mode="before")
98
71
  @classmethod
99
72
  def _check_rotate_time(cls, val: Any) -> Any:
@@ -102,6 +75,14 @@ class FileConfigPM(ExtraBaseModel):
102
75
 
103
76
  return val
104
77
 
78
+ @field_validator("logs_dir", mode="before")
79
+ @classmethod
80
+ def _check_logs_dir(cls, val: Any) -> Any:
81
+ if isinstance(val, str) and (not os.path.isabs(val)):
82
+ val = os.path.abspath(val)
83
+
84
+ return val
85
+
105
86
 
106
87
  class LevelConfigPM(ExtraBaseModel):
107
88
  base: str | int | LogLevelEnum = Field(default=LogLevelEnum.INFO)
@@ -123,7 +104,6 @@ class LevelConfigPM(ExtraBaseModel):
123
104
 
124
105
  class DefaultConfigPM(ExtraBaseModel):
125
106
  level: LevelConfigPM = Field(default_factory=LevelConfigPM)
126
- std: StdConfigPM = Field(default_factory=StdConfigPM)
127
107
  format_str: str = Field(
128
108
  default="[{time:YYYY-MM-DD HH:mm:ss.SSS Z} | {extra[level_short]:<5} | {name}:{line}]: {message}",
129
109
  min_length=8,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: beans_logging
3
- Version: 7.0.0
3
+ Version: 7.1.0
4
4
  Summary: 'beans-logging' is a python package for simple logger and easily managing logs.
5
5
  Author-email: Batkhuu Byambajav <batkhuu10@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/bybatkhuu/module-python-logging
@@ -323,9 +323,6 @@ logger:
323
323
  level:
324
324
  base: INFO
325
325
  err: WARNING
326
- std:
327
- format_str: "[<c>{time:YYYY-MM-DD HH:mm:ss.SSS Z}</c> | <level>{extra[level_short]:<5}</level> | <w>{name}:{line}</w>]: <level>{message}</level>"
328
- colorize: true
329
326
  format_str: "[{time:YYYY-MM-DD HH:mm:ss.SSS Z} | {extra[level_short]:<5} | {name}:{line}]: {message}"
330
327
  file:
331
328
  logs_dir: "./logs"
@@ -333,12 +330,6 @@ logger:
333
330
  rotate_time: "00:00:00"
334
331
  retention: 90
335
332
  encoding: utf8
336
- plain:
337
- log_path: "{app_name}.all.log"
338
- err_path: "{app_name}.err.log"
339
- json:
340
- log_path: "json/{app_name}.json.all.log"
341
- err_path: "json/{app_name}.json.err.log"
342
333
  custom_serialize: false
343
334
  intercept:
344
335
  enabled: true
@@ -349,20 +340,26 @@ logger:
349
340
  handlers:
350
341
  default.all.std_handler:
351
342
  type: STD
343
+ format: "[<c>{time:YYYY-MM-DD HH:mm:ss.SSS Z}</c> | <level>{extra[level_short]:<5}</level> | <w>{name}:{line}</w>]: <level>{message}</level>"
344
+ colorize: true
352
345
  enabled: true
353
346
  default.all.file_handler:
354
347
  type: FILE
348
+ sink: "{app_name}.all.log"
355
349
  enabled: false
356
350
  default.err.file_handler:
357
351
  type: FILE
352
+ sink: "{app_name}.err.log"
358
353
  error: true
359
354
  enabled: false
360
355
  default.all.json_handler:
361
356
  type: FILE
357
+ sink: "json/{app_name}.json.all.log"
362
358
  serialize: true
363
359
  enabled: false
364
360
  default.err.json_handler:
365
361
  type: FILE
362
+ sink: "json/{app_name}.json.err.log"
366
363
  serialize: true
367
364
  error: true
368
365
  enabled: false
@@ -1 +0,0 @@
1
- __version__ = "7.0.0"
File without changes
File without changes
File without changes