beans-logging 7.0.0__py3-none-any.whl → 7.1.0__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__ = "7.0.0"
1
+ __version__ = "7.1.0"
beans_logging/_builder.py CHANGED
@@ -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
beans_logging/config.py CHANGED
@@ -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,18 +1,18 @@
1
1
  beans_logging/__init__.py,sha256=KOXpuCNTMsdlY9MF6ONwRjM5O1_JCkIzt_qetb2BFTw,261
2
- beans_logging/__version__.py,sha256=VgMOOqsYbyb60I1RmlZpqwqQ0C0IyT3R0c8_xX4pRGM,22
3
- beans_logging/_builder.py,sha256=KUHZLMj6AqyDQGpVVB4XGEP3xI_kkjNMG-pbV_PvtLE,5644
2
+ beans_logging/__version__.py,sha256=vrQk6cOG_uk0gOqN4qh7NRCxezXfvhv9tT7bwYHyTck,22
3
+ beans_logging/_builder.py,sha256=6v9i6zJIVQPOElZ4x3cI-UULx0ae59qWe0E5G5Vy37M,4469
4
4
  beans_logging/_constants.py,sha256=rH9ZN-b7GXNXjbpOZUJfsft54Eiy8jnXm82jsFcMo3k,510
5
5
  beans_logging/_core.py,sha256=qkGl5NRKY7lKuVatwFmddwxeYS5viU5DDnfKucWK3Mo,9617
6
6
  beans_logging/_intercept.py,sha256=TeYze0eXRMVkOoC9Bl2qmaC7fSwExfQAmmGHz5KiuCU,3249
7
7
  beans_logging/auto.py,sha256=MoNuQomiIFWQVpNTkOmFFVMo00HBlErfHC728GFOyqc,218
8
- beans_logging/config.py,sha256=yDA-IbjhMIgP1DrFKa0ZDibNWAH_Ov8R7Hnqfggl71E,6172
8
+ beans_logging/config.py,sha256=E_bQy-sJxTIjhpOXOTm-gg5zOcOplcBnCprdl7xDvaY,5534
9
9
  beans_logging/filters.py,sha256=-Rys2rwuT7EUvuEA19jnhW6enIEkDuPzeGbAAz6RJSc,3720
10
10
  beans_logging/formats.py,sha256=Vrr4RkCfiJl-oi6BLVxeR-k0WhTR0oBI4mpsWgBJBNE,1624
11
11
  beans_logging/rotators.py,sha256=lzR31sdEPTZVDkyhC81FL4OnezIVKlElGJDRA2Svn2I,2121
12
12
  beans_logging/schemas.py,sha256=b4igq8CkAzn7CGOBDc09hW0YTvWyuWRe97fpv_OaNdk,4444
13
13
  beans_logging/sinks.py,sha256=7Guusg3N1S-28hLnRzuunP8lXnhexzny3aj-AR0HhuQ,482
14
- beans_logging-7.0.0.dist-info/licenses/LICENSE.txt,sha256=CUTK-r0BWIg1r0bBiemAcMhakgV0N7HuRhw6rQ-A9A4,1074
15
- beans_logging-7.0.0.dist-info/METADATA,sha256=v6LwlP4Gc4ZnyvYnVHka9okW38UV9e2f2A_23-5Q9qs,13155
16
- beans_logging-7.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
17
- beans_logging-7.0.0.dist-info/top_level.txt,sha256=lx8JEqYGNha1sYbVrTtMo2Z01A7Shq8hX6bfsuKLTG8,14
18
- beans_logging-7.0.0.dist-info/RECORD,,
14
+ beans_logging-7.1.0.dist-info/licenses/LICENSE.txt,sha256=CUTK-r0BWIg1r0bBiemAcMhakgV0N7HuRhw6rQ-A9A4,1074
15
+ beans_logging-7.1.0.dist-info/METADATA,sha256=IJ80xo6ZU9nslzIfgXfuwq0ytEiaOLRvn9yZLRFTSjE,13093
16
+ beans_logging-7.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
17
+ beans_logging-7.1.0.dist-info/top_level.txt,sha256=lx8JEqYGNha1sYbVrTtMo2Z01A7Shq8hX6bfsuKLTG8,14
18
+ beans_logging-7.1.0.dist-info/RECORD,,