abstract-utilities 0.2.2.456__tar.gz → 0.2.2.458__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 abstract-utilities might be problematic. Click here for more details.
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/PKG-INFO +1 -1
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/setup.py +1 -1
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/file_utils/__init__.py +1 -0
- abstract_utilities-0.2.2.458/src/abstract_utilities/file_utils/file_utils/type_checks.py +83 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/read_write_utils.py +76 -21
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities.egg-info/PKG-INFO +1 -1
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities.egg-info/SOURCES.txt +1 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/README.md +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/pyproject.toml +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/setup.cfg +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/abstract_classes.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/class_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/cmd_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/cmd_utils/cmd_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/cmd_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/cmd_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/cmd_utils/pexpect_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/cmd_utils/user_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/collator_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/compare_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/compare_utils/best_match.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/compare_utils/compare_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/compare_utils/find_value.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/doit.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/dynimport.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/env_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/env_utils/abstractEnv.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/env_utils/envy_it.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/env_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/env_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/env_utils/imports/utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/error_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/file_utils/file_filters.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/file_utils/file_reader.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/file_utils/file_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/file_utils/filter_params.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/file_utils/find_collect.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/file_utils/imports.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/file_utils/map_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/file_utils/pdf_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/imports/classes.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/imports/constants.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/imports/file_functions.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/file_utils/req.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/global_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/hash_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/history_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/json_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/list_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/log_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/math_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/parse_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/path_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_reader/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_reader/file_reader2.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_reader/file_readers.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_reader/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_reader/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_reader/sadfsad.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_readers/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_readers/import_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_readers/import_utils/dot_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_readers/import_utils/function_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_readers/import_utils/import_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_readers/import_utils/impot_functions.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_readers/import_utils/safe_import_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_readers/import_utils/sysroot_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_readers/import_utils/utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_readers/imports.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/robust_readers/initFuncGen.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/safe_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/ssh_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/ssh_utils/classes.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/ssh_utils/imports.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/ssh_utils/pexpect_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/ssh_utils/utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/string_clean.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/string_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/tetsts.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/thread_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/time_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/type_utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/utils.py +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities.egg-info/dependency_links.txt +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities.egg-info/requires.txt +0 -0
- {abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: abstract_utilities
|
|
3
|
-
Version: 0.2.2.
|
|
3
|
+
Version: 0.2.2.458
|
|
4
4
|
Summary: abstract_utilities is a collection of utility modules providing a variety of functions to aid in tasks such as data comparison, list manipulation, JSON handling, string manipulation, mathematical computations, and time operations.
|
|
5
5
|
Home-page: https://github.com/AbstractEndeavors/abstract_utilities
|
|
6
6
|
Author: putkoff
|
|
@@ -4,7 +4,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
|
|
|
4
4
|
long_description = fh.read()
|
|
5
5
|
setuptools.setup(
|
|
6
6
|
name='abstract_utilities',
|
|
7
|
-
version='0.2.2.
|
|
7
|
+
version='0.2.2.458',
|
|
8
8
|
author='putkoff',
|
|
9
9
|
author_email='partners@abstractendeavors.com',
|
|
10
10
|
description='abstract_utilities is a collection of utility modules providing a variety of functions to aid in tasks such as data comparison, list manipulation, JSON handling, string manipulation, mathematical computations, and time operations.',
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from .imports import *
|
|
2
|
+
import subprocess, os
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
# --- Base remote checker -----------------------------------------------------
|
|
6
|
+
def _remote_test(path: str, test_flag: str, user_at_host: str, timeout: int = 5) -> bool:
|
|
7
|
+
"""
|
|
8
|
+
Run a remote shell test (e.g. -f, -d) via SSH.
|
|
9
|
+
Returns True if test succeeds, False otherwise.
|
|
10
|
+
"""
|
|
11
|
+
cmd = f"[ {test_flag} {shlex.quote(path)} ] && echo 1 || echo 0"
|
|
12
|
+
try:
|
|
13
|
+
result = subprocess.check_output(
|
|
14
|
+
["ssh", user_at_host, cmd],
|
|
15
|
+
stderr=subprocess.DEVNULL,
|
|
16
|
+
text=True,
|
|
17
|
+
timeout=timeout
|
|
18
|
+
).strip()
|
|
19
|
+
return result == "1"
|
|
20
|
+
except Exception:
|
|
21
|
+
return False
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# --- Individual path checks --------------------------------------------------
|
|
25
|
+
def is_remote_file(path: str, user_at_host: str) -> bool:
|
|
26
|
+
"""True if remote path is a file."""
|
|
27
|
+
return _remote_test(path, "-f", user_at_host)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def is_remote_dir(path: str, user_at_host: str) -> bool:
|
|
31
|
+
"""True if remote path is a directory."""
|
|
32
|
+
return _remote_test(path, "-d", user_at_host)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def is_local_file(path: str) -> bool:
|
|
36
|
+
"""True if local path is a file."""
|
|
37
|
+
return os.path.isfile(path)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def is_local_dir(path: str) -> bool:
|
|
41
|
+
"""True if local path is a directory."""
|
|
42
|
+
return os.path.isdir(path)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# --- Unified interface -------------------------------------------------------
|
|
46
|
+
def is_file(path: str,*args, user_at_host: Optional[str] = None,**kwargs) -> bool:
|
|
47
|
+
"""Determine if path is a file (works local or remote)."""
|
|
48
|
+
if user_at_host:
|
|
49
|
+
return is_remote_file(path, user_at_host)
|
|
50
|
+
return is_local_file(path)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def is_dir(path: str, *args,user_at_host: Optional[str] = None,**kwargs)) -> bool:
|
|
54
|
+
"""Determine if path is a directory (works local or remote)."""
|
|
55
|
+
if user_at_host:
|
|
56
|
+
return is_remote_dir(path, user_at_host)
|
|
57
|
+
return is_local_dir(path)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# --- Optional: keep your original all-in-one wrapper ------------------------
|
|
61
|
+
def check_path_type(
|
|
62
|
+
path: str,
|
|
63
|
+
user_at_host: Optional[str] = None,
|
|
64
|
+
) -> str:
|
|
65
|
+
"""
|
|
66
|
+
Return 'file', 'directory', 'missing', or 'unknown'.
|
|
67
|
+
Uses isolated is_file/is_dir functions.
|
|
68
|
+
"""
|
|
69
|
+
if user_at_host:
|
|
70
|
+
if is_remote_file(path, user_at_host):
|
|
71
|
+
return "file"
|
|
72
|
+
elif is_remote_dir(path, user_at_host):
|
|
73
|
+
return "directory"
|
|
74
|
+
else:
|
|
75
|
+
return "missing"
|
|
76
|
+
else:
|
|
77
|
+
if os.path.isfile(path):
|
|
78
|
+
return "file"
|
|
79
|
+
elif os.path.isdir(path):
|
|
80
|
+
return "directory"
|
|
81
|
+
elif not os.path.exists(path):
|
|
82
|
+
return "missing"
|
|
83
|
+
return "unknown"
|
|
@@ -12,16 +12,14 @@ Usage:
|
|
|
12
12
|
from abstract_utilities.read_write_utils import *
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
|
-
import os
|
|
15
|
+
import os
|
|
16
16
|
from .ssh_utils.utils import run_cmd
|
|
17
|
+
from .file_utils.file_utils.type_checks import is_file,is_dir
|
|
17
18
|
from .abstract_classes import run_pruned_func
|
|
18
19
|
_FILE_PATH_KEYS = ['file', 'filepath', 'file_path', 'path', 'directory', 'f', 'dst', 'dest']
|
|
19
20
|
_CONTENTS_KEYS = ['cont', 'content', 'contents', 'data', 'datas', 'dat', 'src', 'source']
|
|
20
21
|
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
META_SUFFIX = ".meta.json"
|
|
24
|
-
|
|
25
23
|
# --- Helper utilities --------------------------------------------------------
|
|
26
24
|
def string_in_keys(strings, kwargs):
|
|
27
25
|
"""Find a matching keyword in kwargs that contains any of the given substrings."""
|
|
@@ -76,28 +74,59 @@ def check_read_write_params(*args, **kwargs):
|
|
|
76
74
|
raise ValueError("Missing file_path argument.")
|
|
77
75
|
return file_path, contents
|
|
78
76
|
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
def write_to_path(
|
|
78
|
+
file_path: str,
|
|
79
|
+
contents: str,
|
|
80
|
+
*,
|
|
81
|
+
user_at_host: str = None,
|
|
82
|
+
cwd: str | None = None,
|
|
83
|
+
password=None,
|
|
84
|
+
key=None,
|
|
85
|
+
env_path=None,
|
|
86
|
+
**kwargs
|
|
87
|
+
) -> str:
|
|
81
88
|
"""
|
|
82
|
-
|
|
89
|
+
Completely overwrite a file (locally or remotely).
|
|
90
|
+
Supports sudo and password-based remote execution.
|
|
83
91
|
"""
|
|
84
|
-
file_path, contents = check_read_write_params(*args, **kwargs)
|
|
85
|
-
if contents is None:
|
|
86
|
-
raise ValueError("Missing contents to write.")
|
|
87
92
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
93
|
+
# sanitize for shell safety
|
|
94
|
+
quoted_path = shlex.quote(file_path)
|
|
95
|
+
quoted_data = shlex.quote(str(contents))
|
|
91
96
|
|
|
92
|
-
#
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
meta_path = file_path + META_SUFFIX
|
|
96
|
-
with open(meta_path, "w", encoding="utf-8") as m:
|
|
97
|
-
json.dump({"user_at_host": user_at_host}, m)
|
|
97
|
+
# shell command that fully overwrites
|
|
98
|
+
# (no append, replaces contents entirely)
|
|
99
|
+
base_cmd = f"echo {quoted_data} > {quoted_path}"
|
|
98
100
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
+
# optional sudo password injection
|
|
102
|
+
full_cmd = get_print_sudo_cmd(
|
|
103
|
+
cmd=base_cmd,
|
|
104
|
+
password=password,
|
|
105
|
+
key=key,
|
|
106
|
+
env_path=env_path
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
# local or remote dispatch
|
|
110
|
+
if user_at_host:
|
|
111
|
+
return run_remote_cmd(
|
|
112
|
+
user_at_host=user_at_host,
|
|
113
|
+
cmd=full_cmd,
|
|
114
|
+
cwd=cwd,
|
|
115
|
+
password=password,
|
|
116
|
+
key=key,
|
|
117
|
+
env_path=env_path,
|
|
118
|
+
**kwargs
|
|
119
|
+
)
|
|
120
|
+
else:
|
|
121
|
+
return run_local_cmd(
|
|
122
|
+
cmd=full_cmd,
|
|
123
|
+
cwd=cwd,
|
|
124
|
+
password=password,
|
|
125
|
+
key=key,
|
|
126
|
+
env_path=env_path,
|
|
127
|
+
**kwargs
|
|
128
|
+
)
|
|
129
|
+
### --- Core functionality -------------------------------------------------------
|
|
101
130
|
##def write_to_file(*args, **kwargs):
|
|
102
131
|
## """
|
|
103
132
|
## Write contents to a file (create if missing).
|
|
@@ -112,6 +141,32 @@ def write_to_file(*args, **kwargs):
|
|
|
112
141
|
## with open(file_path, "w", encoding="utf-8") as f:
|
|
113
142
|
## f.write(str(contents))
|
|
114
143
|
## return file_path
|
|
144
|
+
# --- Core functionality -------------------------------------------------------
|
|
145
|
+
def write_to_file(*args, **kwargs):
|
|
146
|
+
"""
|
|
147
|
+
Write contents to a file (create if missing).
|
|
148
|
+
|
|
149
|
+
Returns the file_path written.
|
|
150
|
+
"""
|
|
151
|
+
file_path, contents = check_read_write_params(*args, **kwargs)
|
|
152
|
+
if contents is None:
|
|
153
|
+
raise ValueError("Missing contents to write.")
|
|
154
|
+
user_at_host = kwargs.get("user_at_host")
|
|
155
|
+
if user_at_host:
|
|
156
|
+
kwargs["cwd"] = kwargs.get('cwd') or os.path.dirname(file_path)
|
|
157
|
+
# sanitize for shell safety
|
|
158
|
+
quoted_path = shlex.quote(file_path)
|
|
159
|
+
quoted_data = shlex.quote(str(contents))
|
|
160
|
+
# shell command that fully overwrites
|
|
161
|
+
# (no append, replaces contents entirely)
|
|
162
|
+
kwargs["cmd"] = f"echo {quoted_data} > {quoted_path}"
|
|
163
|
+
return run_pruned_func(run_cmd,**kwargs)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
os.makedirs(os.path.dirname(file_path) or ".", exist_ok=True)
|
|
167
|
+
with open(file_path, "w", encoding="utf-8") as f:
|
|
168
|
+
f.write(str(contents))
|
|
169
|
+
return file_path
|
|
115
170
|
|
|
116
171
|
|
|
117
172
|
def read_from_file(file_path,**kwargs):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: abstract_utilities
|
|
3
|
-
Version: 0.2.2.
|
|
3
|
+
Version: 0.2.2.458
|
|
4
4
|
Summary: abstract_utilities is a collection of utility modules providing a variety of functions to aid in tasks such as data comparison, list manipulation, JSON handling, string manipulation, mathematical computations, and time operations.
|
|
5
5
|
Home-page: https://github.com/AbstractEndeavors/abstract_utilities
|
|
6
6
|
Author: putkoff
|
|
@@ -59,6 +59,7 @@ src/abstract_utilities/file_utils/file_utils/find_collect.py
|
|
|
59
59
|
src/abstract_utilities/file_utils/file_utils/imports.py
|
|
60
60
|
src/abstract_utilities/file_utils/file_utils/map_utils.py
|
|
61
61
|
src/abstract_utilities/file_utils/file_utils/pdf_utils.py
|
|
62
|
+
src/abstract_utilities/file_utils/file_utils/type_checks.py
|
|
62
63
|
src/abstract_utilities/file_utils/imports/__init__.py
|
|
63
64
|
src/abstract_utilities/file_utils/imports/classes.py
|
|
64
65
|
src/abstract_utilities/file_utils/imports/constants.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/class_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/doit.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/dynimport.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/error_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/global_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/hash_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/json_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/list_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/log_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/math_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/parse_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/path_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/safe_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/string_clean.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/string_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/tetsts.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/thread_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/time_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/type_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.456 → abstract_utilities-0.2.2.458}/src/abstract_utilities/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|