abstract-utilities 0.2.2.540__py3-none-any.whl → 0.2.2.593__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 (37) hide show
  1. abstract_utilities/class_utils/caller_utils.py +18 -0
  2. abstract_utilities/class_utils/global_utils.py +3 -2
  3. abstract_utilities/class_utils/imports/imports.py +1 -1
  4. abstract_utilities/directory_utils/src/directory_utils.py +17 -1
  5. abstract_utilities/file_utils/imports/imports.py +0 -4
  6. abstract_utilities/file_utils/imports/module_imports.py +1 -1
  7. abstract_utilities/file_utils/src/__init__.py +2 -3
  8. abstract_utilities/file_utils/src/file_filters/__init__.py +4 -0
  9. abstract_utilities/file_utils/src/file_filters/ensure_utils.py +118 -0
  10. abstract_utilities/file_utils/src/file_filters/filter_params.py +86 -0
  11. abstract_utilities/file_utils/src/file_filters/filter_utils.py +78 -0
  12. abstract_utilities/file_utils/src/file_filters/predicate_utils.py +114 -0
  13. abstract_utilities/file_utils/src/file_reader.py +0 -1
  14. abstract_utilities/file_utils/src/find_collect.py +10 -86
  15. abstract_utilities/file_utils/src/find_content.py +210 -0
  16. abstract_utilities/file_utils/src/reader_utils/__init__.py +4 -0
  17. abstract_utilities/file_utils/src/reader_utils/directory_reader.py +53 -0
  18. abstract_utilities/file_utils/src/reader_utils/file_reader.py +543 -0
  19. abstract_utilities/file_utils/src/reader_utils/file_readers.py +376 -0
  20. abstract_utilities/file_utils/src/reader_utils/imports.py +18 -0
  21. abstract_utilities/file_utils/src/reader_utils/pdf_utils.py +300 -0
  22. abstract_utilities/import_utils/circular_import_finder.py +222 -0
  23. abstract_utilities/import_utils/circular_import_finder2.py +118 -0
  24. abstract_utilities/import_utils/imports/module_imports.py +3 -1
  25. abstract_utilities/import_utils/src/clean_imports.py +156 -25
  26. abstract_utilities/import_utils/src/dot_utils.py +11 -0
  27. abstract_utilities/import_utils/src/extract_utils.py +4 -0
  28. abstract_utilities/import_utils/src/import_functions.py +46 -2
  29. abstract_utilities/import_utils/src/pkg_utils.py +58 -4
  30. abstract_utilities/import_utils/src/sysroot_utils.py +56 -1
  31. abstract_utilities/log_utils/log_file.py +3 -2
  32. abstract_utilities/path_utils/path_utils.py +25 -23
  33. abstract_utilities/safe_utils/safe_utils.py +30 -0
  34. {abstract_utilities-0.2.2.540.dist-info → abstract_utilities-0.2.2.593.dist-info}/METADATA +1 -1
  35. {abstract_utilities-0.2.2.540.dist-info → abstract_utilities-0.2.2.593.dist-info}/RECORD +37 -23
  36. {abstract_utilities-0.2.2.540.dist-info → abstract_utilities-0.2.2.593.dist-info}/WHEEL +0 -0
  37. {abstract_utilities-0.2.2.540.dist-info → abstract_utilities-0.2.2.593.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,36 @@
1
1
  # safe_import_utils.py
2
2
  from ..imports import *
3
3
  from .import_functions import *
4
+ from ...safe_utils import *
5
+ from .sysroot_utils import get_import_with_sysroot
6
+ def try_is_file(file_path):
7
+ try:
8
+ return os.path.isfile(file_path)
9
+ except:
10
+ return False
11
+ def try_is_dir(file_path):
12
+ try:
13
+ return os.path.isdir(file_path)
14
+ except:
15
+ return False
16
+ def try_join(*args):
17
+ try:
18
+ return safe_join(*args)
19
+ except:
20
+ return False
21
+ def get_pkg_or_init(pkg_path):
22
+ if pkg_path:
23
+ if try_is_file(pkg_path):
24
+ return pkg_path
25
+ pkg_py_path = f"{pkg_path}.py"
26
+ if try_is_file(pkg_py_path):
27
+ return pkg_py_path
28
+ pkg_init_path = try_join(pkg_path,'__init__.py')
29
+ if try_is_dir(pkg_path):
30
+ if os.path.isfile(pkg_init_path):
31
+ return pkg_init_path
32
+
33
+
4
34
 
5
35
  def ensure_import_pkg_js(import_pkg_js,file_path=None):
6
36
  import_pkg_js = import_pkg_js or {"context":{}}
@@ -79,18 +109,42 @@ def ensure_caller_package(caller_file: str, caller_globals: dict | None = None)
79
109
  if caller_globals and caller_globals.get("__name__") == "__main__" and not caller_globals.get("__package__"):
80
110
  caller_globals["__package__"] = pkg
81
111
  return pkg
112
+ def get_init_dots(import_pkg):
113
+ count = 0
114
+ for char in import_pkg:
115
+ if char != '.':
116
+ break
117
+ count+=1
118
+ return count
119
+ def make_relative_pkg(import_pkg,file_path):
120
+ full_pkg = eatAll(import_pkg,'.')
121
+ if file_path:
122
+ dirname = file_path
123
+ dot_count = get_init_dots(import_pkg)
124
+ for i in range(dot_count):
125
+ dirname = os.path.dirname(dirname)
126
+ dirbase = os.path.basename(dirname)
127
+ full_pkg=f"{dirbase}.{full_pkg}"
128
+ return full_pkg
129
+ def is_local_import(import_pkg,file_path=None):
130
+ relative_pkg = get_module_from_import(import_pkg,file_path)
131
+ if get_pkg_or_init(relative_pkg):
132
+ return True
133
+ return False
82
134
  def get_import_pkg(line):
83
135
  if is_line_group_import(line):
84
136
  return clean_line(line.split(FROM_TAG)[1].split(IMPORT_TAG)[0])
85
137
  def get_imports_from_import_pkg(line):
86
138
  if is_line_group_import(line):
87
139
  return get_cleaned_import_list(line,commaClean=True)
88
- def add_imports_to_import_pkg_js(import_pkg,imports,import_pkg_js=None):
140
+ def add_imports_to_import_pkg_js(import_pkg,imports,import_pkg_js=None,file_path=None):
89
141
  import_pkg_js = ensure_import_pkg_js(import_pkg_js)
90
142
  imports = clean_imports(imports)
143
+ pkg_path = get_module_from_import(import_pkg,file_path)
144
+ local_import = get_pkg_or_init(pkg_path)
91
145
  if import_pkg not in import_pkg_js:
92
146
  i = len(import_pkg_js["context"]["nulines"])
93
- import_pkg_js[import_pkg]={"imports":imports,"line":i}
147
+ import_pkg_js[import_pkg]={"imports":imports,"line":i,"file_path":file_path,"local_import":local_import,"is_local":is_local_import(import_pkg,file_path=file_path)}
94
148
  import_line = f"from {import_pkg} import "
95
149
  if import_pkg == "import":
96
150
  import_line = IMPORT_TAG
@@ -98,12 +152,12 @@ def add_imports_to_import_pkg_js(import_pkg,imports,import_pkg_js=None):
98
152
  else:
99
153
  import_pkg_js[import_pkg]["imports"]+=imports
100
154
  return import_pkg_js
101
- def update_import_pkg_js(line,import_pkg_js=None):
155
+ def update_import_pkg_js(line,import_pkg_js=None,file_path=None):
102
156
  import_pkg_js = ensure_import_pkg_js(import_pkg_js)
103
157
  if is_line_group_import(line):
104
158
  import_pkg = get_import_pkg(line)
105
159
  imports = get_imports_from_import_pkg(line)
106
- import_pkg_js = add_imports_to_import_pkg_js(import_pkg,imports,import_pkg_js=import_pkg_js)
160
+ import_pkg_js = add_imports_to_import_pkg_js(import_pkg,imports,import_pkg_js=import_pkg_js,file_path=file_path)
107
161
  else:
108
162
  if len(import_pkg_js["context"]["nulines"]) >0 and line == '' and is_line_import(import_pkg_js["context"]["nulines"][-1]):
109
163
  pass
@@ -1,6 +1,9 @@
1
1
  from ..imports import *
2
2
  from .dot_utils import *
3
-
3
+ from .extract_utils import get_all_py_file_paths
4
+ def get_py_files(directory=None):
5
+ directory = directory or get_caller_dir(2)
6
+ return get_all_py_file_paths(directory,add=True)
4
7
  def ensure_on_path(p: Path):
5
8
  s = str(p)
6
9
  if s not in sys.path:
@@ -19,7 +22,59 @@ def get_dot_range_sysroot(filepath):
19
22
  sysroot = get_sysroot(sysroot,dot_range)
20
23
 
21
24
  return sysroot
25
+ def get_import_with_sysroot(file_path, sysroot):
26
+ """
27
+ Rewrite imports like:
28
+ from imports.constants import *
29
+ into:
30
+ from <relative_path>.imports.constants import *
31
+ Where <relative_path> is computed relative to sysroot.
32
+ """
33
+
34
+
35
+ # Absolute paths
36
+ file_dir = os.path.dirname(os.path.abspath(file_path))
37
+ sysroot = os.path.abspath(sysroot)
38
+
39
+ # Compute relative path
40
+ relpath = os.path.relpath(file_dir, sysroot)
41
+
42
+ bare_rel = eatAll(relpath,'.')
43
+
44
+ # Turn filesystem path into dotted python path
45
+ if relpath == ".":
46
+ dotted = ""
47
+ else:
48
+ dotted = ".".join(part for part in relpath.split(os.sep) if part)
49
+ if bare_rel.startswith('/') and dotted.startswith('.'):
50
+ dotted = dotted[1:]
51
+
52
+
53
+ # Build final rewritten import
54
+ return dotted
55
+ def get_all_sysroots(files):
56
+ sysroots=[]
57
+ for glo in files:
58
+ imp = compute_dotted_and_sysroot(glo)
59
+ sysroots.append(imp[-1])
60
+ return sysroots
61
+ def get_shortest_sysroot(files):
62
+ sysroots = get_all_sysroots(files)
63
+ return get_shortest_path(*sysroots)
64
+ def get_all_py_sysroots(directory=None,files=None):
65
+ py_files = files or get_py_files(directory=directory)
66
+ return [compute_dotted_and_sysroot(glo)[1] for glo in py_files]
22
67
 
68
+ def get__imports(directory=None, sysroot=None):
69
+ directory = directory or get_caller_dir(1)
70
+ globs = collect_globs(directory, allowed_exts='.py')
71
+ globs = [glo for glo in globs.get('files') if glo]
72
+ sysroots = [compute_dotted_and_sysroot(glo)[1] for glo in globs]
73
+ # ⭐ Get unified monorepo root
74
+ monorepo_root = get_common_root(sysroots)
75
+ if str(monorepo_root) not in sys.path:
76
+ sys.path.insert(0, str(monorepo_root))
77
+ get_all_imports(directory=directory, sysroot=monorepo_root)
23
78
  def is_import_or_init(sysroot,likely=None):
24
79
  file_data = get_file_parts(sysroot)
25
80
  nuroot = sysroot
@@ -12,14 +12,15 @@ def get_logFile(bpName: str = None, maxBytes: int = 100_000, backupCount: int =
12
12
  bpName = os.path.splitext(os.path.basename(caller_path))[0]
13
13
  del frame_info
14
14
 
15
- log_dir = mkdirs("logs")
16
- log_path = os.path.join(log_dir, f"{bpName}.log")
15
+
17
16
 
18
17
  logger = logging.getLogger(bpName)
19
18
  logger.setLevel(logging.INFO)
20
19
 
21
20
  if not logger.handlers:
22
21
  try:
22
+ log_dir = mkdirs("logs")
23
+ log_path = os.path.join(log_dir, f"{bpName}.log")
23
24
  handler = RotatingFileHandler(log_path, maxBytes=maxBytes, backupCount=backupCount)
24
25
  handler.setLevel(logging.INFO)
25
26
 
@@ -225,27 +225,29 @@ def create_base_dir(directory=None, child=None):
225
225
 
226
226
 
227
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
- }
228
+ if path:
229
+ path= str(path)
230
+ basename = get_safe_basename(path)
231
+ filename, ext = get_safe_splitext(basename=basename)
232
+
233
+ dirname = get_safe_dirname(path)
234
+ dirbase = get_safe_basename(dirname)
235
+
236
+ parent_dirname = get_safe_dirname(dirname)
237
+ parent_dirbase = get_safe_basename(parent_dirname)
238
+
239
+ super_dirname = get_safe_dirname(parent_dirname)
240
+ super_dirbase = get_safe_basename(super_dirname)
241
+
242
+ return {"file_path":path,
243
+ "dirname": dirname,
244
+ "basename": basename,
245
+ "filename": filename,
246
+ "ext": ext,
247
+ "dirbase":dirbase,
248
+ "parent_dirname":parent_dirname,
249
+ "parent_dirbase":parent_dirbase,
250
+ "super_dirname":super_dirname,
251
+ "super_dirbase":super_dirbase
252
+ }
251
253
 
@@ -10,7 +10,37 @@ Designed for compatibility with the abstract_ ecosystem (e.g. abstract_utilities
10
10
  from .imports import *
11
11
  _BASE_DIR = get_caller_dir()
12
12
 
13
+ class PathOutsideBase(Exception):
14
+ pass
13
15
 
16
+ def safe_join_base(base: Union[str, Path], *parts: Union[str, Path], must_exist: bool = False) -> Path:
17
+ """
18
+ Join base with parts, normalize, and ensure the result lives under base.
19
+ Prevents '../' traversal and ignores leading slashes in parts.
20
+ """
21
+ base = Path(base).resolve(strict=True)
22
+ # Disallow absolute/drive-anchored parts by stripping their anchors before joining.
23
+ cleaned = []
24
+ for p in parts:
25
+ p = Path(p)
26
+ # Convert absolute to relative (security: we won't allow escaping base anyway)
27
+ if p.is_absolute():
28
+ p = Path(*p.parts[1:]) # drop leading '/'
29
+ cleaned.append(p)
30
+
31
+ # Build and resolve (non-strict so missing files are allowed unless must_exist=True)
32
+ target = (base.joinpath(*cleaned)).resolve(strict=False)
33
+
34
+ # Containment check (works even if target doesn't exist)
35
+ try:
36
+ target.relative_to(base)
37
+ except ValueError:
38
+ raise PathOutsideBase(f"{target} escapes base {base}")
39
+
40
+ if must_exist and not target.exists():
41
+ raise FileNotFoundError(target)
42
+
43
+ return target
14
44
  def safe_split(
15
45
  string: Any,
16
46
  char: Any,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstract_utilities
3
- Version: 0.2.2.540
3
+ Version: 0.2.2.593
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
@@ -28,13 +28,13 @@ abstract_utilities/type_utils.py,sha256=XaaAel9hUKeOzBqSCqJsIC6UiPMXUlhtmU77jOHz
28
28
  abstract_utilities/utils.py,sha256=SCa_-x_wsWrcokQXKwlhalxndxLn5Wg25-zqRdJUmag,185049
29
29
  abstract_utilities/class_utils/__init__.py,sha256=FbEui_psjSFhwwYkyKEGePbLVij8GZOm69nGBnx-Zfc,196
30
30
  abstract_utilities/class_utils/abstract_classes.py,sha256=2qgVUiI1O_7gNYJAk5eb32IaHtULIXo0OasLGb045E8,2470
31
- abstract_utilities/class_utils/caller_utils.py,sha256=6nJ91zgR30OXN1eI3QxaIc7L-Q5l66wy44o-EPxdxKM,939
31
+ abstract_utilities/class_utils/caller_utils.py,sha256=87BEuyEDJ_TmrQ-aI10w5QSMqy4YBVlcbjLhByDJzlo,1515
32
32
  abstract_utilities/class_utils/class_utils.py,sha256=An-pTLzvDb7WPB2JZoEm2MEDops5HrWPNlR6dco6h5g,4033
33
33
  abstract_utilities/class_utils/function_utils.py,sha256=sP_qSrWGhvzU2XoWGk9Np1B4WPUpzrSf1f0Ywu6bzt0,5775
34
- abstract_utilities/class_utils/global_utils.py,sha256=UkCS1nE561bVbxWsH-YQdFPSeZFMYXV7xg-DAtGUvrI,2204
34
+ abstract_utilities/class_utils/global_utils.py,sha256=dg1VhtMXGjuwlWLdvTZPaIJ_lmRiuKhL0Y7e6cREero,2257
35
35
  abstract_utilities/class_utils/module_utils.py,sha256=EumlwSc5PJZwqqcFEzMOCtsFJUHNuqEQAJGJlywuqyY,1516
36
36
  abstract_utilities/class_utils/imports/__init__.py,sha256=LVIEQXKiAmaKKWxPxfSJKe7JGWi4RDt4eatm_VG-WUI,44
37
- abstract_utilities/class_utils/imports/imports.py,sha256=QTYFFTdAl-RzHFEuFBOtYgzhzvVWAfO_5dagj4y01A8,83
37
+ abstract_utilities/class_utils/imports/imports.py,sha256=_F7UpONRaGnFNNUYH-baSv4H5NQXQOZeD-jW3pSoiiA,87
38
38
  abstract_utilities/class_utils/imports/utils.py,sha256=YEvWtaefXjuBiOiQsdYMazcVk85uwmntYIvZubfwKtU,1444
39
39
  abstract_utilities/cmd_utils/__init__.py,sha256=StTaaB9uzJexvr4TFGVqp_o0_s9T6rQlE3fOZtb_y_0,51
40
40
  abstract_utilities/cmd_utils/cmd_utils.py,sha256=n2DEo91J8LWuIJoSoDkWdApUY_8mHrUW3kjEjjF34Io,7876
@@ -55,7 +55,7 @@ abstract_utilities/directory_utils/imports/__init__.py,sha256=sUUAr6PY1SMtVjSTsb
55
55
  abstract_utilities/directory_utils/imports/imports.py,sha256=R7rno0pnzOU9XpzPhco0Wp9aIR73w_BGqCLdYpAHowI,32
56
56
  abstract_utilities/directory_utils/imports/module_imports.py,sha256=v9jovq8n9EOS9lmjRonYu4pdKEDS-mw4ejgtRrAGYX0,69
57
57
  abstract_utilities/directory_utils/src/__init__.py,sha256=cKlenOq451R2VqV86AD5ZEh1qGX5FfJwwsohgL0fQU4,104
58
- abstract_utilities/directory_utils/src/directory_utils.py,sha256=-8ngAEM3WEjoBlWiWAEEFp3ykZUHQpgoP01BT6d6ILs,2741
58
+ abstract_utilities/directory_utils/src/directory_utils.py,sha256=DkFeLY_AMNWm57xdupXj5aSq0alff0tSsBYJSEsp-Co,3240
59
59
  abstract_utilities/directory_utils/src/name_utils.py,sha256=Lz4RoeI9Ux6CC4I7UCZj7K6GoIm4HpYeRyjJl9b_6FY,1136
60
60
  abstract_utilities/directory_utils/src/size_utils.py,sha256=6huRLt-UGhukGfq-3KtBM5qH_SjNCaBzWVP9Vc-EiiU,1758
61
61
  abstract_utilities/directory_utils/src/utils.py,sha256=FIxL_HcIoL0PzE6G7_qcgCNcelxX33J76gzkXJo3VUg,3206
@@ -93,18 +93,30 @@ abstract_utilities/file_utils/imports/classes.py,sha256=zw16D_h5AxJiks4ydbqkWkXV
93
93
  abstract_utilities/file_utils/imports/clean_imps.py,sha256=DB_NEKR8YLla5qCkTMuNscMoTnipEm3nCWnaH8wqQDc,5287
94
94
  abstract_utilities/file_utils/imports/constants.py,sha256=uPsIYVRs1Rf0SQ4pRdAke-tuc28LtgaSHSDS4_seaMk,5997
95
95
  abstract_utilities/file_utils/imports/file_functions.py,sha256=brQha7TV9DaJe-hZSuHoFZBUI_45hxrGOIBTAojPWU8,297
96
- abstract_utilities/file_utils/imports/imports.py,sha256=L_WN8pkp-WshOrIqiPt9uvOWpCt6T_jWl6dE0Pb3MpE,1508
97
- abstract_utilities/file_utils/imports/module_imports.py,sha256=HGMP98bur0rMUieEqwoEW8KQDKe0Nath6qGSryiHPYo,366
98
- abstract_utilities/file_utils/src/__init__.py,sha256=7XmWjGAS3540cW1VynOIahT2sXl7wclKlySlbn5W4qY,228
96
+ abstract_utilities/file_utils/imports/imports.py,sha256=OQKsPec2raa55hxGUeTo0yDqzw-xBsshljFxG69rHk0,1504
97
+ abstract_utilities/file_utils/imports/module_imports.py,sha256=Mol48vj-m2204MCJgStUyAw8DbH-HFVs21rnGpx5HyI,420
98
+ abstract_utilities/file_utils/src/__init__.py,sha256=kgjkZ6IWDR_fQJTAQTinUBKUPLurekgdZ15ZT1wm20E,203
99
99
  abstract_utilities/file_utils/src/file_filters.py,sha256=n8efrxxJRRd6dT4E5PbGoyGGKe1LU1cYy-b443XhqAo,6355
100
- abstract_utilities/file_utils/src/file_reader.py,sha256=xrzHeybvsQ2FYcEoG_zoA0A7NsuKbBXk9iFoEOvKvNg,22349
100
+ abstract_utilities/file_utils/src/file_reader.py,sha256=9fZ2dEXFRYhJNUsUYQO3hGs2uWrHu2o4FacVhfhdefE,22320
101
101
  abstract_utilities/file_utils/src/file_utils.py,sha256=jgxMKeOAhYB2dxoqtudo4DKXctRE1TdcSbFcJmHcoiI,5766
102
102
  abstract_utilities/file_utils/src/filter_params.py,sha256=tO5PJvYpd3bHQejulDVGHandR-_8w3VPnjiCayrLW9g,6774
103
- abstract_utilities/file_utils/src/find_collect.py,sha256=mWR_MGJuCwOPybZ_yayP6u1ztNLX1b41M5yGpwAMyos,8585
103
+ abstract_utilities/file_utils/src/find_collect.py,sha256=wV6u9AsVeJxMCHwyf3NGvzA-QbA_OgLRfQUhjSrLjew,5796
104
+ abstract_utilities/file_utils/src/find_content.py,sha256=3UI8HsTHR0UnuqybeYW4rxHvER7-SK42_hNZih-LfUU,6806
104
105
  abstract_utilities/file_utils/src/initFunctionsGen.py,sha256=enTZA5hEYiBdOgM3yZoEEOyWaoxv66K1g-RrwIhPdIE,9692
105
106
  abstract_utilities/file_utils/src/map_utils.py,sha256=7GYntXbMz3vYrXWE-TxLuZRcQudlDA6vAWGErzVv1mk,1044
106
107
  abstract_utilities/file_utils/src/pdf_utils.py,sha256=F-xzOMFK7Um_7ODTqJ8MsdgAOyupi1ijuB1zHv76bUw,10336
107
108
  abstract_utilities/file_utils/src/type_checks.py,sha256=THVaH23DYdPYuj6baC-KJOfWDsfEqWqxsVa_N7e8aEI,2890
109
+ abstract_utilities/file_utils/src/file_filters/__init__.py,sha256=sHdfkZ6JrSlK8I6sNrzbGEUGz0ZUDTnFmXwaBMNxNLY,116
110
+ abstract_utilities/file_utils/src/file_filters/ensure_utils.py,sha256=JrJZPaoh9K5rD_DDA1r-az4lLgv_gcoBvKpUfNYAWdI,4268
111
+ abstract_utilities/file_utils/src/file_filters/filter_params.py,sha256=RazBjD0Zl4fjXvmXl0YUrqAacwKn8w1EUaqKqunTB9Y,2993
112
+ abstract_utilities/file_utils/src/file_filters/filter_utils.py,sha256=epi9V1OkYDAJb2O5LzkqQBtBoDtkCidGBvuXsUFCxaw,2916
113
+ abstract_utilities/file_utils/src/file_filters/predicate_utils.py,sha256=sy1QR701j-i35aJ9D8okGdoHqPZfFCpUnOPA8kQAPDw,4489
114
+ abstract_utilities/file_utils/src/reader_utils/__init__.py,sha256=GLUNbm2lK_2ZVk9EGQ6KNr5k1NR52tT3QBhzH93FqWo,112
115
+ abstract_utilities/file_utils/src/reader_utils/directory_reader.py,sha256=qHZuhwIsrVkJkFT8kFwzkCH-6kmR1hyr7TFAGg9vcOw,2366
116
+ abstract_utilities/file_utils/src/reader_utils/file_reader.py,sha256=FwDFIGCz5mMksvmLFJSkTLS2evBkUnN0kND7E_9b45g,22292
117
+ abstract_utilities/file_utils/src/reader_utils/file_readers.py,sha256=73x6ZXcgjwK6WgJsCOuo7JQg7dBqpaF1HYwIXt53Vak,14506
118
+ abstract_utilities/file_utils/src/reader_utils/imports.py,sha256=yjL38eBifT_hVAUrw3WnrKkxOVGgVKUmoYO48IBmTyw,595
119
+ abstract_utilities/file_utils/src/reader_utils/pdf_utils.py,sha256=D_wg8h-SapCvqinxRIKxMri1jWZNpr5jGvKq9EJePfY,10335
108
120
  abstract_utilities/file_utils (2)/__init__.py,sha256=R4TQV55ElLYuIZ6CwOpmER2q9EAOHCg_WERifSxuGAg,42
109
121
  abstract_utilities/file_utils (2)/imports/__init__.py,sha256=LVIEQXKiAmaKKWxPxfSJKe7JGWi4RDt4eatm_VG-WUI,44
110
122
  abstract_utilities/file_utils (2)/imports/constants.py,sha256=Bkw5vX5lp7BNJhw1fppunUTA0Cwjhomq1gIqzTsctos,5978
@@ -134,20 +146,22 @@ abstract_utilities/history_utils/imports/__init__.py,sha256=sUUAr6PY1SMtVjSTsb08
134
146
  abstract_utilities/history_utils/imports/imports.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
135
147
  abstract_utilities/history_utils/imports/module_imports.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
148
  abstract_utilities/import_utils/__init__.py,sha256=R4TQV55ElLYuIZ6CwOpmER2q9EAOHCg_WERifSxuGAg,42
149
+ abstract_utilities/import_utils/circular_import_finder.py,sha256=bs1O4NjSDrJ2cC8whPfZPouNDr1oxdMCFKUIfRyIEB4,8415
150
+ abstract_utilities/import_utils/circular_import_finder2.py,sha256=n6OFjiIsxxw2u_bf8wcQ81fzQzXhsD4VYWzOC9pDYXw,3869
137
151
  abstract_utilities/import_utils/imports/__init__.py,sha256=hiUo2P3qSWtgQHPdz5b2pe2AI3QXZlKJUSe2NUW5Cd4,99
138
152
  abstract_utilities/import_utils/imports/constants.py,sha256=UCSr0_KTu7atqanliMEv8u-XKjM4x0wdm4oySOK7APc,42
139
153
  abstract_utilities/import_utils/imports/imports.py,sha256=Qc9IoIDAJUuNOQJqZbOEqQfGI45EVhBBeuTm61K6PvI,143
140
- abstract_utilities/import_utils/imports/module_imports.py,sha256=xJf7Irg6BGHRz5Qd24ZakOkDLwv9Y3iUCCohdkKkPDs,308
154
+ abstract_utilities/import_utils/imports/module_imports.py,sha256=EMx9NyQLrQhguqfglkZXMGJovBli_jacFl5r1lIqAuY,486
141
155
  abstract_utilities/import_utils/imports/utils.py,sha256=wgTzs8SpOe8jVdw0cCPNypYCo2X-BreeJuNW3N3_d8Q,961
142
156
  abstract_utilities/import_utils/src/__init__.py,sha256=KPF8T-ZQae2st8EKR7qIAt1jENGlQkwHRJDC8uupm48,197
143
- abstract_utilities/import_utils/src/clean_imports.py,sha256=SNuqhuxrCal_456fSxLZfvOQ-9166pPbwzKpBwEQTTM,6107
144
- abstract_utilities/import_utils/src/dot_utils.py,sha256=TU_J5JiG0lfgHqiTaizh8MmbYnKprCpmuzz9fKwwHnk,2531
145
- abstract_utilities/import_utils/src/extract_utils.py,sha256=RF5cvM1ZXMhLip1CjoguXKJe9TuR_eXXOcfOBX2rfeM,1509
146
- abstract_utilities/import_utils/src/import_functions.py,sha256=VfGyHO1zkz0lgn8AIyX5sJkvLS3FHKbyKltUn1_c6pI,1710
157
+ abstract_utilities/import_utils/src/clean_imports.py,sha256=awpVFI-DMd8oOtx3JcUiz4xbOdhLE4X04ZwdMKR1mMU,10447
158
+ abstract_utilities/import_utils/src/dot_utils.py,sha256=oahEkVmexO-a2F3DKYQP5IrCvKJi9tjM_rjCImM_KCY,2793
159
+ abstract_utilities/import_utils/src/extract_utils.py,sha256=j3jTBqRxHqso5730usAUmtQ8bplLbMg3uLp4aDFrBaw,1685
160
+ abstract_utilities/import_utils/src/import_functions.py,sha256=HSRBh6XQU10ArRumh9Pm-YavBEb37ESCFHzMADydkik,3444
147
161
  abstract_utilities/import_utils/src/import_utils.py,sha256=NvryqWqsoyufTKYEoGgnorl9awRbgVWcOroHJza_srM,11827
148
162
  abstract_utilities/import_utils/src/package_utils.py,sha256=9qjBzIApDhV7kOdSRgZA9k-EncBNAg3mZZodgsiUNM4,5861
149
- abstract_utilities/import_utils/src/pkg_utils.py,sha256=9qjBzIApDhV7kOdSRgZA9k-EncBNAg3mZZodgsiUNM4,5861
150
- abstract_utilities/import_utils/src/sysroot_utils.py,sha256=uOiDrjaAvUROe_-XX1gvUPG_irn1z2-lHvFmmQOAOAU,1722
163
+ abstract_utilities/import_utils/src/pkg_utils.py,sha256=tSLaqFgitwswSuGhv-UnONT3rpri9DjK9ALt_0t5I30,7617
164
+ abstract_utilities/import_utils/src/sysroot_utils.py,sha256=hn_24Ug4hs0na84YI1suCUbhzBY1rAXEEIKZfmVHqRY,3689
151
165
  abstract_utilities/import_utils/src/package_utils/__init__.py,sha256=xV_XKJSLcXf4qRQSRseWLV_iqCqijPm4zvrs-tjNb2M,4618
152
166
  abstract_utilities/import_utils/src/package_utils/context_utils.py,sha256=8USSB6LR047k8fqge8J2jEM_StPEZ3cI1OKB3UENN8w,1177
153
167
  abstract_utilities/import_utils/src/package_utils/import_collectors.py,sha256=kueQead4CW6FGmHHiXpQilE8spbnt2mSK93dJ3bpeW4,2365
@@ -171,7 +185,7 @@ abstract_utilities/list_utils/imports/module_imports.py,sha256=47DEQpj8HBSa-_TIm
171
185
  abstract_utilities/log_utils/__init__.py,sha256=QzmY8RLyegJsq9Id06dHMiJAit5jxUzwhkY5-qgqxBU,141
172
186
  abstract_utilities/log_utils/abstractLogManager.py,sha256=EF4GkNbeCUh_RStN2Sf_PmxgyUmxeB5RJT7P-SHGZ3w,2823
173
187
  abstract_utilities/log_utils/call_response.py,sha256=E_QdT6R5REuXxeUuEXLwjUh8D0Lk0vair2ryRj4zocY,2518
174
- abstract_utilities/log_utils/log_file.py,sha256=L2kZnTcG7RDQHiD4tW9gd9-FKdaLuIwfHBFzB9-5Wv8,2346
188
+ abstract_utilities/log_utils/log_file.py,sha256=n6-Hb_3fVG3pZuuMiBrpFKW_pZB4W01y3j_w76dsbY0,2363
175
189
  abstract_utilities/log_utils/logger_callable.py,sha256=9STZtZrmUlXmakxhwmXNPpCSQC10aCTMNjXbhaWZ7_8,1629
176
190
  abstract_utilities/log_utils/imports/__init__.py,sha256=sUUAr6PY1SMtVjSTsb08dFU6mF-Ug4usnbh908q4Jq0,53
177
191
  abstract_utilities/log_utils/imports/imports.py,sha256=TGhATFGyhvovFFKYH-CbCnEQK0WCkmA1C5LqvmmzlrQ,189
@@ -188,7 +202,7 @@ abstract_utilities/parse_utils/imports/constants.py,sha256=PsYAIKIwg_-oxO_rgPrT5
188
202
  abstract_utilities/parse_utils/imports/imports.py,sha256=HSPmM0Y9GCFEIPbovNh79ayKjdNWMC-m-8QYa1JEpDk,76
189
203
  abstract_utilities/parse_utils/imports/module_imports.py,sha256=L9kTC04Cd2wsr6ly4mIr6D9UjgotXXW2K_v1Sds8Bcs,176
190
204
  abstract_utilities/path_utils/__init__.py,sha256=QiAyaEvejlL_IuPTCTocJonm9fTfWksQ_fakTL-LkjM,49
191
- abstract_utilities/path_utils/path_utils.py,sha256=JSovf-dIRw7KfnbL26mhyQuTn5FMJ1IFHWxV1WsMcLk,7550
205
+ abstract_utilities/path_utils/path_utils.py,sha256=UVjNbrCvXykptMKqdRZNnwOcHMtbl86MVoKbt5GTtq8,7697
192
206
  abstract_utilities/path_utils/imports/__init__.py,sha256=wBNCq8vHWdl7DleRNq0UK_-POl_mt2MY7MIC5VqZdaQ,54
193
207
  abstract_utilities/path_utils/imports/imports.py,sha256=R7rno0pnzOU9XpzPhco0Wp9aIR73w_BGqCLdYpAHowI,32
194
208
  abstract_utilities/path_utils/imports/module_imports.py,sha256=bPhfxar3bk4PjEfHdBK7Q6VSODpXyTXNLO2GKnHr2AE,376
@@ -216,7 +230,7 @@ abstract_utilities/robust_readers/import_utils/safe_import_utils.py,sha256=L-pwm
216
230
  abstract_utilities/robust_readers/import_utils/sysroot_utils.py,sha256=f8hj20VA9yvvYkqQ9ecuBlzmTOaT5G7ni14QesDtdL0,2098
217
231
  abstract_utilities/robust_readers/import_utils/utils.py,sha256=xyMObkdyvQAzAIv_kagLhFdkwSaPd4h0bCjTCYyfGhY,722
218
232
  abstract_utilities/safe_utils/__init__.py,sha256=zdcT3glpgIUxSM8rVVGfsOa64bFU-N6ePymM8ClfhB4,49
219
- abstract_utilities/safe_utils/safe_utils.py,sha256=CGHmuL7tVdMvhNm9VxZt0W7mw1RsXFOZL6DD3UKHkis,3770
233
+ abstract_utilities/safe_utils/safe_utils.py,sha256=Dr_GIhymtyrSBBbY9LpP_YEv5JZokqpkovDQNckpIgU,4905
220
234
  abstract_utilities/safe_utils/imports/__init__.py,sha256=OWJoTvkAvcn_dJ3ID271NHsSNdRzaA6_bxsLolyRByQ,54
221
235
  abstract_utilities/safe_utils/imports/imports.py,sha256=BfaNN4bs2pvgxVU8XQ_r0uDzxm4alw5H52bZHHcLNyc,46
222
236
  abstract_utilities/safe_utils/imports/module_imports.py,sha256=br8tLfyAtyaZshedkogMYBcEaq1Bne_Bz8eXckgD7xk,78
@@ -257,7 +271,7 @@ abstract_utilities/type_utils/imports/__init__.py,sha256=sUUAr6PY1SMtVjSTsb08dFU
257
271
  abstract_utilities/type_utils/imports/imports.py,sha256=C_ZAQO-y7R31BYxTuaHJCEQE9IZSU1JgCtdHNWxZKhY,77
258
272
  abstract_utilities/type_utils/imports/module_imports.py,sha256=sxF9YJQhUFUivgslnU-4Y5GG_J1IHR7kunUefIYZ0Lk,36
259
273
  imports/__init__.py,sha256=2PSEAwZY88J2NHt98XCO5drFNok5ctiJ8LE02kwABP4,944
260
- abstract_utilities-0.2.2.540.dist-info/METADATA,sha256=xTk_BtK_zou8yATf2iRhUdt9tiZwMWxQ0PxEX2iEOGA,28108
261
- abstract_utilities-0.2.2.540.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
262
- abstract_utilities-0.2.2.540.dist-info/top_level.txt,sha256=BF0GZ0xVFfN1K-hFIWPO3viNsOs1sSF86n1vHBg39FM,19
263
- abstract_utilities-0.2.2.540.dist-info/RECORD,,
274
+ abstract_utilities-0.2.2.593.dist-info/METADATA,sha256=ujHSjQgw1g2d6w-OHtsVHp6DyzdjiDkWUbd2000m1Cc,28108
275
+ abstract_utilities-0.2.2.593.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
276
+ abstract_utilities-0.2.2.593.dist-info/top_level.txt,sha256=BF0GZ0xVFfN1K-hFIWPO3viNsOs1sSF86n1vHBg39FM,19
277
+ abstract_utilities-0.2.2.593.dist-info/RECORD,,