datatailr 0.1.26__tar.gz → 0.1.28__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.26/src/datatailr.egg-info → datatailr-0.1.28}/PKG-INFO +1 -1
  2. {datatailr-0.1.26 → datatailr-0.1.28}/pyproject.toml +1 -1
  3. {datatailr-0.1.26 → datatailr-0.1.28/src/datatailr.egg-info}/PKG-INFO +1 -1
  4. {datatailr-0.1.26 → datatailr-0.1.28}/src/sbin/datatailr_run.py +23 -9
  5. {datatailr-0.1.26 → datatailr-0.1.28}/LICENSE +0 -0
  6. {datatailr-0.1.26 → datatailr-0.1.28}/README.md +0 -0
  7. {datatailr-0.1.26 → datatailr-0.1.28}/setup.cfg +0 -0
  8. {datatailr-0.1.26 → datatailr-0.1.28}/setup.py +0 -0
  9. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/__init__.py +0 -0
  10. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/acl.py +0 -0
  11. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/blob.py +0 -0
  12. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/build/__init__.py +0 -0
  13. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/build/image.py +0 -0
  14. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/dt_json.py +0 -0
  15. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/errors.py +0 -0
  16. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/excel.py +0 -0
  17. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/group.py +0 -0
  18. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/logging.py +0 -0
  19. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/scheduler/__init__.py +0 -0
  20. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/scheduler/arguments_cache.py +0 -0
  21. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/scheduler/base.py +0 -0
  22. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/scheduler/batch.py +0 -0
  23. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/scheduler/batch_decorator.py +0 -0
  24. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/scheduler/constants.py +0 -0
  25. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/scheduler/schedule.py +0 -0
  26. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/scheduler/utils.py +0 -0
  27. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/user.py +0 -0
  28. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/utils.py +0 -0
  29. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/version.py +0 -0
  30. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr/wrapper.py +0 -0
  31. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr.egg-info/SOURCES.txt +0 -0
  32. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr.egg-info/dependency_links.txt +0 -0
  33. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr.egg-info/entry_points.txt +0 -0
  34. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr.egg-info/requires.txt +0 -0
  35. {datatailr-0.1.26 → datatailr-0.1.28}/src/datatailr.egg-info/top_level.txt +0 -0
  36. {datatailr-0.1.26 → datatailr-0.1.28}/src/sbin/datatailr_run_app.py +0 -0
  37. {datatailr-0.1.26 → datatailr-0.1.28}/src/sbin/datatailr_run_batch.py +0 -0
  38. {datatailr-0.1.26 → datatailr-0.1.28}/src/sbin/datatailr_run_excel.py +0 -0
  39. {datatailr-0.1.26 → datatailr-0.1.28}/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.26
3
+ Version: 0.1.28
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.26"
7
+ version = "0.1.28"
8
8
  description = "Ready-to-Use Platform That Drives Business Insights"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datatailr
3
- Version: 0.1.26
3
+ Version: 0.1.28
4
4
  Summary: Ready-to-Use Platform That Drives Business Insights
5
5
  Author-email: Datatailr <info@datatailr.com>
6
6
  License-Expression: MIT
@@ -32,6 +32,7 @@
32
32
  # DATATAILR_JOB_ID - the unique identifier for the job.
33
33
 
34
34
 
35
+ import subprocess
35
36
  import os
36
37
  import sys
37
38
  from typing import Tuple
@@ -80,18 +81,31 @@ def create_user_and_group() -> Tuple[str, str]:
80
81
  return user, group
81
82
 
82
83
 
83
- def run_command_as_user(command: str, user: str, env_vars: dict):
84
+ def run_command_as_user(command: str | list, user: str, env_vars: dict):
84
85
  """
85
86
  Run a command as a specific user with the given environment variables.
86
87
  """
87
- env_vars.update({"PATH": get_env_var("PATH")})
88
- env_vars.update({"PYTHONPATH": get_env_var("PYTHONPATH", "")})
89
- env_vars_str = " ".join(f"{key}='{value}'" for key, value in env_vars.items())
90
- full_command = f"sudo -u {user} {env_vars_str} {command}"
91
- logger.debug(f"Running command: {full_command}")
92
- status = os.system(full_command)
93
- if status != 0:
94
- logger.error(f"Command failed with status {status / 256:g}")
88
+ if isinstance(command, str):
89
+ command = command.split(" ")
90
+ env_vars = {
91
+ "PATH": get_env_var("PATH", ""),
92
+ "PYTHONPATH": get_env_var("PYTHONPATH", ""),
93
+ } | env_vars
94
+ full_command = ["sudo", "-u", user, *command]
95
+
96
+ try:
97
+ result = subprocess.run(
98
+ full_command,
99
+ env=env_vars,
100
+ check=True, # raises if returncode != 0
101
+ capture_output=True,
102
+ text=True,
103
+ )
104
+ logger.info(f"stdout: {result.stdout}")
105
+ logger.debug(f"stderr: {result.stderr}")
106
+ except subprocess.CalledProcessError as e:
107
+ logger.error(f"Command failed with exit code {e.returncode}")
108
+ logger.error(f"stderr: {e.stderr}")
95
109
  sys.exit(1)
96
110
 
97
111
 
File without changes
File without changes
File without changes
File without changes