abstract-utilities 0.2.2.563__tar.gz → 0.2.2.613__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.
Files changed (202) hide show
  1. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/PKG-INFO +1 -1
  2. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/setup.py +1 -1
  3. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/class_utils/caller_utils.py +19 -0
  4. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/class_utils/global_utils.py +35 -20
  5. abstract_utilities-0.2.2.613/src/abstract_utilities/class_utils/imports/imports.py +2 -0
  6. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/directory_utils/src/directory_utils.py +19 -1
  7. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/imports/module_imports.py +1 -1
  8. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/file_filters/ensure_utils.py +3 -1
  9. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/find_collect.py +9 -4
  10. abstract_utilities-0.2.2.563/src/abstract_utilities/file_utils (2)/src/initFunctionsGen.py → abstract_utilities-0.2.2.613/src/abstract_utilities/file_utils/src/initFunctionsGen.py +36 -28
  11. abstract_utilities-0.2.2.563/src/abstract_utilities/file_utils/src/initFunctionsGen.py → abstract_utilities-0.2.2.613/src/abstract_utilities/file_utils/src/initFunctionsGens.py +4 -4
  12. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/imports/imports/imports.py +1 -1
  13. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/imports/utils/filter_utils.py +1 -2
  14. abstract_utilities-0.2.2.613/src/abstract_utilities/import_utils/imports/module_imports.py +8 -0
  15. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/src/dot_utils.py +11 -0
  16. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/src/extract_utils.py +4 -0
  17. abstract_utilities-0.2.2.613/src/abstract_utilities/import_utils/src/import_functions.py +110 -0
  18. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/src/pkg_utils.py +1 -30
  19. abstract_utilities-0.2.2.613/src/abstract_utilities/import_utils/src/sysroot_utils.py +112 -0
  20. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/log_utils/log_file.py +3 -2
  21. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities.egg-info/PKG-INFO +1 -1
  22. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities.egg-info/SOURCES.txt +1 -1
  23. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/tests/test.py +1 -1
  24. abstract_utilities-0.2.2.563/src/abstract_utilities/class_utils/imports/imports.py +0 -2
  25. abstract_utilities-0.2.2.563/src/abstract_utilities/import_utils/imports/module_imports.py +0 -7
  26. abstract_utilities-0.2.2.563/src/abstract_utilities/import_utils/src/import_functions.py +0 -53
  27. abstract_utilities-0.2.2.563/src/abstract_utilities/import_utils/src/sysroot_utils.py +0 -57
  28. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/README.md +0 -0
  29. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/pyproject.toml +0 -0
  30. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/setup.cfg +0 -0
  31. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/__init__.py +0 -0
  32. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/class_utils/__init__.py +0 -0
  33. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/class_utils/abstract_classes.py +0 -0
  34. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/class_utils/class_utils.py +0 -0
  35. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/class_utils/function_utils.py +0 -0
  36. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/class_utils/imports/__init__.py +0 -0
  37. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/class_utils/imports/utils.py +0 -0
  38. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/class_utils/module_utils.py +0 -0
  39. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/compare_utils/__init__.py +0 -0
  40. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/compare_utils/best_match.py +0 -0
  41. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/compare_utils/compare_utils.py +0 -0
  42. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/compare_utils/find_value.py +0 -0
  43. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/directory_utils/__init__.py +0 -0
  44. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/directory_utils/imports/__init__.py +0 -0
  45. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/directory_utils/imports/imports.py +0 -0
  46. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/directory_utils/imports/module_imports.py +0 -0
  47. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/directory_utils/src/__init__.py +0 -0
  48. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/directory_utils/src/name_utils.py +0 -0
  49. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/directory_utils/src/size_utils.py +0 -0
  50. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/directory_utils/src/utils.py +0 -0
  51. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/env_utils/__init__.py +0 -0
  52. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/env_utils/abstractEnv.py +0 -0
  53. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/env_utils/envy_it.py +0 -0
  54. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/env_utils/imports/__init__.py +0 -0
  55. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/env_utils/imports/imports.py +0 -0
  56. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/env_utils/imports/utils.py +0 -0
  57. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/error_utils/__init__.py +0 -0
  58. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/error_utils/error_utils.py +0 -0
  59. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/error_utils/imports/__init__.py +0 -0
  60. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/error_utils/imports/imports.py +0 -0
  61. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/error_utils/imports/module_imports.py +0 -0
  62. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/__init__.py +0 -0
  63. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/imports/__init__.py +0 -0
  64. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/imports/classes.py +0 -0
  65. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/imports/clean_imps.py +0 -0
  66. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/imports/constants.py +0 -0
  67. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/imports/imports.py +0 -0
  68. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/__init__.py +0 -0
  69. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/file_filters/__init__.py +0 -0
  70. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/file_filters/filter_params.py +0 -0
  71. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/file_filters/filter_utils.py +0 -0
  72. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/file_filters/predicate_utils.py +0 -0
  73. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/find_content.py +0 -0
  74. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/map_utils.py +0 -0
  75. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/reader_utils/__init__.py +0 -0
  76. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/reader_utils/directory_reader.py +0 -0
  77. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/reader_utils/file_reader.py +0 -0
  78. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/reader_utils/file_readers.py +0 -0
  79. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/reader_utils/imports.py +0 -0
  80. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils/src/reader_utils/pdf_utils.py +0 -0
  81. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/__init__.py +0 -0
  82. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/imports/__init__.py +0 -0
  83. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/imports/constants.py +0 -0
  84. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/imports/imports/__init__.py +0 -0
  85. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/imports/imports/constants.py +0 -0
  86. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/imports/imports/module_imports.py +0 -0
  87. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/imports/utils/__init__.py +0 -0
  88. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/imports/utils/classes.py +0 -0
  89. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/imports/utils/clean_imps.py +0 -0
  90. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/src/__init__.py +0 -0
  91. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/src/file_filters.py +0 -0
  92. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/src/file_reader.py +0 -0
  93. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/src/find_collect.py +0 -0
  94. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/src/map_utils.py +0 -0
  95. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/file_utils (2)/src/pdf_utils.py +0 -0
  96. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/hash_utils/__init__.py +0 -0
  97. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/hash_utils/hash_utils.py +0 -0
  98. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/hash_utils/imports/__init__.py +0 -0
  99. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/hash_utils/imports/imports.py +0 -0
  100. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/hash_utils/imports/module_imports.py +0 -0
  101. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/history_utils/__init__.py +0 -0
  102. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/history_utils/history_utils.py +0 -0
  103. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/history_utils/imports/__init__.py +0 -0
  104. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/history_utils/imports/imports.py +0 -0
  105. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/history_utils/imports/module_imports.py +0 -0
  106. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/__init__.py +0 -0
  107. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/circular_import_finder.py +0 -0
  108. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/circular_import_finder2.py +0 -0
  109. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/imports/__init__.py +0 -0
  110. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/imports/constants.py +0 -0
  111. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/imports/imports.py +0 -0
  112. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/imports/utils.py +0 -0
  113. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/src/__init__.py +0 -0
  114. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/src/clean_imports.py +0 -0
  115. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/src/import_utils.py +0 -0
  116. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/src/package_utils/__init__.py +0 -0
  117. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/src/package_utils/context_utils.py +0 -0
  118. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/src/package_utils/import_collectors.py +0 -0
  119. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/src/package_utils/path_utils.py +0 -0
  120. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/import_utils/src/package_utils/safe_import.py +0 -0
  121. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/imports.py +0 -0
  122. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/json_utils/__init__.py +0 -0
  123. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/json_utils/imports/__init__.py +0 -0
  124. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/json_utils/imports/imports.py +0 -0
  125. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/json_utils/imports/module_imports.py +0 -0
  126. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/json_utils/json_utils.py +0 -0
  127. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/list_utils/__init__.py +0 -0
  128. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/list_utils/imports/__init__.py +0 -0
  129. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/list_utils/imports/imports.py +0 -0
  130. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/list_utils/imports/module_imports.py +0 -0
  131. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/list_utils/list_utils.py +0 -0
  132. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/log_utils/__init__.py +0 -0
  133. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/log_utils/abstractLogManager.py +0 -0
  134. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/log_utils/call_response.py +0 -0
  135. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/log_utils/imports/__init__.py +0 -0
  136. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/log_utils/imports/imports.py +0 -0
  137. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/log_utils/imports/module_imports.py +0 -0
  138. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/log_utils/logger_callable.py +0 -0
  139. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/math_utils/__init__.py +0 -0
  140. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/math_utils/imports/__init__.py +0 -0
  141. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/math_utils/imports/imports.py +0 -0
  142. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/math_utils/imports/module_imports.py +0 -0
  143. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/math_utils/math_utils.py +0 -0
  144. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/parse_utils/__init__.py +0 -0
  145. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/parse_utils/imports/__init__.py +0 -0
  146. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/parse_utils/imports/constants.py +0 -0
  147. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/parse_utils/imports/imports.py +0 -0
  148. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/parse_utils/imports/module_imports.py +0 -0
  149. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/parse_utils/parse_utils.py +0 -0
  150. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/path_utils/__init__.py +0 -0
  151. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/path_utils/imports/__init__.py +0 -0
  152. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/path_utils/imports/imports.py +0 -0
  153. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/path_utils/imports/module_imports.py +0 -0
  154. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/path_utils/path_utils.py +0 -0
  155. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/read_write_utils/__init__.py +0 -0
  156. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/read_write_utils/imports/__init__.py +0 -0
  157. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/read_write_utils/imports/imports.py +0 -0
  158. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/read_write_utils/imports/module_imports.py +0 -0
  159. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/read_write_utils/read_write_utils.py +0 -0
  160. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/safe_utils/__init__.py +0 -0
  161. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/safe_utils/imports/__init__.py +0 -0
  162. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/safe_utils/imports/imports.py +0 -0
  163. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/safe_utils/imports/module_imports.py +0 -0
  164. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/safe_utils/safe_utils.py +0 -0
  165. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/ssh_utils/__init__.py +0 -0
  166. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/ssh_utils/classes.py +0 -0
  167. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/ssh_utils/cmd_utils.py +0 -0
  168. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/ssh_utils/imports/__init__.py +0 -0
  169. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/ssh_utils/imports/imports.py +0 -0
  170. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/ssh_utils/imports/module_imports.py +0 -0
  171. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/ssh_utils/imports/utils.py +0 -0
  172. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/ssh_utils/pexpect_utils.py +0 -0
  173. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/ssh_utils/type_checks.py +0 -0
  174. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/string_utils/__init__.py +0 -0
  175. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/string_utils/clean_utils.py +0 -0
  176. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/string_utils/eat_utils.py +0 -0
  177. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/string_utils/imports/__init__.py +0 -0
  178. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/string_utils/imports/imports.py +0 -0
  179. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/string_utils/imports/module_imports.py +0 -0
  180. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/string_utils/imports/utils.py +0 -0
  181. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/string_utils/replace_utils.py +0 -0
  182. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/thread_utils/__init__.py +0 -0
  183. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/thread_utils/imports/__init__.py +0 -0
  184. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/thread_utils/imports/imports.py +0 -0
  185. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/thread_utils/imports/module_imports.py +0 -0
  186. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/thread_utils/thread_utils.py +0 -0
  187. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/time_utils/__init__.py +0 -0
  188. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/time_utils/imports/__init__.py +0 -0
  189. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/time_utils/imports/imports.py +0 -0
  190. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/time_utils/imports/module_imports.py +0 -0
  191. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/time_utils/time_utils.py +0 -0
  192. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/type_utils/__init__.py +0 -0
  193. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/type_utils/alpha_utils.py +0 -0
  194. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/type_utils/imports/__init__.py +0 -0
  195. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/type_utils/imports/imports.py +0 -0
  196. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/type_utils/imports/module_imports.py +0 -0
  197. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/type_utils/num_utils.py +0 -0
  198. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/type_utils/type_utils.py +0 -0
  199. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities/utils.py +0 -0
  200. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities.egg-info/dependency_links.txt +0 -0
  201. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities.egg-info/requires.txt +0 -0
  202. {abstract_utilities-0.2.2.563 → abstract_utilities-0.2.2.613}/src/abstract_utilities.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstract_utilities
