abstract-utilities 0.2.2.413__py3-none-any.whl → 0.2.2.415__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 abstract-utilities might be problematic. Click here for more details.

Files changed (38) hide show
  1. abstract_utilities/__init__.py +12 -9
  2. abstract_utilities/cmd_utils/imports/__init__.py +1 -0
  3. abstract_utilities/cmd_utils/imports/imports.py +10 -0
  4. abstract_utilities/cmd_utils/pexpect_utils.py +310 -0
  5. abstract_utilities/cmd_utils/user_utils.py +1 -1
  6. abstract_utilities/env_utils/__init__.py +3 -0
  7. abstract_utilities/env_utils/abstractEnv.py +129 -0
  8. abstract_utilities/env_utils/envy_it.py +33 -0
  9. abstract_utilities/env_utils/imports/__init__.py +2 -0
  10. abstract_utilities/env_utils/imports/imports.py +8 -0
  11. abstract_utilities/env_utils/imports/utils.py +122 -0
  12. abstract_utilities/{path_utils → file_utils}/__init__.py +0 -3
  13. abstract_utilities/file_utils/file_utils/__init__.py +4 -0
  14. abstract_utilities/file_utils/file_utils/file_filters.py +104 -0
  15. abstract_utilities/file_utils/file_utils/file_utils.py +194 -0
  16. abstract_utilities/file_utils/file_utils/imports.py +1 -0
  17. abstract_utilities/{path_utils → file_utils}/imports/__init__.py +1 -0
  18. abstract_utilities/file_utils/imports/classes.py +125 -0
  19. abstract_utilities/file_utils/imports/imports.py +11 -0
  20. abstract_utilities/{path_utils → file_utils}/imports/module_imports.py +3 -1
  21. abstract_utilities/{path_utils → file_utils}/req.py +2 -5
  22. abstract_utilities/{path_utils/path_utils.py → path_utils.py} +5 -1
  23. abstract_utilities/robust_readers/__init__.py +1 -0
  24. abstract_utilities/robust_readers/imports.py +1 -1
  25. abstract_utilities/ssh_utils/__init__.py +3 -0
  26. abstract_utilities/ssh_utils/classes.py +127 -0
  27. abstract_utilities/ssh_utils/imports.py +11 -0
  28. abstract_utilities/ssh_utils/pexpect_utils.py +315 -0
  29. abstract_utilities/ssh_utils/utils.py +122 -0
  30. {abstract_utilities-0.2.2.413.dist-info → abstract_utilities-0.2.2.415.dist-info}/METADATA +1 -1
  31. {abstract_utilities-0.2.2.413.dist-info → abstract_utilities-0.2.2.415.dist-info}/RECORD +36 -18
  32. abstract_utilities/path_utils/file_filters.py +0 -213
  33. abstract_utilities/path_utils/imports/imports.py +0 -6
  34. /abstract_utilities/{path_utils → file_utils/file_utils}/filter_params.py +0 -0
  35. /abstract_utilities/{path_utils/file_utils.py → file_utils/file_utils/map_utils.py} +0 -0
  36. /abstract_utilities/{path_utils → file_utils}/imports/constants.py +0 -0
  37. {abstract_utilities-0.2.2.413.dist-info → abstract_utilities-0.2.2.415.dist-info}/WHEEL +0 -0
  38. {abstract_utilities-0.2.2.413.dist-info → abstract_utilities-0.2.2.415.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,315 @@
1
+ from .classes import *
2
+ from .utils import *
3
+ from ..env_utils import *
4
+ # pexpect is optional; import lazily if you prefer
5
+
6
+ # keep your execute_cmd; add a thin wrapper that supports stdin text cleanly
7
+ def execute_cmd_input(
8
+ *args,
9
+ input_text: str | None = None,
10
+ outfile: str | None = None,
11
+ **kwargs
12
+ ) -> str:
13
+ """
14
+ Like execute_cmd, but lets you pass text to stdin (subprocess.run(input=...)).
15
+ """
16
+ if input_text is not None:
17
+ kwargs["input"] = input_text
18
+ # ensure text mode so Python passes str not bytes
19
+ kwargs.setdefault("text", True)
20
+ return execute_cmd(*args, outfile=outfile, **kwargs)
21
+
22
+ # -------------------------
23
+ # Core: capture + printing
24
+ # -------------------------
25
+ def exec_sudo_capture(
26
+ cmd: str,
27
+ *,
28
+ password: str | None = None,
29
+ key: str | None = None,
30
+ user_at_host: str | None = None,
31
+ cwd: str | None = None,
32
+ print_output: bool = False,
33
+ ) -> str:
34
+ """
35
+ Run a sudo command and return its output (no temp file).
36
+ """
37
+ if password is None:
38
+ password = get_env_value(key=key) if key else get_sudo_password()
39
+ password = f"{password}\n" if password else password
40
+ sudo_cmd = f"sudo -S -k {cmd}"
41
+
42
+ if user_at_host:
43
+ # build the remote command (bash -lc + optional cd)
44
+ remote = get_remote_cmd(cmd=sudo_cmd, user_at_host=user_at_host, cwd=cwd)
45
+ # feed password to remote's stdin (ssh forwards stdin)
46
+ out = execute_cmd_input(remote, input_text=password,
47
+ shell=True, text=True, capture_output=True)
48
+ else:
49
+ out = execute_cmd_input(sudo_cmd, input_text=password,
50
+ shell=True, text=True, capture_output=True, cwd=cwd)
51
+
52
+ if print_output:
53
+ print_cmd(cmd, out or "")
54
+ return out or ""
55
+
56
+
57
+
58
+ # ---------------------------------------------------
59
+ # SUDO helpers (local + SSH) with env/password options
60
+ # ---------------------------------------------------
61
+ def exec_sudo(
62
+ cmd: str,
63
+ *,
64
+ password: Optional[str] = None,
65
+ key: Optional[str] = None,
66
+ user_at_host: Optional[str] = None,
67
+ cwd: Optional[str] = None,
68
+ outfile: Optional[str] = None,
69
+ print_output: bool = False,
70
+ ) -> str:
71
+ """
72
+ Execute `cmd` via sudo either locally or on remote.
73
+ Password order of precedence:
74
+ 1) `password` arg
75
+ 2) `key` -> get_env_value(key)
76
+ 3) get_sudo_password()
77
+
78
+ Uses: sudo -S -k (-S read password from stdin, -k invalidate cached timestamp)
79
+ """
80
+ if password is None:
81
+ if key:
82
+ password = get_env_value(key=key)
83
+ else:
84
+ password = get_sudo_password()
85
+
86
+ # Compose the sudo command that reads from stdin
87
+ sudo_cmd = f"sudo -S -k {cmd}"
88
+
89
+ if user_at_host:
90
+ # For remote: the password is piped to SSH stdin, which flows to remote sudo's stdin.
91
+ remote = get_remote_cmd(cmd=sudo_cmd, user_at_host=user_at_host, cwd=cwd)
92
+ full = f"printf %s {shlex.quote(password)} | {remote}"
93
+ out = execute_cmd(full, shell=True, text=True, capture_output=True, outfile=outfile)
94
+ else:
95
+ # Local
96
+ full = f"printf %s {shlex.quote(password)} | {sudo_cmd}"
97
+ out = execute_cmd(full, shell=True, text=True, capture_output=True, outfile=outfile)
98
+
99
+ if print_output:
100
+ print_cmd(cmd, out or "")
101
+ return out or ""
102
+
103
+
104
+ # -------------------------------------------------
105
+ # Fire-and-forget (file-backed) compatible runner
106
+ # -------------------------------------------------
107
+ def cmd_run(
108
+ cmd: str,
109
+ output_text: str | None = None,
110
+ print_output: bool = False,
111
+ *,
112
+ user_at_host: str | None = None,
113
+ cwd: str | None = None,
114
+ ) -> str | None:
115
+ """
116
+ If output_text is None → capture+return output (no file).
117
+ If output_text is provided → legacy file-backed behavior.
118
+ """
119
+ if output_text is None:
120
+ # capture mode
121
+ if user_at_host:
122
+ remote = get_remote_cmd(cmd=cmd, user_at_host=user_at_host, cwd=cwd)
123
+ out = execute_cmd(remote, shell=True, text=True, capture_output=True)
124
+ else:
125
+ out = execute_cmd(cmd, shell=True, text=True, capture_output=True, cwd=cwd)
126
+ ## if print_output:
127
+ ## print_cmd(cmd, out or "")
128
+ return out or ""
129
+
130
+ # ---- legacy file-backed path (unchanged in spirit) ----
131
+ # Clear output file
132
+ with open(output_text, 'w'):
133
+ pass
134
+
135
+ # Append redirection + sentinel
136
+ full_cmd = f'{cmd} >> {output_text}; echo END_OF_CMD >> {output_text}'
137
+
138
+ # Execute local/remote
139
+ if user_at_host:
140
+ remote_line = get_remote_cmd(cmd=full_cmd, user_at_host=user_at_host, cwd=cwd)
141
+ subprocess.call(remote_line, shell=True)
142
+ else:
143
+ subprocess.call(full_cmd, shell=True, cwd=cwd)
144
+
145
+ # Wait for sentinel
146
+ while True:
147
+ get_sleep(sleep_timer=0.5)
148
+ with open(output_text, 'r') as f:
149
+ lines = f.readlines()
150
+ if lines and lines[-1].strip() == 'END_OF_CMD':
151
+ break
152
+
153
+ ## if print_output:
154
+ ## print(full_cmd)
155
+ ## with open(output_text, 'r') as f:
156
+ ## print_cmd(full_cmd, f.read().strip())
157
+
158
+ try:
159
+ os.remove(output_text)
160
+ except OSError:
161
+ pass
162
+
163
+ return None
164
+
165
+
166
+ # ----------------------------------------------------
167
+ # pexpect wrappers (local + SSH) for interactive flows
168
+ # ----------------------------------------------------
169
+ def exec_expect(
170
+ command: str,
171
+ child_runs: List[Dict[str, Any]],
172
+ *,
173
+ user_at_host: Optional[str] = None,
174
+ cwd: Optional[str] = None,
175
+ print_output: bool = False,
176
+ ) -> int:
177
+ """
178
+ Run `command` and answer interactive prompts.
179
+
180
+ child_runs: list of dicts like:
181
+ { "prompt": r"Password:", "pass": "xyz" }
182
+ { "prompt": r"Enter passphrase:", "key": "MY_KEY", "env_path": "/path/for/.env" }
183
+ If "pass" is None, we resolve via get_env_value(key=..., start_path=env_path).
184
+
185
+ Returns exitstatus (0=success).
186
+ """
187
+ if user_at_host:
188
+ # Wrap command for remote execution
189
+ remote_line = get_remote_cmd(cmd=command, user_at_host=user_at_host, cwd=cwd)
190
+ spawn_cmd = f"{remote_line}"
191
+ else:
192
+ spawn_cmd = f"bash -lc {shlex.quote((f'cd {shlex.quote(cwd)} && {command}') if cwd else command)}"
193
+
194
+ child = pexpect.spawn(spawn_cmd)
195
+
196
+ for each in child_runs:
197
+ child.expect(each["prompt"])
198
+
199
+ if each.get("pass") is not None:
200
+ pass_phrase = each["pass"]
201
+ else:
202
+ args = {}
203
+ if "key" in each and each["key"] is not None:
204
+ args["key"] = each["key"]
205
+ if "env_path" in each and each["env_path"] is not None:
206
+ args["start_path"] = each["env_path"]
207
+ pass_phrase = get_env_value(**args)
208
+
209
+ child.sendline(pass_phrase)
210
+ if print_output:
211
+ print("Answered prompt:", each["prompt"])
212
+
213
+ child.expect(pexpect.EOF)
214
+ out = child.before.decode("utf-8", errors="ignore")
215
+ ## if print_output:
216
+ ## print_cmd(command, out)
217
+
218
+ return child.exitstatus if child.exitstatus is not None else 0
219
+
220
+
221
+ # ---------------------------------------
222
+ # Convenience shims to mirror your names
223
+ # ---------------------------------------
224
+ def cmd_run_sudo(
225
+ cmd: str,
226
+ password: str | None = None,
227
+ key: str | None = None,
228
+ output_text: str | None = None,
229
+ *,
230
+ user_at_host: str | None = None,
231
+ cwd: str | None = None,
232
+ print_output: bool = False,
233
+ ) -> str | None:
234
+ """
235
+ If output_text is None → capture sudo output and return it.
236
+ If output_text is provided → legacy file-backed behavior feeding sudo via stdin.
237
+ """
238
+ if output_text is None:
239
+ return exec_sudo_capture(
240
+ cmd,
241
+ password=password,
242
+ key=key,
243
+ user_at_host=user_at_host,
244
+ cwd=cwd,
245
+ print_output=print_output,
246
+ )
247
+
248
+ # ---- legacy file-backed path ----
249
+ # build the underlying sudo command
250
+ sudo_cmd = f"sudo -S -k {cmd}"
251
+ pw = password if password is not None else (get_env_value(key=key) if key else get_sudo_password())
252
+
253
+ # We need to feed password to stdin in the same shell that runs sudo.
254
+ # For file-backed mode we’ll inline a small shell that reads from a here-string.
255
+ # Local:
256
+ if not user_at_host:
257
+ full = f'bash -lc {shlex.quote((f"cd {shlex.quote(cwd)} && " if cwd else "") + f"printf %s {shlex.quote(pw)} | {sudo_cmd}")}'
258
+ return cmd_run(full, output_text=output_text, print_output=print_output)
259
+ # Remote:
260
+ # On remote, do the same in the remote bash -lc
261
+ remote_sudo_line = f'printf %s {shlex.quote(pw)} | {sudo_cmd}'
262
+ remote_full = get_remote_cmd(cmd=remote_sudo_line, user_at_host=user_at_host, cwd=cwd)
263
+ return cmd_run(remote_full, output_text=output_text, print_output=print_output)
264
+
265
+ def pexpect_cmd_with_args(
266
+ command: str,
267
+ child_runs: list,
268
+ output_text: str | None = None,
269
+ *,
270
+ user_at_host: str | None = None,
271
+ cwd: str | None = None,
272
+ print_output: bool = False
273
+ ) -> int:
274
+ """
275
+ If output_text is None → return output string via print_output, else write to file then remove (legacy).
276
+ """
277
+ if user_at_host:
278
+ spawn_cmd = get_remote_cmd(cmd=command, user_at_host=user_at_host, cwd=cwd)
279
+ else:
280
+ spawn_cmd = f"bash -lc {shlex.quote((f'cd {shlex.quote(cwd)} && {command}') if cwd else command)}"
281
+
282
+ child = pexpect.spawn(spawn_cmd)
283
+
284
+ for each in child_runs:
285
+ child.expect(each["prompt"])
286
+ if each.get("pass") is not None:
287
+ pass_phrase = each["pass"]
288
+ else:
289
+ args = {}
290
+ if "key" in each and each["key"] is not None:
291
+ args["key"] = each["key"]
292
+ if "env_path" in each and each["env_path"] is not None:
293
+ args["start_path"] = each["env_path"]
294
+ pass_phrase = get_env_value(**args)
295
+ child.sendline(pass_phrase)
296
+ if print_output:
297
+ print("Answered prompt:", each["prompt"])
298
+
299
+ child.expect(pexpect.EOF)
300
+ out = child.before.decode("utf-8", errors="ignore")
301
+
302
+ if output_text:
303
+ with open(output_text, "w") as f:
304
+ f.write(out)
305
+ if print_output:
306
+ print_cmd(command, out)
307
+ # keep legacy? your old code removed the file; here we’ll keep it (safer).
308
+ # If you want the old behavior, uncomment:
309
+ # os.remove(output_text)
310
+ else:
311
+ if print_output:
312
+ print_cmd(command, out)
313
+
314
+ return child.exitstatus if child.exitstatus is not None else 0
315
+
@@ -0,0 +1,122 @@
1
+ from .imports import *
2
+ def get_remote_bash(
3
+ cmd: str,
4
+ cwd: str | None = None
5
+ ):
6
+ return f"bash -lc {shlex.quote((f'cd {shlex.quote(cwd)} && {cmd}') if cwd else cmd)}"
7
+ def get_remote_ssh(
8
+ user_at_host: str=None,
9
+ remote:str=None
10
+ ):
11
+ return f"ssh {shlex.quote(user_at_host)} {shlex.quote(remote)}"
12
+
13
+ def get_remote_cmd(
14
+ cmd: str,
15
+ user_at_host: str,
16
+ cwd: str | None = None,
17
+
18
+ ):
19
+ remote = get_remote_bash(
20
+ cmd=cmd,
21
+ cwd=cwd
22
+ )
23
+ full = get_remote_ssh(
24
+ user_at_host=user_at_host,
25
+ remote=remote
26
+ )
27
+ return full
28
+ def execute_cmd(
29
+ *args,
30
+ outfile=None,
31
+ **kwargs
32
+ ) -> str:
33
+ proc = subprocess.run(*args, **kwargs)
34
+ output = (proc.stdout or "") + (proc.stderr or "")
35
+ if outfile:
36
+ try:
37
+ with open(outfile, "w", encoding="utf-8", errors="ignore") as f:
38
+ f.write(output)
39
+ except Exception:
40
+ pass
41
+ return output
42
+
43
+ def run_local_cmd(
44
+ cmd: str,
45
+ cwd: str | None = None,
46
+ outfile: Optional[str] = None,
47
+ shell=True,
48
+ text=True,
49
+ capture_output=True
50
+ ) -> str:
51
+ return execute_cmd(
52
+ cmd,
53
+ outfile=outfile,
54
+ shell=shell,
55
+ cwd=cwd,
56
+ text=text,
57
+ capture_output=capture_output
58
+ )
59
+
60
+ def run_remote_cmd(
61
+ user_at_host: str,
62
+ cmd: str,
63
+ cwd: str | None = None,
64
+ outfile: Optional[str] = None,
65
+ shell=True,
66
+ text=True,
67
+ capture_output=True
68
+ ) -> str:
69
+ """
70
+ Run on remote via SSH; capture stdout+stderr locally; write to local outfile.
71
+ NOTE: we do *not* try to write the file on the remote to avoid later scp.
72
+ """
73
+ # wrap in bash -lc for PATH/profile + allow 'cd && ...'
74
+ cmd = get_remote_cmd(
75
+ cmd=cmd,
76
+ user_at_host=user_at_host,
77
+ cwd=cwd
78
+ )
79
+ return execute_cmd(
80
+ cmd,
81
+ outfile=outfile,
82
+ shell=shell,
83
+ text=text,
84
+ capture_output=capture_output
85
+ )
86
+ def run_cmd(
87
+ cmd: str=None,
88
+ cwd: str | None = None,
89
+ outfile: Optional[str] = None,
90
+ shell=True,
91
+ text=True,
92
+ capture_output=True,
93
+ user_at_host: str=None
94
+ ) -> str:
95
+ if user_at_host:
96
+ return run_ssh_cmd(
97
+ user_at_host=user_at_host,
98
+ cmd=cmd,
99
+ cwd=cwd,
100
+ outfile=outfile,
101
+ shell=shell,
102
+ text=text,
103
+ capture_output=capture_output
104
+ )
105
+ return run_local_cmd(
106
+ cmd=cmd,
107
+ cwd=cwd,
108
+ outfile=outfile,
109
+ shell=shell,
110
+ text=text,
111
+ capture_output=capture_output
112
+ )
113
+ run_ssh_cmd = run_remote_cmd
114
+ remote_cmd = run_remote_cmd
115
+ ssh_cmd = run_remote_cmd
116
+
117
+ local_cmd = run_local_cmd
118
+
119
+
120
+ run_any_cmd = run_cmd
121
+ any_cmd = run_cmd
122
+ cmd_run = run_cmd
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstract_utilities
3
- Version: 0.2.2.413
3
+ Version: 0.2.2.415
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
@@ -1,4 +1,4 @@
1
- abstract_utilities/__init__.py,sha256=nVQ_3HwOQopqPEq6JNnxvlkNsbfOuQakue1tmXO1I2M,6619
1
+ abstract_utilities/__init__.py,sha256=sdSohSe4mvqnprCt3-EX46MiT63jD6Bi_jamt2WuJPY,6558
2
2
  abstract_utilities/abstract_classes.py,sha256=A6-FNDQb2P_jcyt01Kc5SuY2QawLVKNjQ-rDGfsn4rA,2461
3
3
  abstract_utilities/class_utils.py,sha256=-YHkdbaChRIz9YLXJlFF4m7VkdwUCts_HOUbKXxkrYA,12735
4
4
  abstract_utilities/collator_utils.py,sha256=9exNoZAr9rABGYTwZOn7hdLbpnMtRd2AgfU7yjZrXGw,2348
@@ -13,6 +13,7 @@ abstract_utilities/list_utils.py,sha256=i1fZ_kZ0mf_ei6w0MOkuEieRiyF-ReeAXzIdoRI1
13
13
  abstract_utilities/log_utils.py,sha256=Crt1qlACE2z1R9s0d11pRhlizh7ryryp4gCl3hQOrV0,9383
14
14
  abstract_utilities/math_utils.py,sha256=0o1ls1En03UAkYmxTBildCCJDfHygmNuvVnrNrLYtK0,6578
15
15
  abstract_utilities/parse_utils.py,sha256=Z5OGRwHuzCzY91fz0JJojk1BPAo1XF2quNNLuBF4_Vk,18602
16
+ abstract_utilities/path_utils.py,sha256=chEUkTQa-W4FNX7DGkWj_IQFY9x6PiqyVEYWxhfPh5U,18140
16
17
  abstract_utilities/read_write_utils.py,sha256=mmRmQaKFVXM5w4YKS_VsQpbQE7-LcyIRg0eyOrykWIY,7308
17
18
  abstract_utilities/string_clean.py,sha256=-gY9i2yqjX5UClvSaKsSrzA4GjR7eaNI3GnFjZpt2bo,5923
18
19
  abstract_utilities/tetsts.py,sha256=PrejTUew5dAAqNb4erMJwfdSHxDyuuHGWY2fMlWk5hk,21
@@ -22,29 +23,41 @@ abstract_utilities/type_utils.py,sha256=1gpwfG5ze8dTUi7IXnMc65vHrw8XgI0F8m6x4esZ
22
23
  abstract_utilities/utils.py,sha256=SCa_-x_wsWrcokQXKwlhalxndxLn5Wg25-zqRdJUmag,185049
23
24
  abstract_utilities/cmd_utils/__init__.py,sha256=StTaaB9uzJexvr4TFGVqp_o0_s9T6rQlE3fOZtb_y_0,51
24
25
  abstract_utilities/cmd_utils/cmd_utils.py,sha256=n2DEo91J8LWuIJoSoDkWdApUY_8mHrUW3kjEjjF34Io,7876
25
- abstract_utilities/cmd_utils/user_utils.py,sha256=d_ZPerAWPovKry0gsQBeCAQW9T7QvKZ2bcJnGa8ysGw,1864
26
+ abstract_utilities/cmd_utils/pexpect_utils.py,sha256=u33BkeyQAiGlP81569a-iH95znRBmURM_cbN-nLlFAQ,10357
27
+ abstract_utilities/cmd_utils/user_utils.py,sha256=e1s-VPucZ_Ldg2LsXH-W3OQdh_X5vV8gU_-ARF2khsM,1829
28
+ abstract_utilities/cmd_utils/imports/__init__.py,sha256=mp6T1rBZdOzj0IDkvlteTqtyKJiOZaJTlgrjTdHO1Qw,23
29
+ abstract_utilities/cmd_utils/imports/imports.py,sha256=TmvKQJb02_bZBo4ANNtCADl42LSWaYaU-6nml51Tt9o,362
26
30
  abstract_utilities/compare_utils/__init__.py,sha256=ay_tktzoXtj85IdVCGR6Pc6fLX_DR4Mg_Y_-sS5qcmY,120
27
31
  abstract_utilities/compare_utils/best_match.py,sha256=XVf0cypM8u4Tp595k7r9jxeOkAXWjXrcGwcNFLEseMk,5160
28
32
  abstract_utilities/compare_utils/compare_utils.py,sha256=1Bu8pQEOwLIzDpEmqfeBO7BDxMdcXuG2sVHqdd1IeK8,14034
29
33
  abstract_utilities/compare_utils/find_value.py,sha256=_Jss3AvmwQMDLVlkgDPcp6tAXD4KnUbXjCR370sb1Xo,3349
30
- abstract_utilities/path_utils/__init__.py,sha256=G6yBwrhU6O3_HWTB_9pw_hEABzR4zeAQzXsa87Ptebg,167
31
- abstract_utilities/path_utils/file_filters.py,sha256=2aVuD0sB-P2gmo_kUsE11aHc6WzLvHUAerMkmy3y9vk,7751
32
- abstract_utilities/path_utils/file_utils.py,sha256=B_MlkLP8s-o0yU0R3Y2LcTpBntBzysJO18qq181xz9c,1043
33
- abstract_utilities/path_utils/filter_params.py,sha256=NF692W0cBhEsbtmaVzb8EKMAasasHDElSRaC9fnzYwE,3382
34
- abstract_utilities/path_utils/path_utils.py,sha256=ZdtTuQSwl5U1YejZn0Xz53faGwGUkCVPNfay5HAbMOU,17962
35
- abstract_utilities/path_utils/req.py,sha256=FIUA0YCCJ2sZJlBS3c4LDFIXNzPhytjBk62WKiU2aug,12179
36
- abstract_utilities/path_utils/imports/__init__.py,sha256=bbi0iMyhXW50cAdzDWCHj8L8-iY40tWjd669vG50TTw,78
37
- abstract_utilities/path_utils/imports/constants.py,sha256=VxTiOpJg7k9FpPgJRnFOJ2rQU8KPPd-pcphsBQDnO1o,1445
38
- abstract_utilities/path_utils/imports/imports.py,sha256=Ee0B4UIwUR6hxZQhiSyH2X4Kglei1FgDdi0WLXv8ooI,233
39
- abstract_utilities/path_utils/imports/module_imports.py,sha256=XLULIVBimJyA0uL4X2H-JabMil9cZKazFkTeMPJxQ24,209
34
+ abstract_utilities/env_utils/__init__.py,sha256=VIihpuDHrrI0CBj3kGN0ZcgxaGgoqBe4Be7q2Ks8IEw,73
35
+ abstract_utilities/env_utils/abstractEnv.py,sha256=01W7jkvZMmvdrcYIrZFd1-WFdcOULKc-SNAPF6FdyLM,6027
36
+ abstract_utilities/env_utils/envy_it.py,sha256=lGkTB3AOY1KTRfQgtJji_yjSVVt0FV9YTETZD7vhnM4,1353
37
+ abstract_utilities/env_utils/imports/__init__.py,sha256=LVIEQXKiAmaKKWxPxfSJKe7JGWi4RDt4eatm_VG-WUI,44
38
+ abstract_utilities/env_utils/imports/imports.py,sha256=ZrGEf-J2lyVbb4MrNBX3DwHR0o-frba52RbPkypNvao,355
39
+ abstract_utilities/env_utils/imports/utils.py,sha256=oB7WhIm_-cHLrUHRXypZGCdWUtNRyePaVO5_kq5Cv84,4490
40
+ abstract_utilities/file_utils/__init__.py,sha256=BoDOPNR7HUHCakF9-RDjY0PK8UfvZJHcHcyPYh48g_k,84
41
+ abstract_utilities/file_utils/req.py,sha256=DicCS80V4L8GPWr7lBKDR_gTC1WI9o8lMC2IYLyDUBk,12105
42
+ abstract_utilities/file_utils/file_utils/__init__.py,sha256=eSx06LVBmD1WLWXN8lvSDH03FT4bR7KPOC3c7J9VLXA,108
43
+ abstract_utilities/file_utils/file_utils/file_filters.py,sha256=khfbonAPEAhW1wxfFo0I4dawYPCrIKEjNc7VKb1RvzA,3437
44
+ abstract_utilities/file_utils/file_utils/file_utils.py,sha256=vRXUKIuJvLEOKWPUrceLAwTfozh6bBPZdEDI7xRS4zY,7226
45
+ abstract_utilities/file_utils/file_utils/filter_params.py,sha256=NF692W0cBhEsbtmaVzb8EKMAasasHDElSRaC9fnzYwE,3382
46
+ abstract_utilities/file_utils/file_utils/imports.py,sha256=SXCMBuHUwqXbfRBk4LjKehsBKZa8-Po5UfEcNTwn4Es,24
47
+ abstract_utilities/file_utils/file_utils/map_utils.py,sha256=B_MlkLP8s-o0yU0R3Y2LcTpBntBzysJO18qq181xz9c,1043
48
+ abstract_utilities/file_utils/imports/__init__.py,sha256=0nezbIo1RqmfZ7pZ0V3kxZDNchNWH8wVATnnvNeILMo,101
49
+ abstract_utilities/file_utils/imports/classes.py,sha256=nE860spCea0rV2JjR1xQ7aewNQUd-q9AQTeRkjfup94,4675
50
+ abstract_utilities/file_utils/imports/constants.py,sha256=VxTiOpJg7k9FpPgJRnFOJ2rQU8KPPd-pcphsBQDnO1o,1445
51
+ abstract_utilities/file_utils/imports/imports.py,sha256=jEdn5Crc_LkpgJH7XH4PQSKyG-2tcifQMZi4aZVytyI,455
52
+ abstract_utilities/file_utils/imports/module_imports.py,sha256=FlukD7cOA9O6mGbPubMvuGq0elh6ltC5BLFvPrYzqLo,326
40
53
  abstract_utilities/robust_reader/__init__.py,sha256=7JVGEqZ2VFyFF06cqQ8TFz8EyreOB7Jhisnd69rxL-8,28
41
54
  abstract_utilities/robust_reader/file_reader.py,sha256=6RuLTdLNVERKWOUyjheqYZZCcUkMOt1j-2u7U3EN0Rg,25097
42
55
  abstract_utilities/robust_reader/file_reader2.py,sha256=U-5opkLu-bct091Eb-5CiNBTf0UFoSITYi8zR-Sz38w,25077
43
56
  abstract_utilities/robust_reader/file_readers.py,sha256=U-5opkLu-bct091Eb-5CiNBTf0UFoSITYi8zR-Sz38w,25077
44
57
  abstract_utilities/robust_reader/pdf_utils.py,sha256=sNEJRBi4ypbA3hXQPFoFnPHVSPstbdBAwCoeyNa18YE,10763
45
58
  abstract_utilities/robust_reader/sadfsad.py,sha256=gH2ebI9KfiYFv78jzPGk8WPST_FGtojnd_yDwrcvQoM,25282
46
- abstract_utilities/robust_readers/__init__.py,sha256=rvHd723OkSyxJe0w2qKQHmdn6X_5AL5O9r_jm-vAkHY,27
47
- abstract_utilities/robust_readers/imports.py,sha256=3bjM7i074pz4ho1OaBixnT9zQji1gGfQ78qBSnIu8kY,355
59
+ abstract_utilities/robust_readers/__init__.py,sha256=_1vhOG1FJnfrRK0ubkT1v6U6udHMIk3qiy1qajL1IiM,55
60
+ abstract_utilities/robust_readers/imports.py,sha256=FtNxdPoLeeNycDnl-6rBGxBfYjhQ7VhmI5guj8XKFcU,355
48
61
  abstract_utilities/robust_readers/initFuncGen.py,sha256=D3_JEJgSiMFPNAMVMcml6hceydTCYnvu_rG_z6n_Nd8,5217
49
62
  abstract_utilities/robust_readers/import_utils/__init__.py,sha256=hKYj8irPXAN-gIm0frFd0_8fnUNQraWEVugRUrSjcLw,166
50
63
  abstract_utilities/robust_readers/import_utils/dot_utils.py,sha256=pmwnY461mOnDjIjgHD6H9MhQXFaF-q8kWerJDgJ1DuI,2364
@@ -54,7 +67,12 @@ abstract_utilities/robust_readers/import_utils/impot_functions.py,sha256=1_pzkfg
54
67
  abstract_utilities/robust_readers/import_utils/safe_import_utils.py,sha256=L-pwmWkV6eOkYNKA9c4QLTJ5v0DoWQu_v5HukCOo95w,2414
55
68
  abstract_utilities/robust_readers/import_utils/sysroot_utils.py,sha256=f8hj20VA9yvvYkqQ9ecuBlzmTOaT5G7ni14QesDtdL0,2098
56
69
  abstract_utilities/robust_readers/import_utils/utils.py,sha256=xyMObkdyvQAzAIv_kagLhFdkwSaPd4h0bCjTCYyfGhY,722
57
- abstract_utilities-0.2.2.413.dist-info/METADATA,sha256=Ow5bslO_VYlvDflVU2GdJDgJvZi-DW6PI-d_K1zNuoM,28108
58
- abstract_utilities-0.2.2.413.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
59
- abstract_utilities-0.2.2.413.dist-info/top_level.txt,sha256=BF0GZ0xVFfN1K-hFIWPO3viNsOs1sSF86n1vHBg39FM,19
60
- abstract_utilities-0.2.2.413.dist-info/RECORD,,
70
+ abstract_utilities/ssh_utils/__init__.py,sha256=-DxUpOmfMi5zdG3lu93uT9MziZ-I_anwWOg1XduBH6o,73
71
+ abstract_utilities/ssh_utils/classes.py,sha256=3Q9BfLpyagNFYyiF4bt-5UCezeUJv9NK9YAFdTsLCV0,4802
72
+ abstract_utilities/ssh_utils/imports.py,sha256=7-pVJK1RfR0KiZsv0mNYGPuNXA4iYqmDvqbAR9h1llU,371
73
+ abstract_utilities/ssh_utils/pexpect_utils.py,sha256=HTwGFiZ0xrBe1iFDYWvLkAvXHzr4KYDexWG5GboVe-8,10527
74
+ abstract_utilities/ssh_utils/utils.py,sha256=Sy-plzJ9SgnYCL_wGoPZz_aE1hbbDNEMINwNMePY_v4,3069
75
+ abstract_utilities-0.2.2.415.dist-info/METADATA,sha256=WI6pQ0lNASDjQf3XKjWxyvK75B_PpjjRac4kahtmv8g,28108
76
+ abstract_utilities-0.2.2.415.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
77
+ abstract_utilities-0.2.2.415.dist-info/top_level.txt,sha256=BF0GZ0xVFfN1K-hFIWPO3viNsOs1sSF86n1vHBg39FM,19
78
+ abstract_utilities-0.2.2.415.dist-info/RECORD,,