abstract-utilities 0.2.2.463__tar.gz → 0.2.2.499__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.

Files changed (112) hide show
  1. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/PKG-INFO +1 -1
  2. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/setup.py +1 -1
  3. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/__init__.py +1 -2
  4. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/class_utils.py +0 -1
  5. {abstract_utilities-0.2.2.463/src/abstract_utilities/robust_reader/imports → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils}/__init__.py +1 -0
  6. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/__init__.py +1 -2
  7. abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/imports/clean_imps.py +158 -0
  8. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/constants.py +6 -0
  9. abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/imports/imports.py +65 -0
  10. abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/imports/module_imports.py +12 -0
  11. {abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/imports → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils}/module_imports.py +5 -3
  12. {abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/__init__.py +2 -0
  13. {abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/file_filters.py +14 -8
  14. {abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/file_reader.py +1 -1
  15. {abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/file_utils.py +85 -21
  16. abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src/filter_params.py +155 -0
  17. {abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/find_collect.py +1 -1
  18. abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/req.py → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src/initFunctionsGen.py +2 -45
  19. {abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/map_utils.py +1 -1
  20. {abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/pdf_utils.py +1 -1
  21. {abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/type_checks.py +36 -27
  22. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/__init__.py +2 -0
  23. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/__init__.py +4 -0
  24. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/constants.py +2 -0
  25. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/imports.py +4 -0
  26. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/module_imports.py +6 -0
  27. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/utils.py +30 -0
  28. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/__init__.py +7 -0
  29. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/clean_imports.py +122 -0
  30. {abstract_utilities-0.2.2.463/src/abstract_utilities/robust_readers/import_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src}/dot_utils.py +1 -4
  31. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_readers/import_utils/function_utils.py → abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/extract_utils.py +1 -4
  32. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/import_functions.py +46 -0
  33. {abstract_utilities-0.2.2.463/src/abstract_utilities/robust_readers/import_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src}/import_utils.py +14 -8
  34. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/__init__.py +139 -0
  35. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/context_utils.py +27 -0
  36. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/import_collectors.py +53 -0
  37. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/path_utils.py +28 -0
  38. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/safe_import.py +27 -0
  39. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils.py +140 -0
  40. {abstract_utilities-0.2.2.463/src/abstract_utilities/robust_readers/import_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src}/sysroot_utils.py +4 -17
  41. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/path_utils.py +1 -12
  42. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/read_write_utils.py +144 -19
  43. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/string_clean.py +40 -1
  44. abstract_utilities-0.2.2.499/src/abstract_utilities/string_utils.py +51 -0
  45. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/type_utils.py +25 -1
  46. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/PKG-INFO +1 -1
  47. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/SOURCES.txt +33 -30
  48. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/top_level.txt +1 -0
  49. abstract_utilities-0.2.2.499/src/imports/__init__.py +36 -0
  50. abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/__init__.py +0 -3
  51. abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/file_utils/filter_params.py +0 -89
  52. abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/file_utils/imports.py +0 -10
  53. abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/imports/file_functions.py +0 -10
  54. abstract_utilities-0.2.2.463/src/abstract_utilities/file_utils/imports/imports.py +0 -13
  55. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_reader/__init__.py +0 -2
  56. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_reader/file_reader2.py +0 -629
  57. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_reader/file_readers.py +0 -629
  58. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_reader/imports/imports.py +0 -12
  59. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_reader/sadfsad.py +0 -625
  60. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_readers/__init__.py +0 -2
  61. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_readers/import_utils/__init__.py +0 -6
  62. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_readers/import_utils/impot_functions.py +0 -70
  63. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_readers/import_utils/safe_import_utils.py +0 -68
  64. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_readers/import_utils/utils.py +0 -25
  65. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_readers/imports.py +0 -8
  66. abstract_utilities-0.2.2.463/src/abstract_utilities/robust_readers/initFuncGen.py +0 -151
  67. abstract_utilities-0.2.2.463/src/abstract_utilities/string_utils.py +0 -12
  68. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/README.md +0 -0
  69. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/pyproject.toml +0 -0
  70. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/setup.cfg +0 -0
  71. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/abstract_classes.py +0 -0
  72. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/__init__.py +0 -0
  73. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/cmd_utils.py +0 -0
  74. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/imports/__init__.py +0 -0
  75. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/imports/imports.py +0 -0
  76. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/pexpect_utils.py +0 -0
  77. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/user_utils.py +0 -0
  78. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/collator_utils.py +0 -0
  79. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/compare_utils/__init__.py +0 -0
  80. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/compare_utils/best_match.py +0 -0
  81. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/compare_utils/compare_utils.py +0 -0
  82. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/compare_utils/find_value.py +0 -0
  83. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/doit.py +0 -0
  84. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/dynimport.py +0 -0
  85. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/__init__.py +0 -0
  86. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/abstractEnv.py +0 -0
  87. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/envy_it.py +0 -0
  88. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/imports/__init__.py +0 -0
  89. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/imports/imports.py +0 -0
  90. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/imports/utils.py +0 -0
  91. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/error_utils.py +0 -0
  92. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/classes.py +0 -0
  93. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/global_utils.py +0 -0
  94. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/hash_utils.py +0 -0
  95. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/history_utils.py +0 -0
  96. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/json_utils.py +0 -0
  97. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/list_utils.py +0 -0
  98. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/log_utils.py +0 -0
  99. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/math_utils.py +0 -0
  100. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/parse_utils.py +0 -0
  101. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/safe_utils.py +0 -0
  102. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/__init__.py +0 -0
  103. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/classes.py +0 -0
  104. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/imports.py +0 -0
  105. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/pexpect_utils.py +0 -0
  106. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/utils.py +0 -0
  107. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/tetsts.py +0 -0
  108. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/thread_utils.py +0 -0
  109. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/time_utils.py +0 -0
  110. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities/utils.py +0 -0
  111. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/dependency_links.txt +0 -0
  112. {abstract_utilities-0.2.2.463 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/requires.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstract_utilities
3
- Version: 0.2.2.463
3
+ Version: 0.2.2.499
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.463',
7
+ version='0.2.2.499',
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.',
@@ -4,7 +4,6 @@ from datetime import datetime
4
4
  from typing import *
5
5
  from .hash_utils import *
6
6
  ##from .dynimport import get_abstract_import,import_symbols_to_parent,call_for_all_tabs
7
- from .robust_readers import *
8
7
  from .dynimport import get_abstract_import
9
8
  from .json_utils import (unified_json_loader,
10
9
  find_keys,
@@ -116,10 +115,10 @@ from .parse_utils import (num_tokens_from_string,
116
115
 
117
116
  from .log_utils import get_caller_info,get_logFile,print_or_log,get_json_call_response,initialize_call_log
118
117
  from .error_utils import try_func
119
- from .class_utils import alias,get_class_inputs,get_set_attr
120
118
  from .ssh_utils import *
121
119
  from .env_utils import *
122
120
  from .path_utils import *
123
121
  from .file_utils import *
124
122
  from .file_utils import call_for_all_tabs
125
123
  from .string_utils import *
124
+ from .class_utils import alias,get_class_inputs,get_set_attr,get_caller_path,get_caller_dir
@@ -405,4 +405,3 @@ def get_caller_dir(i: Optional[int] = None) -> str:
405
405
  abspath = get_caller_path(depth + 1)
406
406
  return os.path.dirname(abspath)
407
407
 
408
-
@@ -1,5 +1,4 @@
1
1
  from .constants import *
2
- from .imports import *
3
2
  from .module_imports import *
4
3
  from .classes import *
5
- from .file_functions import *
4
+ from .imports import *
@@ -0,0 +1,158 @@
1
+ from abstract_utilities import read_from_file, eatAll
2
+ import os, sys, re, inspect
3
+ from typing import *
4
+
5
+ # ============================================================
6
+ # Constants
7
+ # ============================================================
8
+ import_tag = 'import '
9
+ from_tag = 'from '
10
+
11
+ # ============================================================
12
+ # Helpers
13
+ # ============================================================
14
+ def get_caller_path(i=None):
15
+ i = i or 1
16
+ frame = inspect.stack()[i]
17
+ return os.path.abspath(frame.filename)
18
+
19
+ def make_list(obj: any) -> list:
20
+ if isinstance(obj, str) and ',' in obj:
21
+ obj = obj.split(',')
22
+ if isinstance(obj, (set, tuple)):
23
+ return list(obj)
24
+ if isinstance(obj, list):
25
+ return obj
26
+ return [obj]
27
+
28
+ def eatElse(stringObj, chars=None):
29
+ chars = make_list(chars or []) + list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_')
30
+ while stringObj:
31
+ if stringObj and stringObj[0] not in chars:
32
+ stringObj = stringObj[1:]
33
+ continue
34
+ if stringObj and stringObj[-1] not in chars:
35
+ stringObj = stringObj[:-1]
36
+ continue
37
+ break
38
+ return stringObj
39
+
40
+ def clean_line(line):
41
+ return eatAll(line, [' ', '', '\t', '\n'])
42
+
43
+ def is_line_import(line):
44
+ return bool(line and line.startswith(import_tag) and 'from ' not in line)
45
+
46
+ def is_line_from_import(line):
47
+ return bool(line and line.startswith(from_tag) and ' import ' in line)
48
+
49
+ def is_from_group_start(line):
50
+ return bool(line and line.startswith(from_tag) and 'import' in line and '(' in line and not line.rstrip().endswith(')'))
51
+
52
+ def is_from_group_end(line):
53
+ return bool(line and ')' in line)
54
+
55
+ def clean_imports(imports):
56
+ if isinstance(imports, str):
57
+ imports = imports.split(',')
58
+ return [eatElse(imp.strip()) for imp in imports if imp.strip()]
59
+
60
+ # ============================================================
61
+ # Combine lone import statements
62
+ # ============================================================
63
+ def combine_lone_imports(text=None, file_path=None):
64
+ text = text or ''
65
+ if file_path and os.path.isfile(file_path):
66
+ text += read_from_file(file_path)
67
+ lines = text.split('\n')
68
+
69
+ cleaned_import_list = []
70
+ nu_lines = []
71
+ j = None
72
+
73
+ for i, line in enumerate(lines):
74
+ if is_line_import(line):
75
+ if j is None:
76
+ nu_lines.append(import_tag)
77
+ j = i
78
+ cleaned_import_list += clean_imports(line.split(import_tag)[1])
79
+ else:
80
+ nu_lines.append(line)
81
+
82
+ if j is None:
83
+ return '\n'.join(nu_lines)
84
+ cleaned_import_list = sorted(set(cleaned_import_list))
85
+ nu_lines[j] += ', '.join(cleaned_import_list)
86
+ return '\n'.join(nu_lines)
87
+
88
+ # ============================================================
89
+ # Merge repeated 'from pkg import ...' (1-line only)
90
+ # Preserve multi-line grouped imports
91
+ # ============================================================
92
+ def merge_from_import_groups(text=None, file_path=None):
93
+ if file_path and os.path.isfile(file_path):
94
+ text = read_from_file(file_path)
95
+ text = text or ''
96
+ lines = text.split('\n')
97
+
98
+ pkg_to_imports: Dict[str, Set[str]] = {}
99
+ pkg_to_line_index: Dict[str, int] = {}
100
+ nu_lines: List[str] = []
101
+
102
+ in_group = False
103
+ for i, line in enumerate(lines):
104
+ stripped = line.strip()
105
+
106
+ # preserve multi-line grouped blocks intact
107
+ if in_group:
108
+ nu_lines.append(line)
109
+ if is_from_group_end(line):
110
+ in_group = False
111
+ continue
112
+
113
+ if is_from_group_start(line):
114
+ in_group = True
115
+ nu_lines.append(line)
116
+ continue
117
+
118
+ if is_line_from_import(line):
119
+ try:
120
+ pkg_part, imps_part = line.split(' import ', 1)
121
+ pkg_name = pkg_part.replace('from ', '').strip()
122
+ imps = clean_imports(imps_part)
123
+ except Exception:
124
+ nu_lines.append(line)
125
+ continue
126
+
127
+ if pkg_name not in pkg_to_imports:
128
+ pkg_to_imports[pkg_name] = set(imps)
129
+ pkg_to_line_index[pkg_name] = len(nu_lines)
130
+ nu_lines.append(line)
131
+ else:
132
+ pkg_to_imports[pkg_name].update(imps)
133
+ else:
134
+ nu_lines.append(line)
135
+
136
+ # Rewrite first occurrences
137
+ for pkg, idx in pkg_to_line_index.items():
138
+ all_imps = sorted(pkg_to_imports[pkg])
139
+ nu_lines[idx] = f"from {pkg} import {', '.join(all_imps)}"
140
+
141
+ return '\n'.join(nu_lines)
142
+
143
+ # ============================================================
144
+ # Pipeline
145
+ # ============================================================
146
+ def clean_imports_pipeline(path: str):
147
+ raw = read_from_file(path)
148
+ step1 = combine_lone_imports(text=raw)
149
+ step2 = merge_from_import_groups(text=step1)
150
+ return step2
151
+
152
+ # ============================================================
153
+ # Standalone Run
154
+ # ============================================================
155
+ if __name__ == "__main__":
156
+ abs_path = "/home/flerb/Documents/pythonTools/modules/src/modules/abstract_utilities/src/abstract_utilities/file_utils/imports/imports.py"
157
+ cleaned = clean_imports_pipeline(abs_path)
158
+ print(cleaned)
@@ -4,8 +4,11 @@ from .module_imports import *
4
4
  class ScanConfig:
5
5
  allowed_exts: Set[str]
6
6
  unallowed_exts: Set[str]
7
+ allowed_types: Set[str]
7
8
  exclude_types: Set[str]
9
+ allowed_dirs: List[str] = field(default_factory=list)
8
10
  exclude_dirs: List[str] = field(default_factory=list)
11
+ allowed_patterns: List[str] = field(default_factory=list)
9
12
  exclude_patterns: List[str] = field(default_factory=list)
10
13
  DEFAULT_ALLOWED_EXTS: Set[str] = {
11
14
  ".py", ".pyw", # python
@@ -37,3 +40,6 @@ DEFAULT_EXCLUDE_PATTERNS: Set[str] = {
37
40
  REMOTE_RE = re.compile(r"^(?P<host>[^:\s]+@[^:\s]+):(?P<path>/.*)$")
38
41
  AllowedPredicate = Optional[Callable[[str], bool]]
39
42
  DEFAULT_EXCLUDE_FILE_PATTERNS=DEFAULT_EXCLUDE_PATTERNS
43
+ DEFAULT_ALLOWED_PATTENS="*"
44
+ DEFAULT_ALLOWED_DIRS="*"
45
+ DEFAULT_ALLOWED_TYPES="*"
@@ -0,0 +1,65 @@
1
+ # ============================================================
2
+ # abstract_utilities/imports/imports.py
3
+ # Global imports hub — everything imported here will be
4
+ # automatically available to any module that does:
5
+ # from ..imports import *
6
+ # ============================================================
7
+
8
+
9
+ import os,re
10
+ import sys, importlib,os
11
+ import sys, importlib, os, inspect
12
+ from pathlib import Path
13
+ import os,sys
14
+
15
+
16
+
17
+ from typing import *
18
+ import re
19
+
20
+ from typing import *
21
+ from types import MethodType
22
+ import os,re, sys, importlib, inspect, os, importlib.util, hashlib
23
+ import os,tempfile,shutil,logging,ezodf,fnmatch,pytesseract,pdfplumber
24
+ import pandas as pd
25
+ import geopandas as gpd
26
+ from datetime import datetime
27
+
28
+ from typing import *
29
+ from werkzeug.utils import secure_filename
30
+ from werkzeug.datastructures import FileStorage
31
+ from pdf2image import convert_from_path # only used for OCR fallback
32
+ # ---- Core standard library modules -------------------------
33
+ import os, sys, re, shlex, glob, platform, textwrap, subprocess, inspect, json, time
34
+ import tempfile, shutil, logging, pathlib, fnmatch, importlib, importlib.util, types
35
+
36
+ from datetime import datetime
37
+ from types import ModuleType
38
+
39
+ # ---- Dataclasses and typing --------------------------------
40
+ from dataclasses import dataclass, field
41
+ from typing import (
42
+ Any, Optional, List, Dict, Set, Tuple,
43
+ Iterable, Callable, Literal, Union, TypeVar
44
+ )
45
+
46
+ # ---- Common 3rd-party dependencies --------------------------
47
+ import pandas as pd
48
+ import geopandas as gpd
49
+ import pytesseract
50
+ import pdfplumber
51
+ import PyPDF2
52
+ import ezodf
53
+ from pdf2image import convert_from_path
54
+ from werkzeug.utils import secure_filename
55
+ from werkzeug.datastructures import FileStorage
56
+
57
+ # ---- Helpers ------------------------------------------------
58
+ import textwrap as tw
59
+ from pprint import pprint
60
+
61
+ # ============================================================
62
+ # AUTO-EXPORT ALL NON-PRIVATE NAMES
63
+ # ============================================================
64
+ __all__ = [name for name in globals() if not name.startswith("_")]
65
+
@@ -0,0 +1,12 @@
1
+
2
+ from ...string_clean import eatAll
3
+ from ...list_utils import make_list
4
+ from ...type_utils import get_media_exts, is_media_type, MIME_TYPES, is_str
5
+ from ...ssh_utils import *
6
+ from ...env_utils import *
7
+ from ...read_write_utils import read_from_file,write_to_file
8
+ from ...abstract_classes import SingletonMeta
9
+ from ...log_utils import get_logFile
10
+ from ...class_utils import get_caller, get_caller_path, get_caller_dir
11
+ from ...ssh_utils import run_cmd
12
+ from ...string_utils import get_from_kwargs
@@ -1,10 +1,12 @@
1
+ from .imports import *
1
2
  from ...string_clean import eatAll
2
3
  from ...list_utils import make_list
3
- from ...type_utils import get_media_exts, is_media_type,MIME_TYPES,is_str
4
+ from ...type_utils import get_media_exts, is_media_type, MIME_TYPES, is_str
4
5
  from ...ssh_utils import *
5
6
  from ...env_utils import *
6
7
  from ...read_write_utils import *
7
8
  from ...abstract_classes import SingletonMeta
8
9
  from ...log_utils import get_logFile
9
- from ...class_utils import get_caller,get_caller_path,get_caller_dir
10
- from ...ssh_utils import run_cmd
10
+ from ...class_utils import get_caller, get_caller_path, get_caller_dir
11
+ from ...ssh_utils import run_cmd
12
+
@@ -6,3 +6,5 @@ from .pdf_utils import *
6
6
  from .file_reader import *
7
7
  from .find_collect import *
8
8
  from .type_checks import *
9
+ from .initFunctionsGen import call_for_all_tabs,get_for_all_tabs
10
+
@@ -1,4 +1,4 @@
1
- from .imports import *
1
+ from ..imports import *
2
2
  from .filter_params import *
3
3
  from .file_utils import *
4
4
  ##from abstract_utilities import make_list,get_media_exts, is_media_type
@@ -8,21 +8,27 @@ def collect_filepaths(
8
8
  cfg: ScanConfig=None,
9
9
  allowed_exts: Optional[Set[str]] = False,
10
10
  unallowed_exts: Optional[Set[str]] = False,
11
+ allowed_types: Optional[Set[str]] = False,
11
12
  exclude_types: Optional[Set[str]] = False,
13
+ allowed_dirs: Optional[List[str]] = False,
12
14
  exclude_dirs: Optional[List[str]] = False,
15
+ allowed_patterns: Optional[List[str]] = False,
13
16
  exclude_patterns: Optional[List[str]] = False,
14
17
  add=False,
15
18
  allowed: Optional[Callable[[str], bool]] = None,
16
19
  **kwargs
17
20
  ) -> List[str]:
18
21
  cfg = cfg or define_defaults(
19
- allowed_exts=allowed_exts,
20
- unallowed_exts=unallowed_exts,
21
- exclude_types=exclude_types,
22
- exclude_dirs=exclude_dirs,
23
- exclude_patterns=exclude_patterns,
24
- add = add
25
- )
22
+ allowed_exts = allowed_exts,
23
+ unallowed_exts = unallowed_exts,
24
+ allowed_types = allowed_types,
25
+ exclude_types = exclude_types,
26
+ allowed_dirs = allowed_dirs,
27
+ exclude_dirs = exclude_dirs,
28
+ allowed_patterns = allowed_patterns,
29
+ exclude_patterns = exclude_patterns,
30
+ add = add
31
+ )
26
32
  allowed = allowed or make_allowed_predicate(cfg)
27
33
  directories = make_list(directory)
28
34
  roots = [r for r in directories if r]
@@ -1,5 +1,5 @@
1
1
  # file_reader.py
2
- from .imports import *
2
+ from ..imports import *
3
3
  # -------- Public API drop-ins that mirror your originals --------
4
4
  from .filter_params import *
5
5
  from .file_filters import *
@@ -1,9 +1,6 @@
1
- from pathlib import Path
2
- from typing import *
3
- import fnmatch, os, glob
4
- from .filter_params import *
5
- from .imports import *
6
1
 
2
+ from .filter_params import *
3
+ from ..imports import *
7
4
  ##from abstract_utilities import make_list,get_media_exts, is_media_type
8
5
  def get_allowed_predicate(allowed=None):
9
6
  if allowed != False:
@@ -60,8 +57,11 @@ def get_files_and_dirs(
60
57
  cfg: Optional["ScanConfig"] = None,
61
58
  allowed_exts: Optional[Set[str]] = False,
62
59
  unallowed_exts: Optional[Set[str]] = False,
60
+ allowed_types: Optional[Set[str]] = False,
63
61
  exclude_types: Optional[Set[str]] = False,
62
+ allowed_dirs: Optional[List[str]] = False,
64
63
  exclude_dirs: Optional[List[str]] = False,
64
+ allowed_patterns: Optional[List[str]] = False,
65
65
  exclude_patterns: Optional[List[str]] = False,
66
66
  add = False,
67
67
  recursive: bool = True,
@@ -69,11 +69,14 @@ def get_files_and_dirs(
69
69
  **kwargs
70
70
  ):
71
71
  cfg = cfg or define_defaults(
72
- allowed_exts=allowed_exts,
73
- unallowed_exts=unallowed_exts,
74
- exclude_types=exclude_types,
75
- exclude_dirs=exclude_dirs,
76
- exclude_patterns=exclude_patterns,
72
+ allowed_exts = allowed_exts,
73
+ unallowed_exts = unallowed_exts,
74
+ allowed_types = allowed_types,
75
+ exclude_types = exclude_types,
76
+ allowed_dirs = allowed_dirs,
77
+ exclude_dirs = exclude_dirs,
78
+ allowed_patterns = allowed_patterns,
79
+ exclude_patterns = exclude_patterns,
77
80
  add=add
78
81
  )
79
82
  allowed = make_allowed_predicate(cfg)
@@ -90,48 +93,109 @@ def get_files_and_dirs(
90
93
  files = get_allowed_files(items,allowed=allowed)
91
94
  return dirs,files
92
95
  def make_allowed_predicate(cfg: ScanConfig) -> Callable[[str], bool]:
96
+ """
97
+ Build a predicate that returns True if a given path is considered allowed
98
+ under the given ScanConfig. Applies allowed_* and exclude_* logic symmetrically.
99
+ """
93
100
  def allowed(path: str) -> bool:
94
101
  p = Path(path)
95
102
  name = p.name.lower()
96
103
  path_str = str(p).lower()
97
- # A) directories
104
+
105
+ # --------------------
106
+ # A) directory filters
107
+ # --------------------
98
108
  if cfg.exclude_dirs:
99
109
  for dpat in cfg.exclude_dirs:
100
- if dpat in path_str or fnmatch.fnmatch(name, dpat.lower()):
101
- if p.is_dir() or dpat in path_str:
110
+ dpat_l = dpat.lower()
111
+ if dpat_l in path_str or fnmatch.fnmatch(name, dpat_l):
112
+ if p.is_dir() or dpat_l in path_str:
102
113
  return False
103
114
 
115
+ if cfg.allowed_dirs and cfg.allowed_dirs != ["*"]:
116
+ # must be in at least one allowed dir
117
+ if not any(
118
+ fnmatch.fnmatch(path_str, f"*{dpat.lower()}*") for dpat in cfg.allowed_dirs
119
+ ):
120
+ return False
121
+
122
+ # --------------------
123
+ # B) pattern filters
124
+ # --------------------
125
+ if cfg.allowed_patterns and cfg.allowed_patterns != ["*"]:
126
+ if not any(fnmatch.fnmatch(name, pat.lower()) for pat in cfg.allowed_patterns):
127
+ return False
128
+
104
129
  if cfg.exclude_patterns:
105
- # B) filename patterns
106
130
  for pat in cfg.exclude_patterns:
107
131
  if fnmatch.fnmatch(name, pat.lower()):
108
132
  return False
109
133
 
110
- # C) extension gates
134
+ # --------------------
135
+ # C) extension filters
136
+ # --------------------
111
137
  if p.is_file():
112
138
  ext = p.suffix.lower()
113
- if (cfg.allowed_exts and ext not in cfg.allowed_exts) or (cfg.unallowed_exts and ext in cfg.unallowed_exts):
139
+ if cfg.allowed_exts and ext not in cfg.allowed_exts:
140
+ return False
141
+ if cfg.unallowed_exts and ext in cfg.unallowed_exts:
142
+ return False
143
+
144
+ # --------------------
145
+ # D) type filters (optional)
146
+ # --------------------
147
+ if cfg.allowed_types and cfg.allowed_types != {"*"}:
148
+ if not any(t in path_str for t in cfg.allowed_types):
114
149
  return False
150
+ if cfg.exclude_types and cfg.exclude_types != {"*"}:
151
+ if any(t in path_str for t in cfg.exclude_types):
152
+ return False
153
+
115
154
  return True
155
+
116
156
  return allowed
157
+ def correct_kwargs(**kwargs):
158
+ for key,values in kwargs.items():
159
+ if key.startswith('excluded'):
160
+ post_fix = key.split('_')[-1]
161
+ correct_key = f'exclude_{post_fix}'
162
+ correct_vals = kwargs.get(correct_key)
163
+ kwargs[correct_key]=combine_params(correct_vals,values)
164
+ del kwargs[key]
165
+
117
166
  def collect_filepaths(
118
167
  directory: List[str],
119
168
  cfg: ScanConfig=None,
120
169
  allowed_exts: Optional[Set[str]] = False,
121
170
  unallowed_exts: Optional[Set[str]] = False,
171
+ allowed_types: Optional[Set[str]] = False,
122
172
  exclude_types: Optional[Set[str]] = False,
173
+ allowed_dirs: Optional[List[str]] = False,
123
174
  exclude_dirs: Optional[List[str]] = False,
175
+ allowed_patterns: Optional[List[str]] = False,
124
176
  exclude_patterns: Optional[List[str]] = False,
125
177
  add=False,
126
178
  allowed: Optional[Callable[[str], bool]] = None,
127
179
  **kwargs
128
180
  ) -> List[str]:
181
+ kwargs = correct_kwargs(allowed_exts = allowed_exts,
182
+ unallowed_exts = unallowed_exts,
183
+ allowed_types = allowed_types,
184
+ exclude_types = exclude_types,
185
+ allowed_dirs = allowed_dirs,
186
+ exclude_dirs = exclude_dirs,
187
+ allowed_patterns = allowed_patterns,
188
+ exclude_patterns = exclude_patterns,
189
+ **kwargs)
129
190
  cfg = cfg or define_defaults(
130
- allowed_exts=allowed_exts,
131
- unallowed_exts=unallowed_exts,
132
- exclude_types=exclude_types,
133
- exclude_dirs=exclude_dirs,
134
- exclude_patterns=exclude_patterns,
191
+ allowed_exts = allowed_exts,
192
+ unallowed_exts = unallowed_exts,
193
+ allowed_types = allowed_types,
194
+ exclude_types = exclude_types,
195
+ allowed_dirs = allowed_dirs,
196
+ exclude_dirs = exclude_dirs,
197
+ allowed_patterns = allowed_patterns,
198
+ exclude_patterns = exclude_patterns,
135
199
  add = add
136
200
  )
137
201
  allowed = allowed or make_allowed_predicate(cfg)