3
- Version: 0.2.2.563
3
+ Version: 0.2.2.613
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.563',
7
+ version='0.2.2.613',
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.',
@@ -1,4 +1,23 @@
1
1
  from .imports import *
2
+
3
+ def get_initial_caller() -> str:
4
+ """
5
+ Return the TRUE original caller: the entrypoint script that launched the program.
6
+ """
7
+ main_mod = sys.modules.get('__main__')
8
+
9
+ # interactive environments (REPL) may have no __file__
10
+ if not main_mod or not hasattr(main_mod, '__file__'):
11
+ return None
12
+
13
+ return os.path.realpath(main_mod.__file__)
14
+ def get_initial_caller_dir() -> str:
15
+ """
16
+ Return the directory of the TRUE original entrypoint script.
17
+ """
18
+ caller = get_initial_caller()
19
+ return os.path.dirname(caller) if caller else None
20
+
2
21
  def get_caller(i: Optional[int] = None) -> str:
3
22
  """
4
23
  Return the filename of the calling frame.
@@ -1,3 +1,22 @@
1
+ import importlib, sys,os
2
+ from .caller_utils import get_initial_caller
3
+ def file_to_module_name(path):
4
+ path = os.path.realpath(path)
5
+ # Find a path that exists in sys.path
6
+ for base in sys.path:
7
+ base = os.path.realpath(base)
8
+ if path.startswith(base):
9
+ rel = os.path.relpath(path, base)
10
+ mod = os.path.splitext(rel)[0]
11
+ return mod.replace(os.sep, ".")
12
+ # fallback (never should be used)
13
+ return os.path.splitext(os.path.basename(path))[0]
14
+ def get_globals_from_path(module_path: str=None):
15
+ module_path = module_path or get_initial_caller()
16
+ module_name = file_to_module_name(module_path)
17
+ if module_name not in sys.modules:
18
+ importlib.import_module(module_name)
19
+ return sys.modules[module_name].__dict__
1
20
  def global_registry(name:str,glob:dict):
2
21
  global_ledger = if_none_default(string='global_ledger',glob=globals(),default={"registry_names":[],"registry_index":[]})
3
22
  if name not in global_ledger['registry_names']:
@@ -31,26 +50,22 @@ def return_globals() -> dict:
31
50
  dict: The global variables dictionary.
32
51
  """
