datatailr 0.1.30__tar.gz → 0.1.32__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.

Potentially problematic release.


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

Files changed (39) hide show
  1. {datatailr-0.1.30/src/datatailr.egg-info → datatailr-0.1.32}/PKG-INFO +1 -1
  2. {datatailr-0.1.30 → datatailr-0.1.32}/pyproject.toml +1 -1
  3. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/logging.py +40 -9
  4. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/scheduler/batch.py +9 -1
  5. {datatailr-0.1.30 → datatailr-0.1.32/src/datatailr.egg-info}/PKG-INFO +1 -1
  6. {datatailr-0.1.30 → datatailr-0.1.32}/src/sbin/datatailr_run.py +1 -1
  7. {datatailr-0.1.30 → datatailr-0.1.32}/LICENSE +0 -0
  8. {datatailr-0.1.30 → datatailr-0.1.32}/README.md +0 -0
  9. {datatailr-0.1.30 → datatailr-0.1.32}/setup.cfg +0 -0
  10. {datatailr-0.1.30 → datatailr-0.1.32}/setup.py +0 -0
  11. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/__init__.py +0 -0
  12. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/acl.py +0 -0
  13. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/blob.py +0 -0
  14. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/build/__init__.py +0 -0
  15. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/build/image.py +0 -0
  16. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/dt_json.py +0 -0
  17. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/errors.py +0 -0
  18. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/excel.py +0 -0
  19. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/group.py +0 -0
  20. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/scheduler/__init__.py +0 -0
  21. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/scheduler/arguments_cache.py +0 -0
  22. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/scheduler/base.py +0 -0
  23. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/scheduler/batch_decorator.py +0 -0
  24. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/scheduler/constants.py +0 -0
  25. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/scheduler/schedule.py +0 -0
  26. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/scheduler/utils.py +0 -0
  27. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/user.py +0 -0
  28. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/utils.py +0 -0
  29. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/version.py +0 -0
  30. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr/wrapper.py +0 -0
  31. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr.egg-info/SOURCES.txt +0 -0
  32. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr.egg-info/dependency_links.txt +0 -0
  33. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr.egg-info/entry_points.txt +0 -0
  34. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr.egg-info/requires.txt +0 -0
  35. {datatailr-0.1.30 → datatailr-0.1.32}/src/datatailr.egg-info/top_level.txt +0 -0
  36. {datatailr-0.1.30 → datatailr-0.1.32}/src/sbin/datatailr_run_app.py +0 -0
  37. {datatailr-0.1.30 → datatailr-0.1.32}/src/sbin/datatailr_run_batch.py +0 -0
  38. {datatailr-0.1.30 → datatailr-0.1.32}/src/sbin/datatailr_run_excel.py +0 -0
  39. {datatailr-0.1.30 → datatailr-0.1.32}/src/sbin/datatailr_run_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datatailr
3
- Version: 0.1.30
3
+ Version: 0.1.32
4
4
  Summary: Ready-to-Use Platform That Drives Business Insights
5
5
  Author-email: Datatailr <info@datatailr.com>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "datatailr"
7
- version = "0.1.30"
7
+ version = "0.1.32"
8
8
  description = "Ready-to-Use Platform That Drives Business Insights"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -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.32
4
4
  Summary: Ready-to-Use Platform That Drives Business Insights
5
5
  Author-email: Datatailr <info@datatailr.com>
6
6
  License-Expression: MIT
@@ -43,7 +43,7 @@ logger = DatatailrLogger(os.path.abspath(__file__)).get_logger()
43
43
 
44
44
  if not is_dt_installed():
45
45
  logger.error("Datatailr is not installed.")
46
- sys.exit(1)
46
+ # sys.exit(1) # TODO: Uncomment after testing
47
47
 
48
48
 
49
49
  def get_env_var(name: str, default: str | None = None) -> str:
File without changes
File without changes
File without changes
File without changes