datatailr 0.1.30__py3-none-any.whl → 0.1.31__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.

Potentially problematic release.


This version of datatailr might be problematic. Click here for more details.

datatailr/logging.py CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  import logging
12
12
  import os
13
- from logging import StreamHandler
13
+ import sys
14
14
  from logging.handlers import RotatingFileHandler
15
15
  from typing import Optional
16
16
  from datatailr import User
@@ -33,6 +33,28 @@ def get_log_level() -> int:
33
33
  return logging.INFO
34
34
 
35
35
 
36
+ class MaxLevelFilter(logging.Filter):
37
+ """Allow only log records at or below a given level."""
38
+
39
+ def __init__(self, level):
40
+ super().__init__()
41
+ self.level = level
42
+
43
+ def filter(self, record: logging.LogRecord) -> bool:
44
+ return record.levelno <= self.level
45
+
46
+
47
+ class MinLevelFilter(logging.Filter):
48
+ """Allow only log records at or above a given level."""
49
+
50
+ def __init__(self, level):
51
+ super().__init__()
52
+ self.level = level
53
+
54
+ def filter(self, record: logging.LogRecord) -> bool:
55
+ return record.levelno >= self.level
56
+
57
+
36
58
  tag = dt__Tag()
37
59
  node_name = tag.get("node_name") or "local"
38
60
  node_ip = tag.get("node_ip")
@@ -66,12 +88,21 @@ class DatatailrLogger:
66
88
  self.logger = logging.getLogger(name)
67
89
  self.logger.setLevel(log_level)
68
90
 
69
- # Stream handler for stdout/stderr
70
- stream_handler = StreamHandler()
71
- stream_handler.setLevel(log_level)
72
- stream_formatter = logging.Formatter(log_format)
73
- stream_handler.setFormatter(stream_formatter)
74
- self.logger.addHandler(stream_handler)
91
+ formatter = logging.Formatter(log_format)
92
+
93
+ # stdout handler (DEBUG/INFO only)
94
+ stdout_handler = logging.StreamHandler(sys.stdout)
95
+ stdout_handler.setLevel(logging.DEBUG)
96
+ stdout_handler.addFilter(MaxLevelFilter(logging.INFO))
97
+ stdout_handler.setFormatter(formatter)
98
+ self.logger.addHandler(stdout_handler)
99
+
100
+ # stderr handler (WARNING and above)
101
+ stderr_handler = logging.StreamHandler(sys.stderr)
102
+ stderr_handler.setLevel(logging.WARNING)
103
+ stderr_handler.addFilter(MinLevelFilter(logging.WARNING))
104
+ stderr_handler.setFormatter(formatter)
105
+ self.logger.addHandler(stderr_handler)
75
106
 
76
107
  # Optional file handler
77
108
  if log_file:
@@ -79,9 +110,9 @@ class DatatailrLogger:
79
110
  log_file, maxBytes=10 * 1024 * 1024, backupCount=5
80
111
  )
81
112
  file_handler.setLevel(log_level)
82
- file_formatter = logging.Formatter(log_format)
83
- file_handler.setFormatter(file_formatter)
113
+ file_handler.setFormatter(formatter)
84
114
  self.logger.addHandler(file_handler)
115
+
85
116
  self.enable_opentelemetry()
86
117
 
87
118
  def get_logger(self):
@@ -459,7 +459,7 @@ class Batch(Job):
459
459
  return args
460
460
  return {}
461
461
 
462
- def run(self) -> Tuple[bool, str]:
462
+ def prepare_args(self) -> None:
463
463
  def arg_name(arg: Union[BatchJob, str]) -> str:
464
464
  return arg.name if isinstance(arg, BatchJob) else arg
465
465
 
@@ -481,6 +481,14 @@ class Batch(Job):
481
481
  }
482
482
 
483
483
  __ARGUMENTS_CACHE__.add_arguments(self.id, args)
484
+
485
+ def save(self) -> Tuple[bool, str]:
486
+ self.prepare_args()
487
+ return super().save()
488
+
489
+ def run(self) -> Tuple[bool, str]:
490
+ self.prepare_args()
491
+
484
492
  if not self.__local_run and is_dt_installed():
485
493
  return super().run()
486
494
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datatailr
3
- Version: 0.1.30
3
+ Version: 0.1.31
4
4
  Summary: Ready-to-Use Platform That Drives Business Insights
5
5
  Author-email: Datatailr <info@datatailr.com>
6
6
  License-Expression: MIT
@@ -5,7 +5,7 @@ datatailr/dt_json.py,sha256=3xmTqDBk68oPl2UW8UVOYPaBw4lAsVg6nDLwcen5nuo,2252
5
5
  datatailr/errors.py,sha256=p_e4ao3sFEfz1g4LvEDqw6bVzHJPJSINLjJ8H6_PqOo,751