33
52
  return globals()
34
- def change_glob(var: str, val: any, glob: dict = return_globals()) -> any:
35
- """
36
- Changes the value of a global variable.
37
-
38
- Args:
39
- var (str): The name of the global variable.
40
- val (any): The new value.
41
- glob (dict, optional): The dictionary of global variables. Defaults to the current globals.
42
-
43
- Returns:
44
- any: The new value of the variable.
45
- """
53
+ def get_true_globals():
54
+ return sys.modules['__main__'].__dict__
55
+ def change_glob(var: str, val: any, glob: dict = None) -> any:
56
+ if glob is None:
57
+ glob = get_true_globals()
46
58
  glob[var] = val
47
59
  return val
48
- def get_globes(string:str='',glob:dict=return_globals()):
49
- if string in glob:
50
- return glob[string]
51
- def if_none_default(string:str, default:any,glob:dict=return_globals()):
52
- piece = get_globes(string=string,glob=glob)
53
- if piece is None:
54
- piece = default
55
- return change_glob(var=string,val=piece,glob=glob)
56
60
 
61
+ def get_globes(string: str='', glob: dict=None):
62
+ if glob is None:
63
+ glob = get_true_globals()
64
+ return glob.get(string)
65
+ def if_none_default(string: str, default: any, glob: dict=None, typ=None):
66
+ if glob is None:
67
+ glob = get_true_globals()
68
+ piece = get_globes(string=string, glob=glob)
69
+ if piece is None or (typ and not isinstance(piece, typ)):
70
+ piece = default
71
+ return change_glob(var=string, val=piece, glob=glob)
@@ -0,0 +1,2 @@
1
+ from ...imports import inspect,os,json,functools,inspect,glob,sys
2
+ from typing import *
@@ -1,5 +1,21 @@
1
-
1
+ from pathlib import Path
2
2
  from .utils import *
