abstract-utilities 0.2.2.486__py3-none-any.whl → 0.2.2.540__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.
- abstract_utilities/__init__.py +6 -10
- abstract_utilities/circular_import_finder.py +222 -0
- abstract_utilities/circular_import_finder2.py +118 -0
- abstract_utilities/class_utils/__init__.py +7 -0
- abstract_utilities/class_utils/abstract_classes.py +74 -0
- abstract_utilities/class_utils/caller_utils.py +35 -0
- abstract_utilities/class_utils/class_utils.py +109 -0
- abstract_utilities/class_utils/function_utils.py +153 -0
- abstract_utilities/class_utils/global_utils.py +56 -0
- abstract_utilities/class_utils/imports/__init__.py +2 -0
- abstract_utilities/class_utils/imports/imports.py +2 -0
- abstract_utilities/class_utils/imports/utils.py +40 -0
- abstract_utilities/class_utils/module_utils.py +63 -0
- abstract_utilities/directory_utils/__init__.py +2 -0
- abstract_utilities/directory_utils/directory_utils.py +94 -0
- abstract_utilities/directory_utils/imports/__init__.py +2 -0
- abstract_utilities/directory_utils/imports/imports.py +1 -0
- abstract_utilities/directory_utils/imports/module_imports.py +2 -0
- abstract_utilities/directory_utils/name_utils.py +43 -0
- abstract_utilities/directory_utils/size_utils.py +57 -0
- abstract_utilities/directory_utils/src/__init__.py +4 -0
- abstract_utilities/directory_utils/src/directory_utils.py +92 -0
- abstract_utilities/directory_utils/src/name_utils.py +43 -0
- abstract_utilities/directory_utils/src/size_utils.py +57 -0
- abstract_utilities/directory_utils/src/utils.py +116 -0
- abstract_utilities/directory_utils/utils.py +116 -0
- abstract_utilities/env_utils/imports/imports.py +5 -3
- abstract_utilities/error_utils/__init__.py +2 -0
- abstract_utilities/error_utils/error_utils.py +25 -0
- abstract_utilities/error_utils/imports/__init__.py +2 -0
- abstract_utilities/error_utils/imports/imports.py +1 -0
- abstract_utilities/error_utils/imports/module_imports.py +1 -0
- abstract_utilities/file_utils/__init__.py +1 -2
- abstract_utilities/file_utils/file_utils/type_checks.py +2 -1
- abstract_utilities/file_utils/imports/constants.py +84 -4
- abstract_utilities/file_utils/imports/imports.py +3 -18
- abstract_utilities/file_utils/imports/module_imports.py +2 -7
- abstract_utilities/file_utils/module_imports.py +12 -0
- abstract_utilities/file_utils/src/__init__.py +8 -0
- abstract_utilities/file_utils/src/file_filters.py +177 -0
- abstract_utilities/file_utils/src/file_reader.py +544 -0
- abstract_utilities/file_utils/src/file_utils.py +156 -0
- abstract_utilities/file_utils/src/filter_params.py +197 -0
- abstract_utilities/file_utils/src/find_collect.py +266 -0
- abstract_utilities/file_utils/src/initFunctionsGen.py +280 -0
- abstract_utilities/file_utils/src/map_utils.py +29 -0
- abstract_utilities/file_utils/src/pdf_utils.py +300 -0
- abstract_utilities/file_utils/src/type_checks.py +91 -0
- abstract_utilities/file_utils (2)/__init__.py +2 -0
- abstract_utilities/file_utils (2)/imports/__init__.py +2 -0
- abstract_utilities/file_utils (2)/imports/constants.py +118 -0
- abstract_utilities/file_utils (2)/imports/imports/__init__.py +3 -0
- abstract_utilities/file_utils (2)/imports/imports/constants.py +119 -0
- abstract_utilities/file_utils (2)/imports/imports/imports.py +46 -0
- abstract_utilities/file_utils (2)/imports/imports/module_imports.py +8 -0
- abstract_utilities/file_utils (2)/imports/utils/__init__.py +3 -0
- abstract_utilities/file_utils (2)/imports/utils/classes.py +379 -0
- abstract_utilities/file_utils (2)/imports/utils/clean_imps.py +155 -0
- abstract_utilities/file_utils (2)/imports/utils/filter_utils.py +341 -0
- abstract_utilities/file_utils (2)/src/__init__.py +8 -0
- abstract_utilities/file_utils (2)/src/file_filters.py +155 -0
- abstract_utilities/file_utils (2)/src/file_reader.py +604 -0
- abstract_utilities/file_utils (2)/src/find_collect.py +258 -0
- abstract_utilities/file_utils (2)/src/initFunctionsGen.py +286 -0
- abstract_utilities/file_utils (2)/src/map_utils.py +28 -0
- abstract_utilities/file_utils (2)/src/pdf_utils.py +300 -0
- abstract_utilities/hash_utils/__init__.py +2 -0
- abstract_utilities/hash_utils/hash_utils.py +5 -0
- abstract_utilities/hash_utils/imports/__init__.py +2 -0
- abstract_utilities/hash_utils/imports/imports.py +1 -0
- abstract_utilities/hash_utils/imports/module_imports.py +0 -0
- abstract_utilities/history_utils/__init__.py +2 -0
- abstract_utilities/history_utils/history_utils.py +37 -0
- abstract_utilities/history_utils/imports/__init__.py +2 -0
- abstract_utilities/history_utils/imports/imports.py +1 -0
- abstract_utilities/history_utils/imports/module_imports.py +0 -0
- abstract_utilities/import_utils/__init__.py +2 -0
- abstract_utilities/import_utils/imports/__init__.py +4 -0
- abstract_utilities/import_utils/imports/constants.py +2 -0
- abstract_utilities/import_utils/imports/imports.py +4 -0
- abstract_utilities/import_utils/imports/module_imports.py +6 -0
- abstract_utilities/import_utils/imports/utils.py +30 -0
- abstract_utilities/import_utils/src/__init__.py +7 -0
- abstract_utilities/import_utils/src/clean_imports.py +147 -0
- abstract_utilities/import_utils/src/dot_utils.py +69 -0
- abstract_utilities/import_utils/src/extract_utils.py +42 -0
- abstract_utilities/import_utils/src/import_functions.py +46 -0
- abstract_utilities/import_utils/src/import_utils.py +299 -0
- abstract_utilities/import_utils/src/package_utils/__init__.py +139 -0
- abstract_utilities/import_utils/src/package_utils/context_utils.py +27 -0
- abstract_utilities/import_utils/src/package_utils/import_collectors.py +53 -0
- abstract_utilities/import_utils/src/package_utils/path_utils.py +28 -0
- abstract_utilities/import_utils/src/package_utils/safe_import.py +27 -0
- abstract_utilities/import_utils/src/package_utils.py +140 -0
- abstract_utilities/import_utils/src/package_utilss/__init__.py +139 -0
- abstract_utilities/import_utils/src/package_utilss/context_utils.py +27 -0
- abstract_utilities/import_utils/src/package_utilss/import_collectors.py +53 -0
- abstract_utilities/import_utils/src/package_utilss/path_utils.py +28 -0
- abstract_utilities/import_utils/src/package_utilss/safe_import.py +27 -0
- abstract_utilities/import_utils/src/pkg_utils.py +140 -0
- abstract_utilities/import_utils/src/sysroot_utils.py +57 -0
- abstract_utilities/imports.py +18 -0
- abstract_utilities/json_utils/__init__.py +2 -0
- abstract_utilities/json_utils/imports/__init__.py +2 -0
- abstract_utilities/json_utils/imports/imports.py +2 -0
- abstract_utilities/json_utils/imports/module_imports.py +5 -0
- abstract_utilities/json_utils/json_utils.py +743 -0
- abstract_utilities/list_utils/__init__.py +2 -0
- abstract_utilities/list_utils/imports/__init__.py +2 -0
- abstract_utilities/list_utils/imports/imports.py +1 -0
- abstract_utilities/list_utils/imports/module_imports.py +0 -0
- abstract_utilities/list_utils/list_utils.py +199 -0
- abstract_utilities/log_utils/__init__.py +5 -0
- abstract_utilities/log_utils/abstractLogManager.py +64 -0
- abstract_utilities/log_utils/call_response.py +68 -0
- abstract_utilities/log_utils/imports/__init__.py +2 -0
- abstract_utilities/log_utils/imports/imports.py +7 -0
- abstract_utilities/log_utils/imports/module_imports.py +2 -0
- abstract_utilities/log_utils/log_file.py +58 -0
- abstract_utilities/log_utils/logger_callable.py +49 -0
- abstract_utilities/math_utils/__init__.py +2 -0
- abstract_utilities/math_utils/imports/__init__.py +2 -0
- abstract_utilities/math_utils/imports/imports.py +2 -0
- abstract_utilities/math_utils/imports/module_imports.py +1 -0
- abstract_utilities/math_utils/math_utils.py +208 -0
- abstract_utilities/parse_utils/__init__.py +2 -0
- abstract_utilities/parse_utils/imports/__init__.py +3 -0
- abstract_utilities/parse_utils/imports/constants.py +10 -0
- abstract_utilities/parse_utils/imports/imports.py +2 -0
- abstract_utilities/parse_utils/imports/module_imports.py +4 -0
- abstract_utilities/parse_utils/parse_utils.py +516 -0
- abstract_utilities/path_utils/__init__.py +2 -0
- abstract_utilities/path_utils/imports/__init__.py +3 -0
- abstract_utilities/path_utils/imports/imports.py +1 -0
- abstract_utilities/path_utils/imports/module_imports.py +8 -0
- abstract_utilities/path_utils/path_utils.py +251 -0
- abstract_utilities/path_utils.py +95 -14
- abstract_utilities/read_write_utils/__init__.py +1 -0
- abstract_utilities/read_write_utils/imports/__init__.py +2 -0
- abstract_utilities/read_write_utils/imports/imports.py +2 -0
- abstract_utilities/read_write_utils/imports/module_imports.py +5 -0
- abstract_utilities/read_write_utils/read_write_utils.py +338 -0
- abstract_utilities/read_write_utils.py +110 -60
- abstract_utilities/safe_utils/__init__.py +2 -0
- abstract_utilities/safe_utils/imports/__init__.py +3 -0
- abstract_utilities/safe_utils/imports/imports.py +2 -0
- abstract_utilities/safe_utils/imports/module_imports.py +2 -0
- abstract_utilities/safe_utils/safe_utils.py +136 -0
- abstract_utilities/ssh_utils/__init__.py +3 -1
- abstract_utilities/ssh_utils/classes.py +0 -1
- abstract_utilities/ssh_utils/cmd_utils.py +207 -0
- abstract_utilities/ssh_utils/imports/__init__.py +3 -0
- abstract_utilities/ssh_utils/imports/imports.py +5 -0
- abstract_utilities/ssh_utils/imports/module_imports.py +6 -0
- abstract_utilities/ssh_utils/imports/utils.py +189 -0
- abstract_utilities/ssh_utils/pexpect_utils.py +11 -18
- abstract_utilities/ssh_utils/type_checks.py +92 -0
- abstract_utilities/string_utils/__init__.py +4 -0
- abstract_utilities/string_utils/clean_utils.py +28 -0
- abstract_utilities/string_utils/eat_utils.py +103 -0
- abstract_utilities/string_utils/imports/__init__.py +3 -0
- abstract_utilities/string_utils/imports/imports.py +2 -0
- abstract_utilities/string_utils/imports/module_imports.py +2 -0
- abstract_utilities/string_utils/imports/utils.py +81 -0
- abstract_utilities/string_utils/replace_utils.py +27 -0
- abstract_utilities/thread_utils/__init__.py +2 -0
- abstract_utilities/thread_utils/imports/__init__.py +2 -0
- abstract_utilities/thread_utils/imports/imports.py +2 -0
- abstract_utilities/thread_utils/imports/module_imports.py +2 -0
- abstract_utilities/thread_utils/thread_utils.py +140 -0
- abstract_utilities/time_utils/__init__.py +2 -0
- abstract_utilities/time_utils/imports/__init__.py +2 -0
- abstract_utilities/time_utils/imports/imports.py +3 -0
- abstract_utilities/time_utils/imports/module_imports.py +1 -0
- abstract_utilities/time_utils/time_utils.py +392 -0
- abstract_utilities/type_utils/__init__.py +3 -0
- abstract_utilities/type_utils/alpha_utils.py +59 -0
- abstract_utilities/type_utils/imports/__init__.py +2 -0
- abstract_utilities/type_utils/imports/imports.py +4 -0
- abstract_utilities/type_utils/imports/module_imports.py +1 -0
- abstract_utilities/type_utils/num_utils.py +19 -0
- abstract_utilities/type_utils/type_utils.py +981 -0
- {abstract_utilities-0.2.2.486.dist-info → abstract_utilities-0.2.2.540.dist-info}/METADATA +1 -1
- abstract_utilities-0.2.2.540.dist-info/RECORD +263 -0
- imports/__init__.py +36 -0
- abstract_utilities-0.2.2.486.dist-info/RECORD +0 -92
- {abstract_utilities-0.2.2.486.dist-info → abstract_utilities-0.2.2.540.dist-info}/WHEEL +0 -0
- {abstract_utilities-0.2.2.486.dist-info → abstract_utilities-0.2.2.540.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"""
|
|
2
|
+
path_utils.py
|
|
3
|
+
|
|
4
|
+
This module provides a collection of utility functions related to file and directory path management.
|
|
5
|
+
Its features include, but are not limited to:
|
|
6
|
+
|
|
7
|
+
Usage:
|
|
8
|
+
import abstract_utilities.path_utils as path_utils
|
|
9
|
+
|
|
10
|
+
- Determining appropriate file path separators based on the operating system.
|
|
11
|
+
- Joining paths using the correct file path separator.
|
|
12
|
+
- Fetching the current working directory and user's home folder.
|
|
13
|
+
- Checking if a path corresponds to a file or directory and if they exist.
|
|
14
|
+
- Fetching file sizes and determining the size of directories.
|
|
15
|
+
- Creating multiple nested directories if they do not exist.
|
|
16
|
+
- Retrieving creation time of files.
|
|
17
|
+
- Converting sizes to GB with options for truncation.
|
|
18
|
+
|
|
19
|
+
This module is part of the `abstract_utilities` package.
|
|
20
|
+
|
|
21
|
+
Author: putkoff
|
|
22
|
+
Date: 05/31/2023
|
|
23
|
+
Version: 0.1.2
|
|
24
|
+
"""
|
|
25
|
+
from .imports import *
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def get_files(directory):
|
|
29
|
+
file_list = []
|
|
30
|
+
for root,dirs,files in os.walk(directory):
|
|
31
|
+
for file in files:
|
|
32
|
+
file_list.append(os.path.join(root,file))
|
|
33
|
+
return file_list
|
|
34
|
+
|
|
35
|
+
def get_folders(directory):
|
|
36
|
+
directory_list = []
|
|
37
|
+
for root,dirs,files in os.walk(directory):
|
|
38
|
+
for folder in dirs:
|
|
39
|
+
directory_list.append(os.path.join(root,folder))
|
|
40
|
+
return directory_list
|
|
41
|
+
|
|
42
|
+
def break_down_find_existing(path):
|
|
43
|
+
slash = get_slash()
|
|
44
|
+
test_path=''
|
|
45
|
+
found_path=None
|
|
46
|
+
for part in path.split(slash):
|
|
47
|
+
test_path=os.path.join(test_path,part)
|
|
48
|
+
if not os.path.exists(test_path):
|
|
49
|
+
return found_path
|
|
50
|
+
found_path = test_path
|
|
51
|
+
return found_path
|
|
52
|
+
|
|
53
|
+
def get_directory_items(directory):
|
|
54
|
+
if not os.path.isdir(directory):
|
|
55
|
+
return []
|
|
56
|
+
return os.listdir(directory)
|
|
57
|
+
|
|
58
|
+
def get_directory_files(directory):
|
|
59
|
+
if not os.path.isdir(directory):
|
|
60
|
+
return []
|
|
61
|
+
return get_files(directory)
|
|
62
|
+
|
|
63
|
+
def get_all_item_paths(directory):
|
|
64
|
+
directory_items = get_directory_items(directory)
|
|
65
|
+
item_paths = [os.path.join(directory,item) for item in directory_items if item]
|
|
66
|
+
return item_paths
|
|
67
|
+
|
|
68
|
+
def get_all_file_paths(directory):
|
|
69
|
+
item_paths = get_directory_files(directory)
|
|
70
|
+
return item_paths
|
|
71
|
+
|
|
72
|
+
def get_directory(directory):
|
|
73
|
+
if not os.path.isdir(directory):
|
|
74
|
+
os.makedirs(directory,exist_ok=True)
|
|
75
|
+
return directory
|
|
76
|
+
|
|
77
|
+
def create_directory(directory,path):
|
|
78
|
+
directory = os.path.join(directory,path)
|
|
79
|
+
return get_directory(directory)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def initialize_file(directory,basename):
|
|
83
|
+
directory = get_directory(directory)
|
|
84
|
+
file_path = create_directory(directory,basename)
|
|
85
|
+
return get_file_path(file_path)
|
|
86
|
+
|
|
87
|
+
def join_path(directory,basename):
|
|
88
|
+
file_path = os.path.join(directory,basename)
|
|
89
|
+
return file_path
|
|
90
|
+
|
|
91
|
+
def is_last_itter(i,*itters):
|
|
92
|
+
itter_len = len(itters)
|
|
93
|
+
if i+1 == itter_len:
|
|
94
|
+
return True
|
|
95
|
+
return False
|
|
96
|
+
|
|
97
|
+
def path_join(*paths, isfile=False):
|
|
98
|
+
final_path = os.path.join(*paths)
|
|
99
|
+
paths_len = len(paths)
|
|
100
|
+
for i, path in enumerate(paths):
|
|
101
|
+
if i == 0:
|
|
102
|
+
final_path = path # Note: Fixed bug; original code had `final_path = paths`
|
|
103
|
+
else:
|
|
104
|
+
final_path = os.path.join(final_path, path)
|
|
105
|
+
if isfile and is_last_itter(i, paths_len): # Note: `is_last_itter` is undefined; assuming it checks if last iteration
|
|
106
|
+
break
|
|
107
|
+
os.makedirs(final_path, exist_ok=True)
|
|
108
|
+
return final_path
|
|
109
|
+
|
|
110
|
+
def is_file(*paths):
|
|
111
|
+
item_path = os.path.join(*paths)
|
|
112
|
+
return os.path.isfile(item_path)
|
|
113
|
+
|
|
114
|
+
def is_dir(*paths):
|
|
115
|
+
item_path = os.path.join(*paths)
|
|
116
|
+
return os.path.isdir(item_path)
|
|
117
|
+
|
|
118
|
+
def is_path(*paths):
|
|
119
|
+
item_path = os.path.join(*paths)
|
|
120
|
+
return item_path if os.path.exists(item_path) else None
|
|
121
|
+
|
|
122
|
+
def get_all_directories(directory):
|
|
123
|
+
dir_list = os.listdir(directory)
|
|
124
|
+
directory_list = [item for item in dir_list if is_dir(directory,item)]
|
|
125
|
+
return directory_list
|
|
126
|
+
|
|
127
|
+
def get_all_files(directory=None):
|
|
128
|
+
directory = directory or os.getcwd()
|
|
129
|
+
dir_list = os.listdir(directory)
|
|
130
|
+
file_list = [item for item in dir_list if is_file(directory,item)]
|
|
131
|
+
return file_list
|
|
132
|
+
|
|
133
|
+
def get_all_items(directory):
|
|
134
|
+
dir_list = os.listdir(directory)
|
|
135
|
+
file_list = [item for item in dir_list if is_path(directory,item)]
|
|
136
|
+
return file_list
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def get_dirlist(directory):
|
|
140
|
+
path = get_directory(directory)
|
|
141
|
+
if not path:
|
|
142
|
+
return path
|
|
143
|
+
dir_list=[]
|
|
144
|
+
if is_dir(path):
|
|
145
|
+
dir_list = os.listdir(path)
|
|
146
|
+
elif is_file(path):
|
|
147
|
+
dir_list = [os.path.basename(path)]
|
|
148
|
+
return dir_list
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def is_directory_in_paths(path,directory):
|
|
152
|
+
return directory in path
|
|
153
|
+
|
|
154
|
+
def remove_directory(directory,paths=None):
|
|
155
|
+
paths = make_list_it(paths)
|
|
156
|
+
shutil.rmtree(audio_dir)
|
|
157
|
+
for path in paths:
|
|
158
|
+
remove_path(path=path)
|
|
159
|
+
def remove_path(path=None):
|
|
160
|
+
if path and os.path.exists(path):
|
|
161
|
+
if os.path.isdir(path):
|
|
162
|
+
remove_directory(path)
|
|
163
|
+
else:
|
|
164
|
+
os.remove(path)
|
|
165
|
+
def get_safe_dirname(path=None):
|
|
166
|
+
if path:
|
|
167
|
+
path_str = str(path)
|
|
168
|
+
return os.path.dirname(path_str)
|
|
169
|
+
def get_safe_basename(path=None):
|
|
170
|
+
if path:
|
|
171
|
+
path_str = str(path)
|
|
172
|
+
return os.path.basename(path_str)
|
|
173
|
+
def get_safe_splitext(path=None,basename=None):
|
|
174
|
+
basename = basename or get_safe_basename(path=path)
|
|
175
|
+
if basename:
|
|
176
|
+
basename_str = str(basename)
|
|
177
|
+
filename,ext = os.path.splitext(basename_str)
|
|
178
|
+
return filename,ext
|
|
179
|
+
def get_safe_filename(path=None,basename=None):
|
|
180
|
+
filename,_ = get_safe_splitext(path=path,basename=basename)
|
|
181
|
+
return filename
|
|
182
|
+
def get_safe_ext(path=None,basename=None):
|
|
183
|
+
_,ext = get_safe_splitext(path=path,basename=basename)
|
|
184
|
+
return ext
|
|
185
|
+
def raw_create_dirs(*paths):
|
|
186
|
+
"""Recursively create all directories along the given path."""
|
|
187
|
+
full_path = os.path.abspath(safe_join(*paths))
|
|
188
|
+
sub_parts = [p for p in full_path.split(os.sep) if p]
|
|
189
|
+
|
|
190
|
+
current_path = "/" if full_path.startswith(os.sep) else ""
|
|
191
|
+
for part in sub_parts:
|
|
192
|
+
current_path = safe_join(current_path, part)
|
|
193
|
+
os.makedirs(current_path, exist_ok=True)
|
|
194
|
+
return full_path
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def create_dirs(directory, child=None):
|
|
198
|
+
"""Create directory and optional child path safely."""
|
|
199
|
+
full_path = os.path.abspath(safe_join(directory, child))
|
|
200
|
+
if not os.path.exists(full_path):
|
|
201
|
+
raw_create_dirs(full_path)
|
|
202
|
+
return full_path
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def get_base_dir(directory=None):
|
|
206
|
+
"""Return given directory or _BASE_DIR fallback."""
|
|
207
|
+
return directory or _BASE_DIR
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def create_base_path(directory=None, child=None):
|
|
211
|
+
"""Join base dir with child."""
|
|
212
|
+
directory = get_base_dir(directory)
|
|
213
|
+
return safe_join(directory, child)
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def create_base_dir(directory=None, child=None):
|
|
217
|
+
"""Ensure existence of base directory path."""
|
|
218
|
+
full_path = create_base_path(directory, child)
|
|
219
|
+
if not os.path.exists(full_path):
|
|
220
|
+
raw_create_dirs(full_path)
|
|
221
|
+
return full_path
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def get_file_parts(path):
|
|
228
|
+
|
|
229
|
+
basename = get_safe_basename(path)
|
|
230
|
+
filename, ext = get_safe_splitext(basename=basename)
|
|
231
|
+
|
|
232
|
+
dirname = get_safe_dirname(path)
|
|
233
|
+
dirbase = get_safe_basename(dirname)
|
|
234
|
+
|
|
235
|
+
parent_dirname = get_safe_dirname(dirname)
|
|
236
|
+
parent_dirbase = get_safe_basename(parent_dirname)
|
|
237
|
+
|
|
238
|
+
super_dirname = get_safe_dirname(parent_dirname)
|
|
239
|
+
super_dirbase = get_safe_basename(super_dirname)
|
|
240
|
+
|
|
241
|
+
return {"dirname": dirname,
|
|
242
|
+
"basename": basename,
|
|
243
|
+
"filename": filename,
|
|
244
|
+
"ext": ext,
|
|
245
|
+
"dirbase":dirbase,
|
|
246
|
+
"parent_dirname":parent_dirname,
|
|
247
|
+
"parent_dirbase":parent_dirbase,
|
|
248
|
+
"super_dirname":super_dirname,
|
|
249
|
+
"super_dirbase":super_dirbase
|
|
250
|
+
}
|
|
251
|
+
|
abstract_utilities/path_utils.py
CHANGED
|
@@ -22,14 +22,15 @@ Author: putkoff
|
|
|
22
22
|
Date: 05/31/2023
|
|
23
23
|
Version: 0.1.2
|
|
24
24
|
"""
|
|
25
|
-
import os
|
|
26
|
-
from .
|
|
25
|
+
import os,shlex
|
|
26
|
+
from .ssh_utils import run_cmd
|
|
27
27
|
from .string_clean import eatAll
|
|
28
28
|
from .list_utils import make_list
|
|
29
29
|
from .type_utils import get_media_exts, is_media_type,MIME_TYPES
|
|
30
30
|
from .safe_utils import safe_join
|
|
31
31
|
from .class_utils import get_caller_path,get_caller_dir
|
|
32
|
-
|
|
32
|
+
from .abstract_classes import SingletonMeta,run_pruned_func
|
|
33
|
+
from .string_utils import get_from_kwargs
|
|
33
34
|
def get_os_info():
|
|
34
35
|
"""
|
|
35
36
|
Get Operating System Information
|
|
@@ -540,8 +541,6 @@ def get_all_items(directory):
|
|
|
540
541
|
file_list = [item for item in dir_list if is_path(directory,item)]
|
|
541
542
|
return file_list
|
|
542
543
|
|
|
543
|
-
def collate_text_docs(directory=None):
|
|
544
|
-
return [read_from_file(item) for item in get_all_files(directory=directory)]
|
|
545
544
|
|
|
546
545
|
def get_dirlist(directory):
|
|
547
546
|
path = get_directory(directory)
|
|
@@ -553,15 +552,7 @@ def get_dirlist(directory):
|
|
|
553
552
|
elif is_file(path):
|
|
554
553
|
dir_list = [os.path.basename(path)]
|
|
555
554
|
return dir_list
|
|
556
|
-
|
|
557
|
-
item_path = os.path.join(*paths)
|
|
558
|
-
if os.path.isfile(item_path):
|
|
559
|
-
try:
|
|
560
|
-
content = read_from_file(item_path)
|
|
561
|
-
return content
|
|
562
|
-
except:
|
|
563
|
-
pass
|
|
564
|
-
return None
|
|
555
|
+
|
|
565
556
|
|
|
566
557
|
def is_directory_in_paths(path,directory):
|
|
567
558
|
return directory in path
|
|
@@ -636,6 +627,96 @@ def create_base_dir(directory=None, child=None):
|
|
|
636
627
|
return full_path
|
|
637
628
|
|
|
638
629
|
|
|
630
|
+
def get_user_pass_host_key(**kwargs):
|
|
631
|
+
args = ['password','user_at_host','host','key','user']
|
|
632
|
+
kwargs['del_kwarg']=kwargs.get('del_kwarg',False)
|
|
633
|
+
values,kwargs = get_from_kwargs(*args,**kwargs)
|
|
634
|
+
return values
|
|
635
|
+
|
|
636
|
+
# --- Base remote checker -----------------------------------------------------
|
|
637
|
+
def _remote_test(path: str, test_flag: str, timeout: int = 5,*args, **kwargs) -> bool:
|
|
638
|
+
"""
|
|
639
|
+
Run a remote shell test (e.g. -f, -d) via SSH.
|
|
640
|
+
Returns True if test succeeds, False otherwise.
|
|
641
|
+
"""
|
|
642
|
+
try:
|
|
643
|
+
kwargs['cmd']=f"[ {test_flag} {shlex.quote(path)} ] && echo 1 || echo 0"
|
|
644
|
+
kwargs['text']=True
|
|
645
|
+
kwargs['timeout']=timeout
|
|
646
|
+
kwargs['stderr']=subprocess.DEVNULL
|
|
647
|
+
result = run_pruned_func(run_cmd,**kwargs)
|
|
648
|
+
return result.strip() == "1"
|
|
649
|
+
except Exception:
|
|
650
|
+
return False
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
# --- Individual path checks --------------------------------------------------
|
|
654
|
+
def is_remote_file(path: str,*args, **kwargs) -> bool:
|
|
655
|
+
"""True if remote path is a file."""
|
|
656
|
+
return _remote_test(path, "-f", **kwargs)
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
def is_remote_dir(path: str,*args, **kwargs) -> bool:
|
|
660
|
+
"""True if remote path is a directory."""
|
|
661
|
+
return _remote_test(path, "-d", **kwargs)
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
def is_local_file(path: str) -> bool:
|
|
665
|
+
"""True if local path is a file."""
|
|
666
|
+
return os.path.isfile(path)
|
|
667
|
+
|
|
668
|
+
|
|
669
|
+
def is_local_dir(path: str) -> bool:
|
|
670
|
+
"""True if local path is a directory."""
|
|
671
|
+
return os.path.isdir(path)
|
|
672
|
+
|
|
673
|
+
|
|
674
|
+
# --- Unified interface -------------------------------------------------------
|
|
675
|
+
|
|
676
|
+
def is_file(path: str,*args,**kwargs) -> bool:
|
|
677
|
+
"""Determine if path is a file (works local or remote)."""
|
|
678
|
+
if get_user_pass_host_key(**kwargs):
|
|
679
|
+
return is_remote_file(path, **kwargs)
|
|
680
|
+
return is_local_file(path)
|
|
681
|
+
|
|
682
|
+
|
|
683
|
+
def is_dir(path: str, *args,**kwargs) -> bool:
|
|
684
|
+
"""Determine if path is a directory (works local or remote)."""
|
|
685
|
+
if get_user_pass_host_key(**kwargs):
|
|
686
|
+
return is_remote_dir(path, **kwargs)
|
|
687
|
+
return is_local_dir(path)
|
|
688
|
+
|
|
689
|
+
def is_exists(path: str, *args,**kwargs) -> bool:
|
|
690
|
+
if is_file(path,**kwargs):
|
|
691
|
+
return True
|
|
692
|
+
if is_dir(path,**kwargs):
|
|
693
|
+
return True
|
|
694
|
+
return False
|
|
695
|
+
# --- Optional: keep your original all-in-one wrapper ------------------------
|
|
696
|
+
def check_path_type(
|
|
697
|
+
path: str,
|
|
698
|
+
*args,
|
|
699
|
+
**kwargs
|
|
700
|
+
) -> str:
|
|
701
|
+
"""
|
|
702
|
+
Return 'file', 'directory', 'missing', or 'unknown'.
|
|
703
|
+
Uses isolated is_file/is_dir functions.
|
|
704
|
+
"""
|
|
705
|
+
if get_user_pass_host_key(**kwargs):
|
|
706
|
+
if is_remote_file(path,**kwargs):
|
|
707
|
+
return "file"
|
|
708
|
+
elif is_remote_dir(path,**kwargs):
|
|
709
|
+
return "directory"
|
|
710
|
+
else:
|
|
711
|
+
return "missing"
|
|
712
|
+
else:
|
|
713
|
+
if os.path.isfile(path):
|
|
714
|
+
return "file"
|
|
715
|
+
elif os.path.isdir(path):
|
|
716
|
+
return "directory"
|
|
717
|
+
elif not os.path.exists(path):
|
|
718
|
+
return "missing"
|
|
719
|
+
return "unknown"
|
|
639
720
|
|
|
640
721
|
def get_file_parts(path):
|
|
641
722
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .read_write_utils import *
|