abstract-utilities 0.2.2.476__tar.gz → 0.2.2.515__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.476 → abstract_utilities-0.2.2.515}/PKG-INFO +1 -1
  2. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/setup.py +1 -1
  3. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/__init__.py +6 -10
  4. abstract_utilities-0.2.2.515/src/abstract_utilities/circular_import_finder.py +222 -0
  5. abstract_utilities-0.2.2.515/src/abstract_utilities/circular_import_finder2.py +118 -0
  6. abstract_utilities-0.2.2.515/src/abstract_utilities/class_utils/__init__.py +7 -0
  7. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/class_utils}/abstract_classes.py +2 -1
  8. abstract_utilities-0.2.2.515/src/abstract_utilities/class_utils/caller_utils.py +35 -0
  9. abstract_utilities-0.2.2.515/src/abstract_utilities/class_utils/class_utils.py +109 -0
  10. abstract_utilities-0.2.2.515/src/abstract_utilities/class_utils/function_utils.py +153 -0
  11. abstract_utilities-0.2.2.515/src/abstract_utilities/class_utils/imports/imports.py +2 -0
  12. abstract_utilities-0.2.2.515/src/abstract_utilities/class_utils/imports/utils.py +40 -0
  13. abstract_utilities-0.2.2.515/src/abstract_utilities/class_utils/module_utils.py +63 -0
  14. abstract_utilities-0.2.2.515/src/abstract_utilities/directory_utils/__init__.py +4 -0
  15. abstract_utilities-0.2.2.515/src/abstract_utilities/directory_utils/directory_utils.py +94 -0
  16. abstract_utilities-0.2.2.515/src/abstract_utilities/directory_utils/name_utils.py +43 -0
  17. abstract_utilities-0.2.2.515/src/abstract_utilities/directory_utils/size_utils.py +57 -0
  18. abstract_utilities-0.2.2.515/src/abstract_utilities/directory_utils/utils.py +116 -0
  19. abstract_utilities-0.2.2.515/src/abstract_utilities/env_utils/imports/__init__.py +2 -0
  20. abstract_utilities-0.2.2.515/src/abstract_utilities/env_utils/imports/imports.py +10 -0
  21. abstract_utilities-0.2.2.515/src/abstract_utilities/error_utils/__init__.py +2 -0
  22. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/error_utils}/error_utils.py +1 -1
  23. abstract_utilities-0.2.2.515/src/abstract_utilities/error_utils/imports/__init__.py +2 -0
  24. abstract_utilities-0.2.2.515/src/abstract_utilities/error_utils/imports/imports.py +1 -0
  25. abstract_utilities-0.2.2.515/src/abstract_utilities/error_utils/imports/module_imports.py +1 -0
  26. {abstract_utilities-0.2.2.476/src/abstract_utilities/robust_reader/imports → abstract_utilities-0.2.2.515/src/abstract_utilities/file_utils}/__init__.py +1 -0
  27. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/file_utils/imports/constants.py +6 -0
  28. {abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils → abstract_utilities-0.2.2.515/src/abstract_utilities}/file_utils/imports/imports.py +21 -10
  29. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/file_utils/imports/module_imports.py +2 -7
  30. {abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/file_utils/src}/__init__.py +2 -1
  31. {abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/file_utils/src}/file_filters.py +14 -8
  32. {abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/file_utils/src}/file_reader.py +1 -1
  33. {abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/file_utils/src}/file_utils.py +86 -20
  34. abstract_utilities-0.2.2.515/src/abstract_utilities/file_utils/src/filter_params.py +155 -0
  35. abstract_utilities-0.2.2.515/src/abstract_utilities/file_utils/src/find_collect.py +270 -0
  36. abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/req.py → abstract_utilities-0.2.2.515/src/abstract_utilities/file_utils/src/initFunctionsGen.py +2 -45
  37. {abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/file_utils/src}/map_utils.py +1 -1
  38. {abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/file_utils/src}/pdf_utils.py +1 -1
  39. abstract_utilities-0.2.2.515/src/abstract_utilities/hash_utils/__init__.py +2 -0
  40. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/hash_utils}/hash_utils.py +1 -1
  41. abstract_utilities-0.2.2.515/src/abstract_utilities/hash_utils/imports/__init__.py +2 -0
  42. abstract_utilities-0.2.2.515/src/abstract_utilities/hash_utils/imports/imports.py +1 -0
  43. abstract_utilities-0.2.2.515/src/abstract_utilities/hash_utils/imports/module_imports.py +0 -0
  44. abstract_utilities-0.2.2.515/src/abstract_utilities/history_utils/__init__.py +2 -0
  45. abstract_utilities-0.2.2.515/src/abstract_utilities/history_utils/imports/__init__.py +2 -0
  46. abstract_utilities-0.2.2.515/src/abstract_utilities/history_utils/imports/imports.py +1 -0
  47. abstract_utilities-0.2.2.515/src/abstract_utilities/history_utils/imports/module_imports.py +0 -0
  48. {abstract_utilities-0.2.2.476/src/abstract_utilities/cmd_utils/imports → abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils}/__init__.py +1 -0
  49. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/imports/__init__.py +4 -0
  50. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/imports/constants.py +2 -0
  51. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/imports/imports.py +4 -0
  52. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/imports/module_imports.py +6 -0
  53. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/imports/utils.py +30 -0
  54. {abstract_utilities-0.2.2.476/src/abstract_utilities/robust_readers/import_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src}/__init__.py +4 -4
  55. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src/clean_imports.py +147 -0
  56. {abstract_utilities-0.2.2.476/src/abstract_utilities/robust_readers/import_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src}/dot_utils.py +10 -4
  57. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_readers/import_utils/function_utils.py → abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src/extract_utils.py +1 -4
  58. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src/import_functions.py +46 -0
  59. {abstract_utilities-0.2.2.476/src/abstract_utilities/robust_readers/import_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src}/import_utils.py +14 -8
  60. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src/package_utils/__init__.py +139 -0
  61. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src/package_utils/context_utils.py +27 -0
  62. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src/package_utils/import_collectors.py +53 -0
  63. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src/package_utils/path_utils.py +28 -0
  64. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src/package_utils/safe_import.py +27 -0
  65. abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src/pkg_utils.py +140 -0
  66. {abstract_utilities-0.2.2.476/src/abstract_utilities/robust_readers/import_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/import_utils/src}/sysroot_utils.py +4 -17
  67. abstract_utilities-0.2.2.515/src/abstract_utilities/imports.py +18 -0
  68. abstract_utilities-0.2.2.515/src/abstract_utilities/json_utils/__init__.py +2 -0
  69. abstract_utilities-0.2.2.515/src/abstract_utilities/json_utils/imports/__init__.py +2 -0
  70. abstract_utilities-0.2.2.515/src/abstract_utilities/json_utils/imports/imports.py +2 -0
  71. abstract_utilities-0.2.2.515/src/abstract_utilities/json_utils/imports/module_imports.py +5 -0
  72. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/json_utils}/json_utils.py +2 -11
  73. abstract_utilities-0.2.2.515/src/abstract_utilities/list_utils/__init__.py +2 -0
  74. abstract_utilities-0.2.2.515/src/abstract_utilities/list_utils/imports/__init__.py +2 -0
  75. abstract_utilities-0.2.2.515/src/abstract_utilities/list_utils/imports/imports.py +1 -0
  76. abstract_utilities-0.2.2.515/src/abstract_utilities/list_utils/imports/module_imports.py +0 -0
  77. abstract_utilities-0.2.2.515/src/abstract_utilities/log_utils/__init__.py +5 -0
  78. abstract_utilities-0.2.2.515/src/abstract_utilities/log_utils/abstractLogManager.py +64 -0
  79. abstract_utilities-0.2.2.515/src/abstract_utilities/log_utils/call_response.py +68 -0
  80. abstract_utilities-0.2.2.515/src/abstract_utilities/log_utils/imports/__init__.py +2 -0
  81. abstract_utilities-0.2.2.515/src/abstract_utilities/log_utils/imports/imports.py +7 -0
  82. abstract_utilities-0.2.2.515/src/abstract_utilities/log_utils/imports/module_imports.py +2 -0
  83. abstract_utilities-0.2.2.515/src/abstract_utilities/log_utils/log_file.py +58 -0
  84. abstract_utilities-0.2.2.515/src/abstract_utilities/log_utils/logger_callable.py +49 -0
  85. abstract_utilities-0.2.2.515/src/abstract_utilities/math_utils/__init__.py +2 -0
  86. abstract_utilities-0.2.2.515/src/abstract_utilities/math_utils/imports/__init__.py +2 -0
  87. abstract_utilities-0.2.2.515/src/abstract_utilities/math_utils/imports/imports.py +2 -0
  88. abstract_utilities-0.2.2.515/src/abstract_utilities/math_utils/imports/module_imports.py +1 -0
  89. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/math_utils}/math_utils.py +1 -3
  90. abstract_utilities-0.2.2.515/src/abstract_utilities/parse_utils/__init__.py +2 -0
  91. {abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/parse_utils}/imports/__init__.py +2 -2
  92. abstract_utilities-0.2.2.515/src/abstract_utilities/parse_utils/imports/constants.py +10 -0
  93. abstract_utilities-0.2.2.515/src/abstract_utilities/parse_utils/imports/imports.py +2 -0
  94. abstract_utilities-0.2.2.515/src/abstract_utilities/parse_utils/imports/module_imports.py +4 -0
  95. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/parse_utils}/parse_utils.py +1 -17
  96. abstract_utilities-0.2.2.515/src/abstract_utilities/path_utils/__init__.py +2 -0
  97. abstract_utilities-0.2.2.515/src/abstract_utilities/path_utils/imports/__init__.py +3 -0
  98. abstract_utilities-0.2.2.515/src/abstract_utilities/path_utils/imports/imports.py +1 -0
  99. abstract_utilities-0.2.2.515/src/abstract_utilities/path_utils/imports/module_imports.py +8 -0
  100. abstract_utilities-0.2.2.515/src/abstract_utilities/path_utils/path_utils.py +251 -0
  101. abstract_utilities-0.2.2.515/src/abstract_utilities/read_write_utils/__init__.py +1 -0
  102. abstract_utilities-0.2.2.515/src/abstract_utilities/read_write_utils/imports/__init__.py +2 -0
  103. abstract_utilities-0.2.2.515/src/abstract_utilities/read_write_utils/imports/imports.py +2 -0
  104. abstract_utilities-0.2.2.515/src/abstract_utilities/read_write_utils/imports/module_imports.py +5 -0
  105. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/read_write_utils}/read_write_utils.py +139 -22
  106. abstract_utilities-0.2.2.515/src/abstract_utilities/safe_utils/__init__.py +2 -0
  107. abstract_utilities-0.2.2.515/src/abstract_utilities/safe_utils/imports/__init__.py +3 -0
  108. abstract_utilities-0.2.2.515/src/abstract_utilities/safe_utils/imports/imports.py +2 -0
  109. abstract_utilities-0.2.2.515/src/abstract_utilities/safe_utils/imports/module_imports.py +2 -0
  110. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/safe_utils}/safe_utils.py +7 -4
  111. abstract_utilities-0.2.2.515/src/abstract_utilities/ssh_utils/__init__.py +5 -0
  112. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/ssh_utils/classes.py +0 -1
  113. {abstract_utilities-0.2.2.476/src/abstract_utilities/cmd_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/ssh_utils}/cmd_utils.py +22 -54
  114. abstract_utilities-0.2.2.515/src/abstract_utilities/ssh_utils/imports/__init__.py +3 -0
  115. abstract_utilities-0.2.2.515/src/abstract_utilities/ssh_utils/imports/imports.py +5 -0
  116. abstract_utilities-0.2.2.515/src/abstract_utilities/ssh_utils/imports/module_imports.py +6 -0
  117. {abstract_utilities-0.2.2.476/src/abstract_utilities/ssh_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/ssh_utils/imports}/utils.py +1 -0
  118. {abstract_utilities-0.2.2.476/src/abstract_utilities/cmd_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/ssh_utils}/pexpect_utils.py +1 -3
  119. {abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/ssh_utils}/type_checks.py +34 -24
  120. abstract_utilities-0.2.2.515/src/abstract_utilities/string_utils/__init__.py +4 -0
  121. abstract_utilities-0.2.2.515/src/abstract_utilities/string_utils/clean_utils.py +28 -0
  122. abstract_utilities-0.2.2.515/src/abstract_utilities/string_utils/eat_utils.py +103 -0
  123. abstract_utilities-0.2.2.515/src/abstract_utilities/string_utils/imports/__init__.py +3 -0
  124. abstract_utilities-0.2.2.515/src/abstract_utilities/string_utils/imports/imports.py +2 -0
  125. abstract_utilities-0.2.2.515/src/abstract_utilities/string_utils/imports/module_imports.py +2 -0
  126. abstract_utilities-0.2.2.515/src/abstract_utilities/string_utils/imports/utils.py +81 -0
  127. abstract_utilities-0.2.2.476/src/abstract_utilities/string_utils.py → abstract_utilities-0.2.2.515/src/abstract_utilities/string_utils/replace_utils.py +2 -23
  128. abstract_utilities-0.2.2.515/src/abstract_utilities/thread_utils/__init__.py +2 -0
  129. abstract_utilities-0.2.2.515/src/abstract_utilities/thread_utils/imports/__init__.py +2 -0
  130. abstract_utilities-0.2.2.515/src/abstract_utilities/thread_utils/imports/imports.py +2 -0
  131. abstract_utilities-0.2.2.515/src/abstract_utilities/thread_utils/imports/module_imports.py +2 -0
  132. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/thread_utils}/thread_utils.py +1 -3
  133. abstract_utilities-0.2.2.515/src/abstract_utilities/time_utils/__init__.py +2 -0
  134. abstract_utilities-0.2.2.515/src/abstract_utilities/time_utils/imports/__init__.py +2 -0
  135. abstract_utilities-0.2.2.515/src/abstract_utilities/time_utils/imports/imports.py +3 -0
  136. abstract_utilities-0.2.2.515/src/abstract_utilities/time_utils/imports/module_imports.py +1 -0
  137. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/time_utils}/time_utils.py +1 -4
  138. abstract_utilities-0.2.2.515/src/abstract_utilities/type_utils/__init__.py +3 -0
  139. abstract_utilities-0.2.2.515/src/abstract_utilities/type_utils/alpha_utils.py +59 -0
  140. abstract_utilities-0.2.2.515/src/abstract_utilities/type_utils/imports/__init__.py +2 -0
  141. abstract_utilities-0.2.2.515/src/abstract_utilities/type_utils/imports/imports.py +4 -0
  142. abstract_utilities-0.2.2.515/src/abstract_utilities/type_utils/imports/module_imports.py +1 -0
  143. abstract_utilities-0.2.2.515/src/abstract_utilities/type_utils/num_utils.py +19 -0
  144. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/type_utils}/type_utils.py +3 -22
  145. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities.egg-info/PKG-INFO +1 -1
  146. abstract_utilities-0.2.2.515/src/abstract_utilities.egg-info/SOURCES.txt +167 -0
  147. abstract_utilities-0.2.2.476/src/abstract_utilities/class_utils.py +0 -407
  148. abstract_utilities-0.2.2.476/src/abstract_utilities/cmd_utils/__init__.py +0 -2
  149. abstract_utilities-0.2.2.476/src/abstract_utilities/cmd_utils/imports/imports.py +0 -10
  150. abstract_utilities-0.2.2.476/src/abstract_utilities/cmd_utils/user_utils.py +0 -45
  151. abstract_utilities-0.2.2.476/src/abstract_utilities/collator_utils.py +0 -81
  152. abstract_utilities-0.2.2.476/src/abstract_utilities/doit.py +0 -49
  153. abstract_utilities-0.2.2.476/src/abstract_utilities/dynimport.py +0 -186
  154. abstract_utilities-0.2.2.476/src/abstract_utilities/env_utils/imports/imports.py +0 -8
  155. abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/__init__.py +0 -3
  156. abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/file_utils/filter_params.py +0 -89
  157. abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/file_utils/find_collect.py +0 -154
  158. abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/file_utils/imports/constants.py +0 -39
  159. abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/file_utils/imports/module_imports.py +0 -13
  160. abstract_utilities-0.2.2.476/src/abstract_utilities/file_utils/imports/imports.py +0 -65
  161. abstract_utilities-0.2.2.476/src/abstract_utilities/log_utils.py +0 -253
  162. abstract_utilities-0.2.2.476/src/abstract_utilities/path_utils.py +0 -663
  163. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_reader/__init__.py +0 -2
  164. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_reader/file_reader2.py +0 -629
  165. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_reader/file_readers.py +0 -629
  166. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_reader/imports/imports.py +0 -3
  167. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_reader/sadfsad.py +0 -625
  168. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_readers/__init__.py +0 -2
  169. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_readers/import_utils/clean_imports.py +0 -175
  170. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_readers/import_utils/impot_functions.py +0 -70
  171. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_readers/import_utils/safe_import_utils.py +0 -68
  172. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_readers/import_utils/utils.py +0 -25
  173. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_readers/imports.py +0 -8
  174. abstract_utilities-0.2.2.476/src/abstract_utilities/robust_readers/initFuncGen.py +0 -151
  175. abstract_utilities-0.2.2.476/src/abstract_utilities/ssh_utils/__init__.py +0 -3
  176. abstract_utilities-0.2.2.476/src/abstract_utilities/ssh_utils/imports.py +0 -10
  177. abstract_utilities-0.2.2.476/src/abstract_utilities/ssh_utils/pexpect_utils.py +0 -315
  178. abstract_utilities-0.2.2.476/src/abstract_utilities/string_clean.py +0 -229
  179. abstract_utilities-0.2.2.476/src/abstract_utilities/tetsts.py +0 -1
  180. abstract_utilities-0.2.2.476/src/abstract_utilities.egg-info/SOURCES.txt +0 -94
  181. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/README.md +0 -0
  182. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/pyproject.toml +0 -0
  183. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/setup.cfg +0 -0
  184. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/class_utils}/global_utils.py +0 -0
  185. {abstract_utilities-0.2.2.476/src/abstract_utilities/env_utils → abstract_utilities-0.2.2.515/src/abstract_utilities/class_utils}/imports/__init__.py +0 -0
  186. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/compare_utils/__init__.py +0 -0
  187. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/compare_utils/best_match.py +0 -0
  188. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/compare_utils/compare_utils.py +0 -0
  189. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/compare_utils/find_value.py +0 -0
  190. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/env_utils/__init__.py +0 -0
  191. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/env_utils/abstractEnv.py +0 -0
  192. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/env_utils/envy_it.py +0 -0
  193. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/env_utils/imports/utils.py +0 -0
  194. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/file_utils/imports/__init__.py +0 -0
  195. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/file_utils/imports/classes.py +0 -0
  196. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/file_utils/imports/clean_imps.py +0 -0
  197. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/history_utils}/history_utils.py +0 -0
  198. {abstract_utilities-0.2.2.476/src/abstract_utilities → abstract_utilities-0.2.2.515/src/abstract_utilities/list_utils}/list_utils.py +0 -0
  199. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities/utils.py +0 -0
  200. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities.egg-info/dependency_links.txt +0 -0
  201. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/src/abstract_utilities.egg-info/requires.txt +0 -0
  202. {abstract_utilities-0.2.2.476 → abstract_utilities-0.2.2.515}/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.476