3
+
4
+ def get_shortest_path(*args):
5
+ shortest = None
6
+ args = {arg:str(arg).split('/') for arg in args if arg}
7
+ for path,spl in args.items():
8
+ if shortest is None or (len(spl)<len(shortest[-1])):
9
+ shortest=[path,spl]
10
+ return shortest[0]
11
+ def get_common_root(paths):
12
+ """
13
+ Compute the deepest common parent directory of all sysroots.
14
+ """
15
+ paths = [Path(p).resolve() for p in paths]
16
+ common = os.path.commonpath(paths)
17
+ return common
18
+
3
19
  def get_dirs(path):
4
20
  """
5
21
  Get List of Immediate Subdirectories in a Path
@@ -86,7 +102,9 @@ def raw_create_dirs(*paths):
86
102
  current_path = safe_join(current_path, part)
87
103
  os.makedirs(current_path, exist_ok=True)
88
104
  return full_path
105
+
89
106
  mkdirs=raw_create_dirs
90
107
  makedirs = mkdirs
91
108
  make_dirs = makedirs
109
+ makeAllDirs = raw_create_dirs
92
110
 
@@ -4,5 +4,5 @@ from ...ssh_utils import *
4
4
  from ...env_utils import *
5
5
  from ...read_write_utils import read_from_file,write_to_file
6
6
  from ...log_utils import get_logFile
7
- from ...class_utils import get_caller, get_caller_path, get_caller_dir,SingletonMeta,run_pruned_func
7
+ from ...class_utils import if_none_default,if_none_change,get_caller,get_initial_caller_dir, get_caller_path, get_caller_dir,SingletonMeta,run_pruned_func
8
8
 
@@ -45,7 +45,9 @@ def ensure_directories(*args,**kwargs):
45
45
  dirname = os.path.dirname(arg_str)
46
46
  directories.append(dirname)
47
47
  safe_directories = get_dir_filter_kwargs(**kwargs)
48
- directories+= make_list(safe_directories.get('directories',[]))
48
+ safe_dirs = safe_directories.get('directories')
49
+ safe_dirs = if_none_change(safe_dirs or None,get_initial_caller_dir())
50
+ directories+= make_list(safe_dirs)
49
51
  return list(set([r for r in directories if r]))
50
52
  def get_proper_type_str(string):
51
53
  if not string:
@@ -5,8 +5,7 @@ from typing import Optional, List, Set
5
5
 
6
6
 
7
7
 
8
- def run_pruned_cmd(cmd,*args,*kwargs):
9
- return run_pruned_func(run_cmd,cmd,*args,*kwargs)
8
+
10
9
 
11
10
 
12
11
  def get_find_cmd(
@@ -134,6 +133,7 @@ def collect_globs(
134
133
  - If file_type is "f" or "d" → returns a list of that type
135
134
  - Supports SSH mode via `user_at_host`
136
135
  """