6
6
  datatailr/excel.py,sha256=7_13VFHrjHlIAEeTaGQIlq4ycJvzRo-TvkP_KRBELGs,425
7
7
  datatailr/group.py,sha256=AC0nCA44eEWZCJCq2klPqkFg_995mS3C_wu5uSFFLtU,4426
8
- datatailr/logging.py,sha256=4Rsx3wf2tAr1334E2goBjhC877RwbUNaFgBlh902vU4,3270
8
+ datatailr/logging.py,sha256=msr0vzIaOtXmKjxsPpMw0Zl7jX9C_W0IuUwNjmqhhcA,4146
9
9
  datatailr/user.py,sha256=tjIMbQ-tb2yFhgLBl_eTb47kKiy-RoM3KtYS3zmJiwc,6736
10
10
  datatailr/utils.py,sha256=mqnnERMyHNAuAgFY4Ry4O4yW0ZjCRtJbjfI5fXVqt2s,1524
11
11
  datatailr/version.py,sha256=N9K8ZxlwFFSz8XSgbgaTWZY4k2J0JKfj698nZ_O2pIU,536
@@ -20,14 +20,14 @@ datatailr/sbin/datatailr_run_service.py,sha256=R8eNLN2SGnMtyfLy3vq9isUHr3dRzeBqE
20
20
  datatailr/scheduler/__init__.py,sha256=qydHYVtEP6SUWd2CQ6FRdTdRWNz3SbYPJy4FK_wOvMk,1772
21
21
  datatailr/scheduler/arguments_cache.py,sha256=3sKXg4_baeZNo8jvSGTFK6zT5RM1TKMpH-UVS1CLn20,6014
22
22
  datatailr/scheduler/base.py,sha256=cOTtXOloxjfJknWr3W1VEbpwGB5llrDreCot7Zv1Hkk,15015
23
- datatailr/scheduler/batch.py,sha256=JBSiFNwv2X2BkBocz7ddVmwND6MFds978f0Ok5f8aUc,16782
23
+ datatailr/scheduler/batch.py,sha256=2bWcWwcoQjfoJCKIFgoc4L_aCq8nR2v34ri6EMsy0LE,16947
24
24
  datatailr/scheduler/batch_decorator.py,sha256=LqL1bsupWLn-YEQUvFJYae7R3ogrL5-VodyiiScrkRw,5806
25
25
  datatailr/scheduler/constants.py,sha256=5WWTsfwZ_BA8gVDOTa2AQX9DJ0NzfaWgtY3vrODS2-8,606
26
26
  datatailr/scheduler/schedule.py,sha256=0XJJen2nL1xplRs0Xbjwgq3T-0bFCOrJzkSALdio998,3741
27
27
  datatailr/scheduler/utils.py,sha256=up6oR2iwe6G52LkvgfO394xchXgCYNjOMGRQW3e8PQk,1082
28
- datatailr-0.1.30.dist-info/licenses/LICENSE,sha256=ikKP4_O-UD_b8FuNdKmbzTb6odd0JX085ZW_FAPN3VI,1066
29
- datatailr-0.1.30.dist-info/METADATA,sha256=66PRVMXOkl5sjVTQe7bgSpaNF1PiBXJUnbB1OdGDyuY,5146
30
- datatailr-0.1.30.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
31
- datatailr-0.1.30.dist-info/entry_points.txt,sha256=YqXfk2At-olW4PUSRkqvy_O3Mbv7uTKCCPuAAiz3Qbg,312
32
- datatailr-0.1.30.dist-info/top_level.txt,sha256=75gntW0X_SKpqxLL6hAPipvpk28GAhJBvoyqN_HohWU,10
33
- datatailr-0.1.30.dist-info/RECORD,,
28
+ datatailr-0.1.31.dist-info/licenses/LICENSE,sha256=ikKP4_O-UD_b8FuNdKmbzTb6odd0JX085ZW_FAPN3VI,1066
29
+ datatailr-0.1.31.dist-info/METADATA,sha256=czvwodDtR4q7tW4AuMAB9Kxj9T2HewWpQaAgcyPyGrE,5146
30
+ datatailr-0.1.31.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
31
+ datatailr-0.1.31.dist-info/entry_points.txt,sha256=YqXfk2At-olW4PUSRkqvy_O3Mbv7uTKCCPuAAiz3Qbg,312
32
+ datatailr-0.1.31.dist-info/top_level.txt,sha256=75gntW0X_SKpqxLL6hAPipvpk28GAhJBvoyqN_HohWU,10
33
+ datatailr-0.1.31.dist-info/RECORD,,