3
+ Version: 0.2.2.515
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.476',
7
+ version='0.2.2.515',
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,11 +1,6 @@
1
- import re,threading,os,shutil,requests,asyncio,time,subprocess,json,glob,sys,logging
2
- from datetime import timedelta
3
- from datetime import datetime
4
- from typing import *
1
+ from .imports import *
5
2
  from .hash_utils import *
6
3
  ##from .dynimport import get_abstract_import,import_symbols_to_parent,call_for_all_tabs
7
- from .robust_readers import *
8
- from .dynimport import get_abstract_import
9
4
  from .json_utils import (unified_json_loader,
10
5
  find_keys,
11
6
  get_key_values_from_path,
@@ -41,6 +36,7 @@ from .json_utils import (unified_json_loader,
41
36
  )
42
37
  from .read_write_utils import (read_from_file,
43
38
  write_to_file)
39
+ from .directory_utils import *
44
40
  from .path_utils import *
45
41
  from .file_utils import *
46
42
  from .list_utils import (get_highest_value_obj,
@@ -61,7 +57,7 @@ from .time_utils import (get_time_stamp,
61
57
  parse_timestamp,
62
58
  get_time_now_iso,
63
59
  is_valid_time)
64
- from .string_clean import (eatInner,
60
+ from .string_utils import (eatInner,
65
61
  eatAll,
66
62
  eatOuter,
67
63
  url_join,
@@ -106,7 +102,7 @@ from .compare_utils import (create_new_name,
106
102
  best_match)
107
103
  from .thread_utils import ThreadManager
108
104
  from .history_utils import HistoryManager
109
- from .abstract_classes import *
105
+
110
106
  from .parse_utils import (num_tokens_from_string,
111
107
  chunk_source_code,
112
108
  chunk_any_to_tokens,
@@ -116,10 +112,10 @@ from .parse_utils import (num_tokens_from_string,
116
112
 
117
113
  from .log_utils import get_caller_info,get_logFile,print_or_log,get_json_call_response,initialize_call_log
118
114
  from .error_utils import try_func
115
+ from .class_utils import *
119
116
  from .ssh_utils import *
120
117
  from .env_utils import *
121
118
  from .path_utils import *
122
119
  from .file_utils import *
123
- from .file_utils import call_for_all_tabs
124
120
  from .string_utils import *
125
- from .class_utils import alias,get_class_inputs,get_set_attr,get_caller_path,get_caller_dir
121
+ from .import_utils import *
@@ -0,0 +1,222 @@
1
+ from abstract_utilities import *
2
+ from collections import defaultdict
3
+ def clean_line(line):
4
+ return eatAll(line,[' ','','\t','\n'])
5
+ def is_from_line_group(line):
6
+ if line and line.startswith(FROM_TAG) and IMPORT_TAG in line and '(' in line:
7
+ import_spl = line.split(IMPORT_TAG)[-1]
8
+ import_spl_clean = clean_line(line)
9
+ if not import_spl_clean.endswith(')'):
10
+ return True
11
+ return False
12
+ def clean_imports(text=None,file_path=None,import_pkg_js=None,fill_nulines=False):
13
+ if text and os.path.isfile(text):
14
+ file_path = text
15
+ input(file_path)
16
+ text = read_from_file(file_path)
17
+ if not import_pkg_js:
18
+ import_pkg_js = get_all_imports(text=text,file_path=file_path)
19
+ import_pkg_js = ensure_import_pkg_js(import_pkg_js,file_path=file_path)
20
+ nu_lines = import_pkg_js["context"]["nulines"]
21
+ for pkg,values in import_pkg_js.items():
22
+ comments = []
23
+ if pkg not in ["context"]:
24
+
25
+ imports = values.get('imports')
26
+ for i,imp in enumerate(imports):
27
+ if '#' in imp:
28
+ imp_spl = imp.split('#')
29
+ comments.append(imp_spl[-1])
30
+ imports[i] = clean_line(imp_spl[0])
31
+ imports = list(set(imports))
32
+ if '*' in imports:
33
+ imports="*"
34
+ else:
35
+ imports=','.join(imports)
36
+ if comments:
37
+ comments=','.join(comments)
38
+ imports+=f" #{comments}"
39
+ import_pkg_js[pkg]["imports"]=imports
40
+ if fill_nulines:
41
+ line = values.get('line')
42
+ if len(nu_lines) >= line:
43
+ nu_lines[line] += imports
44
+ return import_pkg_js
45
+ def get_all_imports(text=None,file_path=None,import_pkg_js=None):
46
+ if text and os.path.isfile(text):
47
+
48
+ try:
49
+ text = read_from_file(text)
50
+ except:
51
+ pass
52
+ file_path = text
53
+ text = get_text_or_read(text=text,file_path=file_path)
54
+ lines = text.split('\n')
55
+ cleaned_import_list=[]
56
+ nu_lines = []
57
+ is_from_group = False
58
+ import_pkg_js = ensure_import_pkg_js(import_pkg_js,file_path=file_path)
59
+ for line in lines:
60
+ if line.startswith(IMPORT_TAG) and ' from ' not in line:
61
+ cleaned_import_list = get_cleaned_import_list(line)
62
+ import_pkg_js = add_imports_to_import_pkg_js("import",cleaned_import_list,import_pkg_js=import_pkg_js)
63
+ else:
64
+ if is_from_group:
65
+ import_pkg=is_from_group
66
+ line = clean_line(line)
67
+ if line.endswith(')'):
68
+ is_from_group=False
69
+ line=line[:-1]
70
+ imports_from_import_pkg = clean_imports(line)
71
+ import_pkg_js = add_imports_to_import_pkg_js(import_pkg,imports_from_import_pkg,import_pkg_js=import_pkg_js)
72
+
73
+ else:
74
+ import_pkg_js=update_import_pkg_js(line,import_pkg_js=import_pkg_js)
75
+ if is_from_line_group(line) and is_from_group == False:
76
+ is_from_group=get_import_pkg(line)
77
+ return import_pkg_js
78
+ def get_path_or_init(pkg_info):
79
+ root_dirname = pkg_info.get("root_dirname")
80
+ pkg = pkg_info.get("pkg")
81
+ rel_path = pkg.replace('.','/')
82
+ dirname = os.path.dirname(root_dirname)
83
+ pkg_path = os.path.join(dirname,rel_path)
84
+ pkg_py_path = f"{pkg_path}.py"
85
+ if os.path.isfile(pkg_py_path):
86
+ return pkg_py_path
87
+ pkg_init_path = os.path.join(pkg_path,'__init__.py')
88
+ if os.path.isdir(pkg_path):
89
+ if os.path.isfile(pkg_init_path):
90
+ return pkg_init_path
91
+ #input(f"nnot found == {pkg_info}")
92
+ def get_dot_fro_line(line,dirname=None,file_path=None,get_info=False):
93
+ info_js = {"nuline":line,"og_line":line,"pkg":line,"dirname":dirname,"file_path":file_path,"root_dirname":None,"local":False}
94
+ if dirname and is_file(dirname):
95
+ file_path=dirname
96
+ dirname = os.path.dirname(dirname)
97
+ info_js["file_path"]=file_path
98
+ info_js["dirname"]=dirname
99
+ from_line = line.split(FROM_TAG)[-1]
100
+ dot_fro = ""
101
+ for char in from_line:
102
+ if char != '.':
103
+ pkg = f"{dot_fro}{eatAll(from_line,'.')}"
104
+ nuline=f"from {pkg}"
105
+ info_js["nuline"]=nuline
106
+ info_js["pkg"]=pkg
107
+ break
108
+ if dirname:
109
+ info_js["root_dirname"]=dirname
110
+ dirbase = os.path.basename(dirname)
111
+ dirname = os.path.dirname(dirname)
112
+
113
+ dot_fro = f"{dirbase}.{dot_fro}"
114
+ if get_info:
115
+ if dot_fro and os.path.isdir(info_js["root_dirname"]):
116
+ info_js["local"]=True
117
+ info_js["pkg_path"]=get_path_or_init(info_js)
118
+ return info_js
119
+ return line
120
+ def get_top_level_imp(line,dirname=None):
121
+ imp = get_dot_fro_line(line,dirname)
122
+ return imp.split('.')[0]
123
+ def return_local_imps(file_path):
124
+ local_imps = []
125
+ dirname = os.path.dirname(file_path)
126
+ imports_js = get_all_imports(file_path)
127
+ for pkg,imps in imports_js.items():
128
+ if pkg not in ['context','nulines']:
129
+ full_imp_info = get_dot_fro_line(pkg,dirname,file_path=file_path,get_info=True)
130
+ if full_imp_info.get("local") == True:
131
+ local_imps.append(full_imp_info)
132
+ return local_imps
133
+ def get_all_pkg_paths(file_path):
134
+ pkg_paths = []
135
+ local_imps = return_local_imps(file_path)
136
+ for local_imp in local_imps:
137
+ curr_file_path = local_imp.get('file_path')
138
+ pkg_path = local_imp.get('pkg_path')
139
+ if pkg_path != None:
140
+ pkg_paths.append(pkg_path)
141
+ return pkg_paths
142
+ def get_cir_dir(pkg_path):
143
+ dirname = os.path.dirname(pkg_path)
144
+ dirbase = os.path.basename(dirname)
145
+ while True:
146
+ if dirname == "/home/flerb/Documents/pythonTools/modules/src/modules/abstract_utilities/src/abstract_utilities":
147
+ break
148
+ dirbase = os.path.basename(dirname)
149
+ dirname = os.path.dirname(dirname)
150
+ #input(f"{dirbase} is circular")
151
+ return dirbase
152
+ def is_circular(pkg_path):
153
+ pkg_paths = get_all_pkg_paths(pkg_path)
154
+ if pkg_path in pkg_paths:
155
+ return pkg_path
156
+ def are_circular(pkg_path,cir_dirs = None):
157
+ cir_dirs = cir_dirs or []
158
+ pkg_path = is_circular(pkg_path)
159
+ if pkg_path:
160
+ if pkg_path not in cir_dirs:
161
+ cir_dirs.append(pkg_path)
162
+ return cir_dirs
163
+
164
+
165
+ def build_dependency_graph(main_directory):
166
+ """Map each file to all local imports (by resolved pkg_path)."""
167
+ graph = defaultdict(list)
168
+ dirs, all_local_scripts = get_files_and_dirs(
169
+ main_directory,
170
+ allowed_exts='.py',
171
+ exclude_dirs=['depriciate', 'junk'],
172
+ files_only=True
173
+ )
174
+ for file_path in all_local_scripts:
175
+ deps = get_all_pkg_paths(file_path)
176
+ for dep in deps:
177
+ if dep and os.path.isfile(dep):
178
+ graph[file_path].append(dep)
179
+ return graph
180
+
181
+
182
+ def find_circular_chains(graph):
183
+ """Detect circular imports and return their full dependency paths."""
184
+ visited, cycles = set(), []
185
+
186
+ def dfs(node, path):
187
+ visited.add(node)
188
+ path.append(node)
189
+ for dep in graph.get(node, []):
190
+ if dep not in path:
191
+ dfs(dep, path.copy())
192
+ else:
193
+ # Found a circular import
194
+ cycle_start = path.index(dep)
195
+ cycle = path[cycle_start:] + [dep]
196
+ if cycle not in cycles:
197
+ cycles.append(cycle)
198
+ return
199
+
200
+ for start in graph:
201
+ dfs(start, [])
202
+ return cycles
203
+
204
+
205
+ def explain_circular_imports(cycles):
206
+ """Pretty-print circular import chains with file names and import lines."""
207
+ for i, cycle in enumerate(cycles, 1):
208
+ print(f"\n🔁 Circular import {i}:")
209
+ for j in range(len(cycle) - 1):
210
+ src, dst = cycle[j], cycle[j + 1]
211
+ print(f" {os.path.basename(src)} → {os.path.basename(dst)}")
212
+ print(f" ^ back to {os.path.basename(cycle[0])}")
213
+ main_directory = "/home/flerb/Documents/pythonTools/modules/src/modules/abstract_utilities/src/abstract_utilities"
214
+
215
+ graph = build_dependency_graph(main_directory)
216
+ cycles = find_circular_chains(graph)
217
+
218
+ if not cycles:
219
+ print("✅ No circular imports found.")
220
+ else:
221
+ print(f"❌ Found {len(cycles)} circular import(s).")
222
+ explain_circular_imports(cycles)
@@ -0,0 +1,118 @@
1
+ from abstract_utilities import *
2
+ import os
3
+ from collections import defaultdict
4
+
5
+ def get_path_or_init(pkg_info):
6
+ root_dirname = pkg_info.get("root_dirname")
7
+ pkg = pkg_info.get("pkg")
8
+ rel_path = pkg.replace('.', '/')
9
+ dirname = os.path.dirname(root_dirname)
10
+ pkg_path = os.path.join(dirname, rel_path)
11
+ pkg_py_path = f"{pkg_path}.py"
12
+ if os.path.isfile(pkg_py_path):
13
+ return pkg_py_path
14
+ pkg_init_path = os.path.join(pkg_path, '__init__.py')
15
+ if os.path.isdir(pkg_path) and os.path.isfile(pkg_init_path):
16
+ return pkg_init_path
17
+ # optional: silence instead of blocking input()
18
+ print(f"⚠️ not found == {pkg_info}")
19
+ return None
20
+
21
+
22
+ def get_dot_fro_line(line, dirname=None, file_path=None, get_info=False):
23
+ info_js = {"nuline": line, "og_line": line, "pkg": line, "dirname": dirname,
24
+ "file_path": file_path, "root_dirname": None, "local": False}
25
+ if dirname and is_file(dirname):
26
+ file_path = dirname
27
+ dirname = os.path.dirname(dirname)
28
+ info_js["file_path"] = file_path
29
+ info_js["dirname"] = dirname
30
+
31
+ from_line = line.split(FROM_TAG)[-1]
32
+ dot_fro = ""
33
+ for char in from_line:
34
+ if char != '.':
35
+ pkg = f"{dot_fro}{eatAll(from_line, '.')}"
36
+ nuline = f"from {pkg}"
37
+ info_js["nuline"] = nuline
38
+ info_js["pkg"] = pkg
39
+ break
40
+ if dirname:
41
+ info_js["root_dirname"] = dirname
42
+ dirbase = os.path.basename(dirname)
43
+ dirname = os.path.dirname(dirname)
44
+ dot_fro = f"{dirbase}.{dot_fro}"
45
+
46
+ if get_info:
47
+ if dot_fro and os.path.isdir(info_js.get("root_dirname") or ""):
48
+ info_js["local"] = True
49
+ info_js["pkg_path"] = get_path_or_init(info_js)
50
+ return info_js
51
+ return line
52
+
53
+
54
+ def return_local_imps(file_path):
55
+ local_imps = []
56
+ dirname = os.path.dirname(file_path)
57
+ imports_js = get_all_imports(file_path)
58
+ for pkg, imps in imports_js.items():
59
+ if pkg not in ['context', 'nulines']:
60
+ full_imp_info = get_dot_fro_line(pkg, dirname, file_path=file_path, get_info=True)
61
+ if full_imp_info.get("local"):
62
+ local_imps.append(full_imp_info)
63
+ return local_imps
64
+
65
+
66
+ def get_all_pkg_paths(file_path):
67
+ pkg_paths = []
68
+ local_imps = return_local_imps(file_path)
69
+ for local_imp in local_imps:
70
+ pkg_path = local_imp.get('pkg_path')
71
+ if pkg_path:
72
+ pkg_paths.append(pkg_path)
73
+ return pkg_paths
74
+
75
+
76
+ # --- NEW: Build dependency graph and detect circular imports ---
77
+
78
+ def build_graph(main_directory):
79
+ dirs, all_local_scripts = get_files_and_dirs(main_directory, allowd_exts='.py', files_only=True)
80
+ graph = defaultdict(set)
81
+ for file_path in all_local_scripts:
82
+ deps = get_all_pkg_paths(file_path)
83
+ for dep in deps:
84
+ if dep: # only valid files
85
+ graph[file_path].add(dep)
86
+ return graph
87
+
88
+
89
+ def find_cycles(graph):
90
+ visited, stack, cycles = set(), [], []
91
+
92
+ def dfs(node, path):
93
+ visited.add(node)
94
+ path.append(node)
95
+ for dep in graph.get(node, []):
96
+ if dep not in visited:
97
+ dfs(dep, path.copy())
98
+ elif dep in path:
99
+ cycle_start = path.index(dep)
100
+ cycles.append(path[cycle_start:] + [dep])
101
+
102
+ for node in graph:
103
+ if node not in visited:
104
+ dfs(node, [])
105
+ return cycles
106
+
107
+
108
+ if __name__ == "__main__":
109
+ main_directory = "/home/flerb/Documents/pythonTools/modules/src/modules/abstract_utilities/src/abstract_utilities"
110
+ graph = build_graph(main_directory)
111
+ cycles = find_cycles(graph)
112
+
113
+ if not cycles:
114
+ print("✅ No circular imports found.")
115
+ else:
116
+ print("❌ Circular imports detected:")
117
+ for cycle in cycles:
118
+ print(" → ".join(cycle))
@@ -0,0 +1,7 @@
1
+ from .imports import *
2
+ from .abstract_classes import *
3
+ from .caller_utils import *
4
+ from .class_utils import *
5
+ from .function_utils import *
6
+ from .module_utils import *
7
+ from .global_utils import *
@@ -1,10 +1,11 @@
1
- import inspect
1
+ from .imports import *
2
2
  class SingletonMeta(type):
3
3
  _instances = {}
4
4
  def __call__(cls, *args, **kwargs):
5
5
  if cls not in cls._instances:
6
6
  cls._instances[cls] = super(SingletonMeta, cls).__call__(*args, **kwargs)
7
7
  return cls._instances[cls]
8
+
8
9
  def get_inputs(cls, *args, **kwargs):
9
10
  """
10
11
  Dynamically construct a dataclass instance from args and kwargs,
@@ -0,0 +1,35 @@
1
+ from .imports import *
2
+ def get_caller(i: Optional[int] = None) -> str:
3
+ """
4
+ Return the filename of the calling frame.
5
+
6
+ Args:
7
+ i: Optional stack depth offset.
8
+ None = immediate caller (depth 1).
9
+
10
+ Returns:
11
+ Absolute path of the file for the stack frame.
12
+ """
13
+ depth = 1 if i is None else int(i)
14
+ stack = inspect.stack()
15
+ if depth >= len(stack):
16
+ depth = len(stack) - 1
17
+ return stack[depth].filename
18
+
19
+
20
+ def get_caller_path(i: Optional[int] = None) -> str:
21
+ """
22
+ Return the absolute path of the caller's file.
23
+ """
24
+ depth = 1 if i is None else int(i)
25
+ file_path = get_caller(depth + 1)
26
+ return os.path.realpath(file_path)
27
+
28
+
29
+ def get_caller_dir(i: Optional[int] = None) -> str:
30
+ """
31
+ Return the absolute directory of the caller's file.
32
+ """
33
+ depth = 1 if i is None else int(i)
34
+ abspath = get_caller_path(depth + 1)
35
+ return os.path.dirname(abspath)
@@ -0,0 +1,109 @@
1
+ """
2
+ Sheet: Class Utilities
3
+
4
+ Module: class_utils.py
5
+ Part of: abstract_utilities module
6
+ Author: putkoff
7
+ Date: 05/31/2023
8
+ Version: 0.1.2
9
+
10
+ This module contains utility functions tailored for handling classes, objects, and modules. It encapsulates operations like:
11
+ 1. Fetching and checking object types.
12
+ 2. Manipulating global variables.
13
+ 3. Checking object membership in a module.
14
+ 4. Inspecting function signatures and their arguments within a module.
15
+ 5. Calling functions with supplied arguments.
16
+ 6. Converting layout definitions into components.
17
+ 7. Retrieving attributes and methods of a module.
18
+
19
+ Function Overview:
20
+ ------------------
21
+ - get_type_list: Get a list of common Python types.
22
+ - remove_key: Remove a specified key from a dictionary.
23
+ - get_module_obj: Retrieve an object from a given module.
24
+ - spec_type_mod: Check if an object has a specific type.
25
+ - get_type_mod: Retrieve the type name of a given object.
26
+ - is_module_obj: Check if an object is part of a module.
27
+ - inspect_signature: Fetch the signature of a specified function.
28
+ - get_parameter_defaults: Fetch the default parameter values for a function.
29
+ - convert_layout_to_components: Convert a layout definition to its component representation.
30
+ - get_dir: List all attributes and methods of a module.
31
+ - get_proper_args: Call a function using either positional or keyword arguments.
32
+ - get_fun: Parse a dictionary to retrieve a function and call it.
33
+ - if_none_change: Replace a None object with a default value.
34
+ - call_functions: Call a specified function or method using provided arguments.
35
+ - process_args: Evaluate and process nested function calls in arguments.
36
+ - has_attribute: Check if a function exists in a module.
37
+ - mk_fun: Print a statement indicating the existence of a function in a module.
38
+
39
+ Dependencies:
40
+ -------------
41
+ - inspect
42
+ - json
43
+
44
+ Each function is furnished with its own docstring that elaborates on its purpose, expected inputs, and outputs.
45
+
46
+ """
47
+ from .imports import *
48
+
49
+
50
+ def inspect_signature(instance: any, function: str):
51
+ """
52
+ Inspects the signature of a function.
53
+
54
+ Args:
55
+ instance (any): The instance containing the function.
56
+ function (str): The name of the function to inspect.
57
+
58
+ Returns:
59
+ inspect.Signature: The signature of the function.
60
+ """
61
+ return inspect.signature(get_module_obj(instance, function))
62
+
63
+ def get_parameter_defaults(module, function):
64
+ """
65
+ Retrieves the default parameter values of a function.
66
+
67
+ Args:
68
+ module: The module instance.
69
+ function (str): The name of the function.
70
+
71
+ Returns:
72
+ dict: A dictionary containing the parameter names and their default values.
73
+ """
74
+ signature = inspect_signature(module, function)
75
+ if signature is None:
76
+ return {}
77
+ return json.dumps(remove_key({param_name: param.default if param.default != inspect.Parameter.empty else None for param_name, param in signature.parameters.items()}, 'icon'))
78
+
79
+ def convert_layout_to_components(instance: any = None, component: str = 'function', js: dict = {}):
80
+ """
81
+ Converts a layout to components.
82
+
83
+ Args:
84
+ instance (any, optional): The instance containing the components. Defaults to None.
85
+ component (str, optional): The name of the component. Defaults to 'function'.
86
+ js (dict, optional): The dictionary of component properties. Defaults to an empty dictionary.
87
+
88
+ Returns:
89
+ any: The result of the component conversion.
90
+ """
91
+ jsN = json.loads(get_parameter_defaults(instance, component))
92
+ keys = list(js.keys())
93
+ for key in jsN:
94
+ if key in js:
95
+ jsN[key] = js[key]
96
+ return call_functions_hard(instance, component, **jsN)
97
+ def get_class_inputs(cls, *args, **kwargs):
98
+ fields = list(cls.__annotations__.keys())
99
+ values = {}
100
+ args = list(args)
101
+ for field in fields:
102
+ if field in kwargs:
103
+ values[field] = kwargs[field]
104
+ elif args:
105
+ values[field] = args.pop(0)
106
+ else:
107
+ values[field] = getattr(cls(), field)
108
+ return cls(**values)
109
+