136
+ user_pass_host_key = get_user_pass_host_key(**kwargs)
137
137
  kwargs["directories"] = ensure_directories(*args, **kwargs)
138
138
  kwargs= get_safe_canonical_kwargs(**kwargs)
139
139
  kwargs["cfg"] = kwargs.get('cfg') or define_defaults(**kwargs)
@@ -149,13 +149,18 @@ def collect_globs(
149
149
  type_str = type_strs.get(file_type)
150
150
  # Remote path (SSH)
151
151
  find_cmd = get_find_cmd(
152
+ directories=kwargs.get("directories"),
153
+ cfg=kwargs.get('cfg'),
152
154
  mindepth=mindepth,
153
155
  maxdepth=maxdepth,
154
156
  depth=depth,
155
157
  file_type=file_type,
156
- **{k: v for k, v in kwargs.items() if v},
158
+ **user_pass_host_key,
159
+ )
160
+ result = run_pruned_func(run_cmd,find_cmd,
161
+ **kwargs
162
+
157
163
  )
158
- result = run_pruned_func(run_cmd,find_cmd,**kwargs)
159
164
  return_result = [res for res in result.split('\n') if res]
160
165
  return_results[type_str]=return_result
161
166
  if len(file_types) == 1:
@@ -1,10 +1,11 @@
1
1
  # attach_functions.py — single helper you can import anywhere
2
2
  # attach_dynamic.py
3
3
  from __future__ import annotations
4
-
4
+ from .find_collect import get_files_and_dirs
5
5
  from ..imports import *
6
6
  ABSPATH = os.path.abspath(__file__)
7
7
  ABSROOT = os.path.dirname(ABSPATH)
8
+
8
9
  def caller_path():
9
10
  frame = inspect.stack()[1]
10
11
  return os.path.abspath(frame.filename)
@@ -200,6 +201,7 @@ def get_dirs(root = None):
200
201
  dirpaths = [get_dir(root,item) for item in os.listdir(root) if check_dir_item(root,item)]
201
202
  return dirpaths
202
203
  def ifFunctionsInFile(root):
204
+ input(root)
203
205
  items = [os.path.join(root, "functions"),os.path.join(root, "functions.py")]
204
206
  for item in items:
205
207
  if os.path.exists(item):
@@ -210,33 +212,37 @@ def get_for_all_tabs(root = None):
210
212
  root = root or caller_path()
211
213
  if os.path.isfile(root):
212
214
  root = os.path.dirname(root)
213
- all_tabs = get_dirs(root = root)
215
+ all_tabs = get_files_and_dirs(root,allowed_patterns='*Tab')[0]
216
+
214
217
  for ROOT in all_tabs:
215
- FUNCS_DIR = ifFunctionsInFile(ROOT)
216
- if FUNCS_DIR == None:
217
- for ROOT in get_dirs(root = ROOT):
218
- apply_inits(ROOT)
219
- else:
220
- apply_inits(ROOT)
218
+ [apply_inits(os.path.join(ROOT,func)) for func in os.listdir(ROOT) if 'functions' in func]
219
+
220
+
221
221
 
222
222
 
223
223
  def apply_inits(ROOT):
224
- FUNCS_DIR = ifFunctionsInFile(ROOT)
225
-
224
+ filepaths=[ROOT]
225
+ TAB_DIR = os.path.dirname(ROOT)
226
+ INIT_DIR = None
227
+ if_fun_dir=False
228
+ ## if os.path.isfile(ROOT):
229
+ ## dirname= os.path.dirname(ROOT)
230
+ ## basename= os.path.basename(ROOT)
231
+ ## functions_dir = os.path.join(dirname,'functions')
232
+ ## functions_path = os.path.join(functions_dir,basename)
233
+ ## input(get_clean_imports(ROOT))
234
+ ##
235
+ ## os.makedirs(functions_dir,exist_ok=True)
236
+ ## shutil.move(ROOT,functions_path)
237
+ ## ROOT=functions_dir
238
+ if os.path.isdir(ROOT):
239
+ TAB_DIR = os.path.dirname(ROOT)
240
+ INIT_DIR = ROOT
241
+ filepaths = get_files_and_dirs(directory=INIT_DIR,allowed_exts='py',add=True)[-1]
242
+ if_fun_dir=True
243
+ input(filepaths)
226
244
 
227
- if_fun_dir = isDir(FUNCS_DIR)
228
- if if_fun_dir != None:
229
-
230
- if if_fun_dir:
231
- CFG = define_defaults(allowed_exts='.py',
232
- unallowed_exts = True,
233
- exclude_types = True,
234
- exclude_dirs = True,
235
- exclude_patterns = True)
236
- _,filepaths = get_files_and_dirs(FUNCS_DIR,cfg=CFG)
237
-
238
- else:
239
- filepaths = [FUNCS_DIR]
245
+
240
246
 
241
247
  # Parse top-level def names
242
248
  def extract_funcs(path: str):
@@ -246,7 +252,7 @@ def apply_inits(ROOT):
246
252
  if m:
247
253
  funcs.append(m.group(1))
248
254
  return funcs
249
-
255
+
250
256
  # Build functions/__init__.py that re-exports all discovered functions
251
257
  import_lines = []
252
258
  all_funcs = []
@@ -258,7 +264,7 @@ def apply_inits(ROOT):
258
264
  all_funcs.extend(funcs)
259
265
  if if_fun_dir:
260
266
  functions_init = "\n".join(import_lines) + ("\n" if import_lines else "")
261
- write_to_file(contents=functions_init, file_path=os.path.join(FUNCS_DIR, "__init__.py"))
267
+ write_to_file(contents=functions_init, file_path=os.path.join(INIT_DIR, "__init__.py"))
262
268
 
263
269
  # Prepare the tuple literal of function names for import + loop
264
270
  uniq_funcs = sorted(set(all_funcs))
@@ -267,9 +273,10 @@ def apply_inits(ROOT):
267
273
  # Generate apiConsole/initFuncs.py using the safer setattr-loop
268
274
  init_funcs_src = textwrap.dedent(f"""\
269
275
 
270
-
276
+
277
+ from abstract_utilities import get_logFile
271
278
  from .functions import ({func_tuple})
272
-
279
+ logger=get_logFile(__name__)
273
280
  def initFuncs(self):
274
281
  try:
275
282
  for f in ({func_tuple}):
@@ -279,8 +286,9 @@ def apply_inits(ROOT):
279
286
  return self
280
287
  """)
281
288
 
282
- write_to_file(contents=init_funcs_src, file_path=os.path.join(ROOT, "initFuncs.py"))
289
+ write_to_file(contents=init_funcs_src, file_path=os.path.join(TAB_DIR, "initFuncs.py"))
283
290
 
284
291
  def call_for_all_tabs():
285
292
  root = get_caller_dir(2)
293
+
286
294
  get_for_all_tabs(root)
@@ -206,7 +206,7 @@ def ifFunctionsInFile(root):
206
206
 
207
207
 
208
208
  def get_for_all_tabs(root = None):
209
- root = root or caller_path()
209
+ root = root or get_initial_caller_dir()
210
210
  if os.path.isfile(root):
211
211
  root = os.path.dirname(root)
212
212
  all_tabs = get_dirs(root = root)
@@ -261,9 +261,9 @@ def apply_inits(ROOT):
261
261
  # Generate apiConsole/initFuncs.py using the safer setattr-loop
262
262
  init_funcs_src = textwrap.dedent(f"""\
263
263
 
264
-
264
+ from abstract_utilities import get_logFile
265
265
  from .functions import ({func_tuple})
266
-
266
+ logger=get_logFile(__name__)
267
267
  def initFuncs(self):
268
268
  try:
269
269
  for f in ({func_tuple}):
@@ -276,5 +276,5 @@ def apply_inits(ROOT):
276
276
  write_to_file(contents=init_funcs_src, file_path=os.path.join(ROOT, "initFuncs.py"))
277
277
 
278
278
  def call_for_all_tabs():
279
- root = get_caller_dir(2)
279
+ root = get_initial_caller_dir()
280
280
  get_for_all_tabs(root)
@@ -8,7 +8,7 @@
8
8
 
9
9
  from ....imports import *
10
10
  from pathlib import Path
11
-
11
+ from abstract_utilities import read_from_file, eatAll
12
12
  import os, sys, re, inspect
13
13
  from typing import *
14
14
  from types import MethodType
@@ -320,13 +320,12 @@ def define_all_params(*args, **kwargs) -> AllParams:
320
320
  merged = asdict(search_params)
321
321
 
322
322
  merged.update({
323
- "cfg":cfg,
324
323
  "directories":directories,
325
324
  "allowed": allowed,
326
325
  "include_files": include_files,
327
326
  "recursive": recursive, # override existing value safely
328
327
  })
329
-
328
+ input(merged)
330
329
  # Step 6: instantiate AllParams
331
330
  return AllParams(**merged)
332
331
  def get_file_filters(*args, **kwargs) -> AllParams:
@@ -0,0 +1,8 @@
1
+ from ...read_write_utils import read_from_file,write_to_file,get_text_or_read
2
+ from ...string_utils import eatAll,eatInner,eatElse,clean_line
3
+ from ...class_utils import if_none_change,if_none_default,get_true_globals,get_initial_caller_dir,get_caller_path,get_caller_dir,if_none_default
4
+ from ...list_utils import make_list
5
+ from ...path_utils import get_file_parts
6
+ from ...type_utils import is_number,make_list
7
+ from ...file_utils import collect_filepaths,collect_globs
8
+ from ...directory_utils import get_shortest_path,get_common_root
@@ -1,4 +1,15 @@
1
1
  from ..imports import *
2
+ def find_top_package_dir(p: Path) -> Path | None:
3
+ p = p.resolve()
4
+ if p.is_file():
5
+ p = p.parent
6
+ top = None
7
+ while (p / "__init__.py").exists():
8
+ top = p
9
+ if p.parent == p:
10
+ break
11
+ p = p.parent
12
+ return top
2
13
  def get_Path(path):
3
14
  if isinstance(path,str):
4
15
  path = Path(str(path))
@@ -40,3 +40,7 @@ def extract_class(path: str):
40
40
  if m:
41
41
  funcs.append(m.group(1))
42
42
  return funcs
43
+ def get_all_py_file_paths(directory,*args,**kwargs):
44
+ globs = collect_globs(directory,*args,allowed_exts='.py',**kwargs)
45
+ globs = [glo for glo in globs.get('files') if glo]
46
+ return globs
@@ -0,0 +1,110 @@
1
+ # --- auto-package bootstrap (run-safe) ---------------------------------
2
+ from ..imports import *
3
+ from .dot_utils import get_dot_range
4
+ from .sysroot_utils import get_sysroot,get_import_with_sysroot,get_py_files,get_all_py_sysroots
5
+ from .extract_utils import get_all_py_file_paths
6
+ def clean_imports(imports,commaClean=True):
7
+ chars=["*"]
8
+ if not commaClean:
9
+ chars.append(',')
10
+ if isinstance(imports,str):
11
+ imports = imports.split(',')
12
+ return [eatElse(imp,chars=chars) for imp in imports if imp]
13
+ def get_dot_range(import_pkg):
14
+ count = 0
15
+ for char in import_pkg:
16
+ if char != '.':
17
+ break
18
+ count+=1
19
+ return count
20
+ def get_cleaned_import_list(line,commaClean=True):
21
+ cleaned_import_list=[]
22
+ if IMPORT_TAG in line:
23
+ imports = line.split(IMPORT_TAG)[1]
24
+ cleaned_import_list+=clean_imports(imports,commaClean=commaClean)
25
+ return cleaned_import_list
26
+ def get_module_from_import(imp,path=None):
27
+ path = path or os.getcwd()
28
+ i = get_dot_range(imp)
29
+ imp = eatAll(imp,'.')
30
+ sysroot = get_sysroot(path,i)
31
+ return os.path.join(sysroot, imp)
32
+
33
+ def safe_import(name: str, *, package: str | None = None, member: str | None = None, file: str | None = None):
34
+ """
35
+ Wrapper over importlib.import_module that:
36
+ - if `name` is relative (starts with '.'), ensures `package` is set.
37
+ - if `package` is missing, derives it from `file` (defaults to __file__).
38
+ """
39
+ file = file or __file__
40
+ ensure_package_context(file)
41
+ if name.startswith(".") and not package:
42
+
43
+
44
+ pkg_name = get_module_from_import(name,path=None)
45
+ # also set __package__ if we are running as a script
46
+ if __name__ == "__main__" and (not globals().get("__package__")):
47
+ globals()["__package__"] = pkg_name
48
+ package = pkg_name
49
+
50
+ mod = importlib.import_module(name, package=package)
51
+ return getattr(mod, member) if member else mod
52
+
53
+ def dynamic_import(module_path: str, namespace: dict, all_imports = None):
54
+ """
55
+ Emulates:
56
+ from module_path import *
57
+ but includes private (_xxx) names too.
58
+ """
59
+ all_imports = if_none_change(all_imports,True)
60
+ if module_path:
61
+ module = importlib.import_module(module_path)
62
+ # Import literally everything except dunders, unless you want them too.
63
+ names = [n for n in dir(module) if n and ((not all_imports and not n.startswith("_")) or all_imports)]
64
+ for name in names:
65
+ namespace[name] = getattr(module, name)
66
+ return module
67
+ def get_monorepo_root(directory=None,files=None):
68
+ directory = directory or get_initial_caller_dir()
69
+
70
+ py_files = get_all_py_file_paths(directory,add=True)
71
+ sysroots = get_all_py_sysroots(directory=directory,files=py_files)
72
+ monorepo_root = get_common_root(sysroots)
73
+ return monorepo_root
74
+ def switch_to_monorepo_root(directory=None,files=None):
75
+ monorepo_root = get_monorepo_root(directory=directory,files=files)
76
+ if str(monorepo_root) not in sys.path:
77
+ sys.path.insert(0, str(monorepo_root))
78
+ return str(monorepo_root)
79
+ def get_all_imports(directory=None,sysroot=None,globs=None):
80
+ globs = globs or get_true_globals() or globals()
81
+ directory = directory or get_initial_caller_dir()
82
+ files = collect_globs(directory=directory,allowed_exts='.py').get('files')
83
+ sysroot = sysroot or switch_to_monorepo_root(directory=directory,files=files)
84
+ for glo in files:
85
+ imp = get_import_with_sysroot(glo, sysroot)
86
+ dynamic_import(imp, globs)
87
+ def get_all_imports_for_class(self, directory=None, sysroot=None, include_private=True):
88
+ """
89
+ Load all modules under `directory` and assign their exports as attributes
90
+ on the class instance (self).
91
+ """
92
+ directory = directory or get_initial_caller_dir()
93
+ files = collect_globs(directory=directory, allowed_exts='.py').get("files")
94
+
95
+ # Compute sysroot (monorepo root)
96
+ sysroot = sysroot or switch_to_monorepo_root(directory=directory, files=files)
97
+
98
+ for glo in files:
99
+ mod_path = get_import_with_sysroot(glo, sysroot)
100
+ module = importlib.import_module(mod_path)
101
+
102
+ for name in dir(module):
103
+ if name.startswith("__"):
104
+ continue
105
+ if not include_private and name.startswith("_"):
106
+ continue
107
+
108
+ setattr(self, name, getattr(module, name))
109
+
110
+ return self
@@ -2,7 +2,7 @@
2
2
  from ..imports import *
3
3
  from .import_functions import *
4
4
  from ...safe_utils import *
5
-
5
+ from .sysroot_utils import get_import_with_sysroot
6
6
  def try_is_file(file_path):
7
7
  try:
8
8
  return os.path.isfile(file_path)
@@ -29,36 +29,7 @@ def get_pkg_or_init(pkg_path):
29
29
  if try_is_dir(pkg_path):
30
30
  if os.path.isfile(pkg_init_path):
31
31
  return pkg_init_path
32
- def get_import_with_sysroot(file_path, sysroot):
33
- """
34
- Rewrite imports like:
35
- from imports.constants import *
36
- into:
37
- from <relative_path>.imports.constants import *
38
- Where <relative_path> is computed relative to sysroot.
39
- """
40
-
41
-
42
- # Absolute paths
43
- file_dir = os.path.dirname(os.path.abspath(file_path))
44
- sysroot = os.path.abspath(sysroot)
45
-
46
- # Compute relative path
47
- relpath = os.path.relpath(file_dir, sysroot)
48
- input(relpath)
49
- bare_rel = eatAll(relpath,'.')
50
-
51
- # Turn filesystem path into dotted python path
52
- if relpath == ".":
53
- dotted = ""
54
- else:
55
- dotted = ".".join(part for part in relpath.split(os.sep) if part)
56
- if bare_rel.startswith('/') and dotted.startswith('.'):
57
- dotted = dotted[1:]
58
-
59
32
 
60
- # Build final rewritten import
61
- return dotted
62
33
 
63
34
 
64
35
  def ensure_import_pkg_js(import_pkg_js,file_path=None):