machineconfig 1.95__py3-none-any.whl → 1.97__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of machineconfig might be problematic. Click here for more details.

Files changed (504) hide show
  1. machineconfig/cluster/cloud_manager.py +445 -343
  2. machineconfig/cluster/data_transfer.py +63 -57
  3. machineconfig/cluster/distribute.py +284 -280
  4. machineconfig/cluster/file_manager.py +234 -237
  5. machineconfig/cluster/job_params.py +133 -133
  6. machineconfig/cluster/loader_runner.py +183 -149
  7. machineconfig/cluster/remote_machine.py +269 -252
  8. machineconfig/cluster/script_execution.py +215 -209
  9. machineconfig/cluster/script_notify_upon_completion.py +50 -43
  10. machineconfig/cluster/self_ssh.py +52 -54
  11. machineconfig/cluster/sessions_managers/__init__.py +0 -0
  12. machineconfig/cluster/sessions_managers/archive/__init__.py +0 -0
  13. machineconfig/{jobs/python → cluster/sessions_managers/archive}/create_zellij_template.py +5 -3
  14. machineconfig/cluster/sessions_managers/archive/session_managers.py +184 -0
  15. machineconfig/cluster/sessions_managers/demo_rich_zellij.py +0 -0
  16. machineconfig/cluster/sessions_managers/enhanced_command_runner.py +160 -0
  17. machineconfig/cluster/sessions_managers/wt_local.py +494 -0
  18. machineconfig/cluster/sessions_managers/wt_local_manager.py +577 -0
  19. machineconfig/cluster/sessions_managers/wt_remote.py +288 -0
  20. machineconfig/cluster/sessions_managers/wt_remote_manager.py +483 -0
  21. machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +196 -0
  22. machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +418 -0
  23. machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +175 -0
  24. machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +300 -0
  25. machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +228 -0
  26. machineconfig/cluster/sessions_managers/zellij_local.py +418 -0
  27. machineconfig/cluster/sessions_managers/zellij_local_manager.py +533 -0
  28. machineconfig/cluster/sessions_managers/zellij_remote.py +229 -0
  29. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +188 -0
  30. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +64 -0
  31. machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +126 -0
  32. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +334 -0
  33. machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +68 -0
  34. machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +119 -0
  35. machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +85 -0
  36. machineconfig/cluster/templates/cli_click.py +0 -1
  37. machineconfig/cluster/templates/cli_gooey.py +102 -104
  38. machineconfig/cluster/templates/run_cloud.py +51 -51
  39. machineconfig/cluster/templates/run_cluster.py +103 -59
  40. machineconfig/cluster/templates/run_remote.py +57 -58
  41. machineconfig/cluster/templates/utils.py +69 -36
  42. machineconfig/jobs/__pycache__/__init__.cpython-311.pyc +0 -0
  43. machineconfig/jobs/python/__pycache__/__init__.cpython-311.pyc +0 -0
  44. machineconfig/jobs/python/check_installations.py +258 -190
  45. machineconfig/jobs/python/create_bootable_media.py +7 -3
  46. machineconfig/jobs/python/python_cargo_build_share.py +50 -50
  47. machineconfig/jobs/python/python_ve_symlink.py +6 -6
  48. machineconfig/jobs/python/vscode/__pycache__/select_interpreter.cpython-311.pyc +0 -0
  49. machineconfig/jobs/python/vscode/api.py +1 -1
  50. machineconfig/jobs/python/vscode/link_ve.py +2 -2
  51. machineconfig/jobs/python/vscode/select_interpreter.py +9 -5
  52. machineconfig/jobs/python/vscode/sync_code.py +8 -5
  53. machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  54. machineconfig/jobs/python_custom_installers/archive/ngrok.py +1 -1
  55. machineconfig/jobs/python_custom_installers/dev/alacritty.py +3 -2
  56. machineconfig/jobs/python_custom_installers/dev/brave.py +7 -3
  57. machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +3 -4
  58. machineconfig/jobs/python_custom_installers/dev/code.py +3 -1
  59. machineconfig/jobs/python_custom_installers/dev/cursor.py +66 -5
  60. machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -1
  61. machineconfig/jobs/python_custom_installers/dev/espanso.py +13 -9
  62. machineconfig/jobs/python_custom_installers/dev/goes.py +2 -8
  63. machineconfig/jobs/python_custom_installers/dev/lvim.py +3 -2
  64. machineconfig/jobs/python_custom_installers/dev/nerdfont.py +1 -1
  65. machineconfig/jobs/python_custom_installers/dev/redis.py +7 -3
  66. machineconfig/jobs/python_custom_installers/dev/wezterm.py +8 -4
  67. machineconfig/jobs/python_custom_installers/dev/winget.py +194 -0
  68. machineconfig/jobs/python_custom_installers/{dev/docker.py → docker.py} +8 -3
  69. machineconfig/jobs/python_custom_installers/gh.py +4 -3
  70. machineconfig/jobs/python_custom_installers/hx.py +9 -8
  71. machineconfig/jobs/python_custom_installers/scripts/linux/vscode.sh +97 -30
  72. machineconfig/jobs/python_custom_installers/{dev/warp-cli.py → warp-cli.py} +1 -1
  73. machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  74. machineconfig/jobs/python_generic_installers/config.json +133 -9
  75. machineconfig/jobs/python_generic_installers/dev/config.json +208 -37
  76. machineconfig/jobs/python_generic_installers/update.py +3 -0
  77. machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  78. machineconfig/jobs/python_linux_installers/config.json +42 -6
  79. machineconfig/jobs/python_linux_installers/dev/config.json +79 -11
  80. machineconfig/jobs/python_windows_installers/config.json +6 -0
  81. machineconfig/profile/__pycache__/__init__.cpython-311.pyc +0 -0
  82. machineconfig/profile/__pycache__/create.cpython-311.pyc +0 -0
  83. machineconfig/profile/__pycache__/shell.cpython-311.pyc +0 -0
  84. machineconfig/profile/create.py +5 -5
  85. machineconfig/profile/create_hardlinks.py +5 -5
  86. machineconfig/profile/shell.py +44 -17
  87. machineconfig/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  88. machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
  89. machineconfig/scripts/linux/fire_agents +27 -0
  90. machineconfig/scripts/linux/mcinit +27 -0
  91. machineconfig/scripts/linux/wifi_conn +24 -0
  92. machineconfig/scripts/python/__pycache__/__init__.cpython-311.pyc +0 -0
  93. machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
  94. machineconfig/scripts/python/__pycache__/cloud_copy.cpython-311.pyc +0 -0
  95. machineconfig/scripts/python/__pycache__/cloud_mount.cpython-311.pyc +0 -0
  96. machineconfig/scripts/python/__pycache__/cloud_sync.cpython-311.pyc +0 -0
  97. machineconfig/scripts/python/__pycache__/croshell.cpython-311.pyc +0 -0
  98. machineconfig/scripts/python/__pycache__/devops.cpython-311.pyc +0 -0
  99. machineconfig/scripts/python/__pycache__/devops_backup_retrieve.cpython-311.pyc +0 -0
  100. machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-311.pyc +0 -0
  101. machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-311.pyc +0 -0
  102. machineconfig/scripts/python/__pycache__/fire_agents.cpython-311.pyc +0 -0
  103. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-311.pyc +0 -0
  104. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-313.pyc +0 -0
  105. machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-311.pyc +0 -0
  106. machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
  107. machineconfig/scripts/python/ai/__pycache__/init.cpython-311.pyc +0 -0
  108. machineconfig/scripts/python/ai/init.py +56 -0
  109. machineconfig/scripts/python/ai/rules/python/dev.md +31 -0
  110. machineconfig/scripts/python/archive/im2text.py +1 -3
  111. machineconfig/scripts/python/choose_wezterm_theme.py +3 -3
  112. machineconfig/scripts/python/cloud_copy.py +10 -10
  113. machineconfig/scripts/python/cloud_manager.py +77 -99
  114. machineconfig/scripts/python/cloud_mount.py +13 -12
  115. machineconfig/scripts/python/cloud_repo_sync.py +14 -11
  116. machineconfig/scripts/python/croshell.py +24 -21
  117. machineconfig/scripts/python/devops.py +12 -17
  118. machineconfig/scripts/python/devops_add_identity.py +32 -10
  119. machineconfig/scripts/python/devops_add_ssh_key.py +10 -10
  120. machineconfig/scripts/python/devops_backup_retrieve.py +9 -8
  121. machineconfig/scripts/python/devops_devapps_install.py +6 -6
  122. machineconfig/scripts/python/devops_update_repos.py +4 -3
  123. machineconfig/scripts/python/dotfile.py +10 -7
  124. machineconfig/scripts/python/fire_agents.py +69 -0
  125. machineconfig/scripts/python/fire_jobs.py +62 -65
  126. machineconfig/scripts/python/ftpx.py +8 -8
  127. machineconfig/scripts/python/get_zellij_cmd.py +3 -3
  128. machineconfig/scripts/python/gh_models.py +6 -4
  129. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.pyc +0 -0
  130. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
  131. machineconfig/scripts/python/helpers/__pycache__/cloud_helpers.cpython-311.pyc +0 -0
  132. machineconfig/scripts/python/helpers/__pycache__/helpers2.cpython-311.pyc +0 -0
  133. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-311.pyc +0 -0
  134. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-313.pyc +0 -0
  135. machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-311.pyc +0 -0
  136. machineconfig/scripts/python/helpers/cloud_helpers.py +12 -12
  137. machineconfig/scripts/python/helpers/helpers2.py +9 -8
  138. machineconfig/scripts/python/helpers/helpers4.py +23 -35
  139. machineconfig/scripts/python/helpers/repo_sync_helpers.py +17 -16
  140. machineconfig/scripts/python/mount_nfs.py +8 -11
  141. machineconfig/scripts/python/mount_nw_drive.py +4 -4
  142. machineconfig/scripts/python/mount_ssh.py +2 -2
  143. machineconfig/scripts/python/onetimeshare.py +56 -57
  144. machineconfig/scripts/python/pomodoro.py +55 -55
  145. machineconfig/scripts/python/repos.py +26 -18
  146. machineconfig/scripts/python/scheduler.py +70 -53
  147. machineconfig/scripts/python/snapshot.py +21 -24
  148. machineconfig/scripts/python/start_slidev.py +6 -5
  149. machineconfig/scripts/python/start_terminals.py +3 -1
  150. machineconfig/scripts/python/viewer.py +5 -4
  151. machineconfig/scripts/python/viewer_template.py +138 -140
  152. machineconfig/scripts/python/wifi_conn.py +412 -60
  153. machineconfig/scripts/python/wsl_windows_transfer.py +18 -3
  154. machineconfig/scripts/windows/mcinit.ps1 +4 -0
  155. machineconfig/settings/linters/.pylintrc +6 -7
  156. machineconfig/settings/lvim/windows/config.lua +0 -0
  157. machineconfig/settings/shells/bash/init.sh +6 -0
  158. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +7 -6
  159. machineconfig/settings/shells/pwsh/init.ps1 +6 -6
  160. machineconfig/settings/shells/wt/settings.json +51 -266
  161. machineconfig/setup_linux/web_shortcuts/interactive.sh +5 -2
  162. machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +3 -6
  163. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +11 -9
  164. machineconfig/utils/ai/url2md.py +2 -2
  165. machineconfig/utils/cloud/onedrive/setup_oauth.py +59 -0
  166. machineconfig/utils/cloud/onedrive/transaction.py +796 -0
  167. machineconfig/utils/code.py +22 -13
  168. machineconfig/utils/installer.py +78 -35
  169. machineconfig/utils/installer_utils/installer_abc.py +7 -6
  170. machineconfig/utils/installer_utils/installer_class.py +44 -25
  171. machineconfig/utils/io_save.py +107 -0
  172. machineconfig/utils/links.py +19 -15
  173. machineconfig/utils/options.py +4 -8
  174. machineconfig/utils/path.py +91 -78
  175. machineconfig/utils/path_reduced.py +608 -0
  176. machineconfig/utils/procs.py +110 -45
  177. machineconfig/utils/scheduling.py +312 -222
  178. machineconfig/utils/utils.py +7 -7
  179. machineconfig/utils/utils2.py +42 -0
  180. machineconfig/utils/utils5.py +84 -0
  181. machineconfig/utils/ve.py +49 -87
  182. {machineconfig-1.95.dist-info → machineconfig-1.97.dist-info}/METADATA +2 -2
  183. machineconfig-1.97.dist-info/RECORD +442 -0
  184. machineconfig/cluster/session_managers.py +0 -183
  185. machineconfig/cluster/templates/f.py +0 -4
  186. machineconfig/jobs/python/__pycache__/check_installations.cpython-311.pyc +0 -0
  187. machineconfig/jobs/python/__pycache__/checkout_version.cpython-311.pyc +0 -0
  188. machineconfig/jobs/python/__pycache__/python_ve_symlink.cpython-311.pyc +0 -0
  189. machineconfig/jobs/python/checkout_version.py +0 -123
  190. machineconfig/jobs/python/vscode/__pycache__/api.cpython-311.pyc +0 -0
  191. machineconfig/jobs/python/vscode/__pycache__/link_ve.cpython-311.pyc +0 -0
  192. machineconfig/jobs/python_custom_installers/__pycache__/hx.cpython-311.pyc +0 -0
  193. machineconfig/jobs/python_windows_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  194. machineconfig/scripts/python/.mypy_cache/.gitignore +0 -2
  195. machineconfig/scripts/python/.mypy_cache/3.11/@plugins_snapshot.json +0 -1
  196. machineconfig/scripts/python/.mypy_cache/3.11/__future__.data.json +0 -1
  197. machineconfig/scripts/python/.mypy_cache/3.11/__future__.meta.json +0 -1
  198. machineconfig/scripts/python/.mypy_cache/3.11/_ast.data.json +0 -1
  199. machineconfig/scripts/python/.mypy_cache/3.11/_ast.meta.json +0 -1
  200. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.data.json +0 -1
  201. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.meta.json +0 -1
  202. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.data.json +0 -1
  203. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.meta.json +0 -1
  204. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.data.json +0 -1
  205. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.meta.json +0 -1
  206. machineconfig/scripts/python/.mypy_cache/3.11/_compression.data.json +0 -1
  207. machineconfig/scripts/python/.mypy_cache/3.11/_compression.meta.json +0 -1
  208. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.data.json +0 -1
  209. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.meta.json +0 -1
  210. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.data.json +0 -1
  211. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.meta.json +0 -1
  212. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.data.json +0 -1
  213. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.meta.json +0 -1
  214. machineconfig/scripts/python/.mypy_cache/3.11/_io.data.json +0 -1
  215. machineconfig/scripts/python/.mypy_cache/3.11/_io.meta.json +0 -1
  216. machineconfig/scripts/python/.mypy_cache/3.11/_locale.data.json +0 -1
  217. machineconfig/scripts/python/.mypy_cache/3.11/_locale.meta.json +0 -1
  218. machineconfig/scripts/python/.mypy_cache/3.11/_stat.data.json +0 -1
  219. machineconfig/scripts/python/.mypy_cache/3.11/_stat.meta.json +0 -1
  220. machineconfig/scripts/python/.mypy_cache/3.11/_struct.data.json +0 -1
  221. machineconfig/scripts/python/.mypy_cache/3.11/_struct.meta.json +0 -1
  222. machineconfig/scripts/python/.mypy_cache/3.11/_thread.data.json +0 -1
  223. machineconfig/scripts/python/.mypy_cache/3.11/_thread.meta.json +0 -1
  224. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.data.json +0 -1
  225. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.meta.json +0 -1
  226. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.data.json +0 -1
  227. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.meta.json +0 -1
  228. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.data.json +0 -1
  229. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.meta.json +0 -1
  230. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.data.json +0 -1
  231. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.meta.json +0 -1
  232. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.data.json +0 -1
  233. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.meta.json +0 -1
  234. machineconfig/scripts/python/.mypy_cache/3.11/abc.data.json +0 -1
  235. machineconfig/scripts/python/.mypy_cache/3.11/abc.meta.json +0 -1
  236. machineconfig/scripts/python/.mypy_cache/3.11/argparse.data.json +0 -1
  237. machineconfig/scripts/python/.mypy_cache/3.11/argparse.meta.json +0 -1
  238. machineconfig/scripts/python/.mypy_cache/3.11/ast.data.json +0 -1
  239. machineconfig/scripts/python/.mypy_cache/3.11/ast.meta.json +0 -1
  240. machineconfig/scripts/python/.mypy_cache/3.11/binascii.data.json +0 -1
  241. machineconfig/scripts/python/.mypy_cache/3.11/binascii.meta.json +0 -1
  242. machineconfig/scripts/python/.mypy_cache/3.11/builtins.data.json +0 -1
  243. machineconfig/scripts/python/.mypy_cache/3.11/builtins.meta.json +0 -1
  244. machineconfig/scripts/python/.mypy_cache/3.11/bz2.data.json +0 -1
  245. machineconfig/scripts/python/.mypy_cache/3.11/bz2.meta.json +0 -1
  246. machineconfig/scripts/python/.mypy_cache/3.11/calendar.data.json +0 -1
  247. machineconfig/scripts/python/.mypy_cache/3.11/calendar.meta.json +0 -1
  248. machineconfig/scripts/python/.mypy_cache/3.11/codecs.data.json +0 -1
  249. machineconfig/scripts/python/.mypy_cache/3.11/codecs.meta.json +0 -1
  250. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.data.json +0 -1
  251. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.meta.json +0 -1
  252. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.data.json +0 -1
  253. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.meta.json +0 -1
  254. machineconfig/scripts/python/.mypy_cache/3.11/configparser.data.json +0 -1
  255. machineconfig/scripts/python/.mypy_cache/3.11/configparser.meta.json +0 -1
  256. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.data.json +0 -1
  257. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.meta.json +0 -1
  258. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.data.json +0 -1
  259. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.meta.json +0 -1
  260. machineconfig/scripts/python/.mypy_cache/3.11/datetime.data.json +0 -1
  261. machineconfig/scripts/python/.mypy_cache/3.11/datetime.meta.json +0 -1
  262. machineconfig/scripts/python/.mypy_cache/3.11/decimal.data.json +0 -1
  263. machineconfig/scripts/python/.mypy_cache/3.11/decimal.meta.json +0 -1
  264. machineconfig/scripts/python/.mypy_cache/3.11/dis.data.json +0 -1
  265. machineconfig/scripts/python/.mypy_cache/3.11/dis.meta.json +0 -1
  266. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.data.json +0 -1
  267. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.meta.json +0 -1
  268. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.data.json +0 -1
  269. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.meta.json +0 -1
  270. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.data.json +0 -1
  271. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.meta.json +0 -1
  272. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.data.json +0 -1
  273. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.meta.json +0 -1
  274. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.data.json +0 -1
  275. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.meta.json +0 -1
  276. machineconfig/scripts/python/.mypy_cache/3.11/email/header.data.json +0 -1
  277. machineconfig/scripts/python/.mypy_cache/3.11/email/header.meta.json +0 -1
  278. machineconfig/scripts/python/.mypy_cache/3.11/email/message.data.json +0 -1
  279. machineconfig/scripts/python/.mypy_cache/3.11/email/message.meta.json +0 -1
  280. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.data.json +0 -1
  281. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.meta.json +0 -1
  282. machineconfig/scripts/python/.mypy_cache/3.11/enum.data.json +0 -1
  283. machineconfig/scripts/python/.mypy_cache/3.11/enum.meta.json +0 -1
  284. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.data.json +0 -1
  285. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.meta.json +0 -1
  286. machineconfig/scripts/python/.mypy_cache/3.11/functools.data.json +0 -1
  287. machineconfig/scripts/python/.mypy_cache/3.11/functools.meta.json +0 -1
  288. machineconfig/scripts/python/.mypy_cache/3.11/gc.data.json +0 -1
  289. machineconfig/scripts/python/.mypy_cache/3.11/gc.meta.json +0 -1
  290. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.data.json +0 -1
  291. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.meta.json +0 -1
  292. machineconfig/scripts/python/.mypy_cache/3.11/getpass.data.json +0 -1
  293. machineconfig/scripts/python/.mypy_cache/3.11/getpass.meta.json +0 -1
  294. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.data.json +0 -1
  295. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.meta.json +0 -1
  296. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.data.json +0 -1
  297. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.meta.json +0 -1
  298. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.data.json +0 -1
  299. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.meta.json +0 -1
  300. machineconfig/scripts/python/.mypy_cache/3.11/git/config.data.json +0 -1
  301. machineconfig/scripts/python/.mypy_cache/3.11/git/config.meta.json +0 -1
  302. machineconfig/scripts/python/.mypy_cache/3.11/git/db.data.json +0 -1
  303. machineconfig/scripts/python/.mypy_cache/3.11/git/db.meta.json +0 -1
  304. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.data.json +0 -1
  305. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.meta.json +0 -1
  306. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.data.json +0 -1
  307. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.meta.json +0 -1
  308. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.data.json +0 -1
  309. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.meta.json +0 -1
  310. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.data.json +0 -1
  311. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.meta.json +0 -1
  312. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.data.json +0 -1
  313. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.meta.json +0 -1
  314. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.data.json +0 -1
  315. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.meta.json +0 -1
  316. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.data.json +0 -1
  317. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.meta.json +0 -1
  318. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.data.json +0 -1
  319. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.meta.json +0 -1
  320. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.data.json +0 -1
  321. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.meta.json +0 -1
  322. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.data.json +0 -1
  323. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.meta.json +0 -1
  324. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.data.json +0 -1
  325. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.meta.json +0 -1
  326. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.data.json +0 -1
  327. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.meta.json +0 -1
  328. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.data.json +0 -1
  329. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.meta.json +0 -1
  330. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.data.json +0 -1
  331. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.meta.json +0 -1
  332. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.data.json +0 -1
  333. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.meta.json +0 -1
  334. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.data.json +0 -1
  335. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.meta.json +0 -1
  336. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.data.json +0 -1
  337. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.meta.json +0 -1
  338. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.data.json +0 -1
  339. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.meta.json +0 -1
  340. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.data.json +0 -1
  341. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.meta.json +0 -1
  342. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.data.json +0 -1
  343. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.meta.json +0 -1
  344. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.data.json +0 -1
  345. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.meta.json +0 -1
  346. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.data.json +0 -1
  347. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.meta.json +0 -1
  348. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.data.json +0 -1
  349. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.meta.json +0 -1
  350. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.data.json +0 -1
  351. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.meta.json +0 -1
  352. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.data.json +0 -1
  353. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.meta.json +0 -1
  354. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.data.json +0 -1
  355. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.meta.json +0 -1
  356. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.data.json +0 -1
  357. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.meta.json +0 -1
  358. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.data.json +0 -1
  359. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.meta.json +0 -1
  360. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.data.json +0 -1
  361. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.meta.json +0 -1
  362. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.data.json +0 -1
  363. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.meta.json +0 -1
  364. machineconfig/scripts/python/.mypy_cache/3.11/git/types.data.json +0 -1
  365. machineconfig/scripts/python/.mypy_cache/3.11/git/types.meta.json +0 -1
  366. machineconfig/scripts/python/.mypy_cache/3.11/git/util.data.json +0 -1
  367. machineconfig/scripts/python/.mypy_cache/3.11/git/util.meta.json +0 -1
  368. machineconfig/scripts/python/.mypy_cache/3.11/glob.data.json +0 -1
  369. machineconfig/scripts/python/.mypy_cache/3.11/glob.meta.json +0 -1
  370. machineconfig/scripts/python/.mypy_cache/3.11/gzip.data.json +0 -1
  371. machineconfig/scripts/python/.mypy_cache/3.11/gzip.meta.json +0 -1
  372. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.data.json +0 -1
  373. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.meta.json +0 -1
  374. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.data.json +0 -1
  375. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.meta.json +0 -1
  376. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.data.json +0 -1
  377. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.meta.json +0 -1
  378. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.data.json +0 -1
  379. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.meta.json +0 -1
  380. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.data.json +0 -1
  381. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.meta.json +0 -1
  382. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.data.json +0 -1
  383. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.meta.json +0 -1
  384. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.data.json +0 -1
  385. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.meta.json +0 -1
  386. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.data.json +0 -1
  387. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.meta.json +0 -1
  388. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.data.json +0 -1
  389. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.meta.json +0 -1
  390. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.data.json +0 -1
  391. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.meta.json +0 -1
  392. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.data.json +0 -1
  393. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.meta.json +0 -1
  394. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.data.json +0 -1
  395. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.meta.json +0 -1
  396. machineconfig/scripts/python/.mypy_cache/3.11/inspect.data.json +0 -1
  397. machineconfig/scripts/python/.mypy_cache/3.11/inspect.meta.json +0 -1
  398. machineconfig/scripts/python/.mypy_cache/3.11/io.data.json +0 -1
  399. machineconfig/scripts/python/.mypy_cache/3.11/io.meta.json +0 -1
  400. machineconfig/scripts/python/.mypy_cache/3.11/itertools.data.json +0 -1
  401. machineconfig/scripts/python/.mypy_cache/3.11/itertools.meta.json +0 -1
  402. machineconfig/scripts/python/.mypy_cache/3.11/locale.data.json +0 -1
  403. machineconfig/scripts/python/.mypy_cache/3.11/locale.meta.json +0 -1
  404. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.data.json +0 -1
  405. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.meta.json +0 -1
  406. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.data.json +0 -1
  407. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.meta.json +0 -1
  408. machineconfig/scripts/python/.mypy_cache/3.11/mmap.data.json +0 -1
  409. machineconfig/scripts/python/.mypy_cache/3.11/mmap.meta.json +0 -1
  410. machineconfig/scripts/python/.mypy_cache/3.11/numbers.data.json +0 -1
  411. machineconfig/scripts/python/.mypy_cache/3.11/numbers.meta.json +0 -1
  412. machineconfig/scripts/python/.mypy_cache/3.11/opcode.data.json +0 -1
  413. machineconfig/scripts/python/.mypy_cache/3.11/opcode.meta.json +0 -1
  414. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.data.json +0 -1
  415. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.meta.json +0 -1
  416. machineconfig/scripts/python/.mypy_cache/3.11/os/path.data.json +0 -1
  417. machineconfig/scripts/python/.mypy_cache/3.11/os/path.meta.json +0 -1
  418. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.data.json +0 -1
  419. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.meta.json +0 -1
  420. machineconfig/scripts/python/.mypy_cache/3.11/platform.data.json +0 -1
  421. machineconfig/scripts/python/.mypy_cache/3.11/platform.meta.json +0 -1
  422. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.data.json +0 -1
  423. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.meta.json +0 -1
  424. machineconfig/scripts/python/.mypy_cache/3.11/re.data.json +0 -1
  425. machineconfig/scripts/python/.mypy_cache/3.11/re.meta.json +0 -1
  426. machineconfig/scripts/python/.mypy_cache/3.11/resource.data.json +0 -1
  427. machineconfig/scripts/python/.mypy_cache/3.11/resource.meta.json +0 -1
  428. machineconfig/scripts/python/.mypy_cache/3.11/shlex.data.json +0 -1
  429. machineconfig/scripts/python/.mypy_cache/3.11/shlex.meta.json +0 -1
  430. machineconfig/scripts/python/.mypy_cache/3.11/shutil.data.json +0 -1
  431. machineconfig/scripts/python/.mypy_cache/3.11/shutil.meta.json +0 -1
  432. machineconfig/scripts/python/.mypy_cache/3.11/signal.data.json +0 -1
  433. machineconfig/scripts/python/.mypy_cache/3.11/signal.meta.json +0 -1
  434. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.data.json +0 -1
  435. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.meta.json +0 -1
  436. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.data.json +0 -1
  437. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.meta.json +0 -1
  438. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.data.json +0 -1
  439. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.meta.json +0 -1
  440. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.data.json +0 -1
  441. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.meta.json +0 -1
  442. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.data.json +0 -1
  443. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.meta.json +0 -1
  444. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.data.json +0 -1
  445. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.meta.json +0 -1
  446. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.data.json +0 -1
  447. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.meta.json +0 -1
  448. machineconfig/scripts/python/.mypy_cache/3.11/stat.data.json +0 -1
  449. machineconfig/scripts/python/.mypy_cache/3.11/stat.meta.json +0 -1
  450. machineconfig/scripts/python/.mypy_cache/3.11/string.data.json +0 -1
  451. machineconfig/scripts/python/.mypy_cache/3.11/string.meta.json +0 -1
  452. machineconfig/scripts/python/.mypy_cache/3.11/struct.data.json +0 -1
  453. machineconfig/scripts/python/.mypy_cache/3.11/struct.meta.json +0 -1
  454. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.data.json +0 -1
  455. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.meta.json +0 -1
  456. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.data.json +0 -1
  457. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.meta.json +0 -1
  458. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.data.json +0 -1
  459. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.meta.json +0 -1
  460. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.data.json +0 -1
  461. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.meta.json +0 -1
  462. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.data.json +0 -1
  463. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.meta.json +0 -1
  464. machineconfig/scripts/python/.mypy_cache/3.11/threading.data.json +0 -1
  465. machineconfig/scripts/python/.mypy_cache/3.11/threading.meta.json +0 -1
  466. machineconfig/scripts/python/.mypy_cache/3.11/time.data.json +0 -1
  467. machineconfig/scripts/python/.mypy_cache/3.11/time.meta.json +0 -1
  468. machineconfig/scripts/python/.mypy_cache/3.11/types.data.json +0 -1
  469. machineconfig/scripts/python/.mypy_cache/3.11/types.meta.json +0 -1
  470. machineconfig/scripts/python/.mypy_cache/3.11/typing.data.json +0 -1
  471. machineconfig/scripts/python/.mypy_cache/3.11/typing.meta.json +0 -1
  472. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.data.json +0 -1
  473. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.meta.json +0 -1
  474. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.data.json +0 -1
  475. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.meta.json +0 -1
  476. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.data.json +0 -1
  477. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.meta.json +0 -1
  478. machineconfig/scripts/python/.mypy_cache/3.11/uuid.data.json +0 -1
  479. machineconfig/scripts/python/.mypy_cache/3.11/uuid.meta.json +0 -1
  480. machineconfig/scripts/python/.mypy_cache/3.11/warnings.data.json +0 -1
  481. machineconfig/scripts/python/.mypy_cache/3.11/warnings.meta.json +0 -1
  482. machineconfig/scripts/python/.mypy_cache/3.11/weakref.data.json +0 -1
  483. machineconfig/scripts/python/.mypy_cache/3.11/weakref.meta.json +0 -1
  484. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.data.json +0 -1
  485. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.meta.json +0 -1
  486. machineconfig/scripts/python/.mypy_cache/3.11/zlib.data.json +0 -1
  487. machineconfig/scripts/python/.mypy_cache/3.11/zlib.meta.json +0 -1
  488. machineconfig/scripts/python/.mypy_cache/CACHEDIR.TAG +0 -3
  489. machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-311.pyc +0 -0
  490. machineconfig/scripts/python/__pycache__/gh_models.cpython-311.pyc +0 -0
  491. machineconfig/scripts/python/__pycache__/url2md.cpython-311.pyc +0 -0
  492. machineconfig/scripts/python/__pycache__/viewer.cpython-311.pyc +0 -0
  493. machineconfig/scripts/python/__pycache__/vscode_api.cpython-311.pyc +0 -0
  494. machineconfig/settings/__pycache__/__init__.cpython-311.pyc +0 -0
  495. machineconfig/settings/linters/.ruff_cache/.gitignore +0 -2
  496. machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +0 -1
  497. machineconfig/settings/shells/ipy/profiles/default/__pycache__/__init__.cpython-311.pyc +0 -0
  498. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/__init__.cpython-311.pyc +0 -0
  499. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/playext.cpython-311.pyc +0 -0
  500. machineconfig/utils/ve_utils/ve1.py +0 -111
  501. machineconfig/utils/ve_utils/ve2.py +0 -155
  502. machineconfig-1.95.dist-info/RECORD +0 -712
  503. {machineconfig-1.95.dist-info → machineconfig-1.97.dist-info}/WHEEL +0 -0
  504. {machineconfig-1.95.dist-info → machineconfig-1.97.dist-info}/top_level.txt +0 -0
@@ -12,11 +12,11 @@ from machineconfig.scripts.python.helpers.helpers4 import search_for_files_of_in
12
12
  from machineconfig.scripts.python.helpers.helpers4 import convert_kwargs_to_fire_kwargs_str
13
13
  from machineconfig.scripts.python.helpers.helpers4 import parse_pyfile
14
14
  from machineconfig.scripts.python.helpers.helpers4 import get_import_module_code
15
- from machineconfig.utils.ve_utils.ve1 import get_repo_root
15
+ from machineconfig.utils.ve import get_repo_root, get_ve_activate_line, get_ve_path_and_ipython_profile
16
16
  from machineconfig.utils.utils import display_options, choose_one_option, PROGRAM_PATH, match_file_name, sanitize_path
17
- from machineconfig.utils.ve_utils.ve1 import get_ve_activate_line, get_ve_name_and_ipython_profile
18
- from crocodile.file_management import P, Read, Save
19
- from crocodile.core import randstr
17
+ from machineconfig.utils.path_reduced import P as PathExtended
18
+ from machineconfig.utils.io_save import save_toml
19
+ from machineconfig.utils.utils2 import randstr, read_toml
20
20
  import platform
21
21
  from typing import Optional
22
22
  import argparse
@@ -30,7 +30,8 @@ def main() -> None:
30
30
  parser = argparse.ArgumentParser()
31
31
  parser.add_argument("path", nargs='?', type=str, help="The directory containing the jobs", default=".")
32
32
  parser.add_argument("function", nargs='?', type=str, help="Fuction to run", default=None)
33
- # parser.add_argument("--function", "-f", type=str, help="The function to run", default="")
33
+
34
+ parser.add_argument("--init", "-I", type=str, help="init this repo", default="")
34
35
  parser.add_argument("--ve", "-v", type=str, help="virtual enviroment name", default="")
35
36
  parser.add_argument("--cmd", "-B", action="store_true", help="Create a cmd fire command to launch the the job asynchronously.")
36
37
  parser.add_argument("--interactive", "-i", action="store_true", help="Whether to run the job interactively using IPython")
@@ -51,32 +52,34 @@ def main() -> None:
51
52
  parser.add_argument("--zellij_tab", "-z", type=str, dest="zellij_tab", help="open in a new zellij tab")
52
53
  parser.add_argument("--watch", "-w", action="store_true", help="watch the file for changes")
53
54
  parser.add_argument("--kw", nargs="*", default=None, help="keyword arguments to pass to the function in the form of k1 v1 k2 v2 ... (meaning k1=v1, k2=v2, etc)")
54
-
55
55
  try:
56
56
  args = parser.parse_args()
57
57
  except Exception as ex:
58
58
  print(f"❌ Failed to parse arguments: {ex}")
59
59
  parser.print_help()
60
60
  raise ex
61
+ path_obj = sanitize_path(PathExtended.cwd())
62
+
63
+ if args.init != "":
64
+ from machineconfig.scripts.python.ai.init import add_ai_configs
65
+ add_ai_configs(repo_root=path_obj)
61
66
 
62
- path_obj = sanitize_path(P(args.path))
63
67
  if not path_obj.exists():
64
- path_obj = match_file_name(sub_string=args.path)
68
+ path_obj = match_file_name(sub_string=args.path, search_root=PathExtended.cwd())
65
69
  else: pass
66
-
67
70
  if path_obj.is_dir():
68
71
  print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
69
72
  files = search_for_files_of_interest(path_obj)
70
73
  choice_file = choose_one_option(options=files, fzf=True)
71
- choice_file = P(choice_file)
74
+ choice_file = PathExtended(choice_file)
72
75
  else:
73
76
  choice_file = path_obj
74
77
  repo_root = get_repo_root(str(choice_file))
75
- print(f"💾 Selected file: {choice_file}. Repo root: {repo_root}")
78
+ print(f"💾 Selected file: {choice_file}.\nRepo root: {repo_root}")
76
79
 
77
- ve_name_suggested, ipy_profile = get_ve_name_and_ipython_profile(choice_file)
80
+ ve_root_from_file, ipy_profile = get_ve_path_and_ipython_profile(choice_file)
78
81
  if ipy_profile is None: ipy_profile = "default"
79
- activate_ve_line = get_ve_activate_line(ve_name=args.ve or ve_name_suggested, a_path=str(choice_file))
82
+ activate_ve_line = get_ve_activate_line(ve_root=args.ve or ve_root_from_file or "$HOME/venvs/ve")
80
83
 
81
84
  # Convert args.kw to dictionary
82
85
  if choice_file.suffix == ".py":
@@ -94,13 +97,14 @@ def main() -> None:
94
97
  kwargs = {}
95
98
 
96
99
  # ========================= choosing function to run
100
+ choice_function: Optional[str] = None # Initialize to avoid unbound variable
97
101
  if args.choose_function or args.submit_to_cloud:
98
102
  if choice_file.suffix == ".py":
99
103
  options, func_args = parse_pyfile(file_path=str(choice_file))
100
104
  choice_function_tmp = display_options(msg="Choose a function to run", options=options, fzf=True, multi=False)
101
105
  assert isinstance(choice_function_tmp, str), f"choice_function must be a string. Got {type(choice_function_tmp)}"
102
106
  choice_index = options.index(choice_function_tmp)
103
- choice_function: Optional[str] = choice_function_tmp.split(' -- ')[0]
107
+ choice_function = choice_function_tmp.split(' -- ')[0]
104
108
  choice_function_args = func_args[choice_index]
105
109
 
106
110
  if choice_function == "RUN AS MAIN": choice_function = None
@@ -114,19 +118,26 @@ def main() -> None:
114
118
  if line == "": continue
115
119
  if line.startswith("echo"): continue
116
120
  options.append(line)
117
- choice_line = choose_one_option(options=options, fzf=True)
118
- choice_file = P.tmpfile(suffix=".sh").write_text(choice_line)
121
+ chosen_lines = display_options(msg="Choose a line to run", options=options, fzf=True, multi=True)
122
+ choice_file = PathExtended.tmpfile(suffix=".sh").write_text("\n".join(chosen_lines))
119
123
  choice_function = None
120
124
  else:
121
125
  choice_function = args.function
122
126
 
123
127
  if choice_file.suffix == ".py":
124
128
  if args.streamlit:
125
- from crocodile.environment import get_network_addresses
126
- local_ip_v4 = get_network_addresses()["local_ip_v4"]
129
+ import socket
130
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
131
+ try:
132
+ s.connect(('8.8.8.8', 1))
133
+ local_ip_v4 = s.getsockname()[0]
134
+ except Exception:
135
+ local_ip_v4 = socket.gethostbyname(socket.gethostname())
136
+ finally:
137
+ s.close()
127
138
  computer_name = platform.node()
128
139
  port = 8501
129
- toml_path: Optional[P] = None
140
+ toml_path: Optional[PathExtended] = None
130
141
  toml_path_maybe = choice_file.parent.joinpath(".streamlit/config.toml")
131
142
  if toml_path_maybe.exists():
132
143
  toml_path = toml_path_maybe
@@ -135,15 +146,15 @@ def main() -> None:
135
146
  if toml_path_maybe.exists(): toml_path = toml_path_maybe
136
147
  if toml_path is not None:
137
148
  print(f"📄 Reading config.toml @ {toml_path}")
138
- config = Read.toml(toml_path)
149
+ config = read_toml(toml_path)
139
150
  if "server" in config:
140
151
  if "port" in config["server"]:
141
152
  port = config["server"]["port"]
142
153
  secrets_path = toml_path.with_name("secrets.toml")
143
154
  if repo_root is not None:
144
- secrets_template_path = P.home().joinpath(f"dotfiles/creds/streamlit/{P(repo_root).name}/{choice_file.name}/secrets.toml")
155
+ secrets_template_path = PathExtended.home().joinpath(f"dotfiles/creds/streamlit/{PathExtended(repo_root).name}/{choice_file.name}/secrets.toml")
145
156
  if args.environment != "" and not secrets_path.exists() and secrets_template_path.exists():
146
- secrets_template = Read.toml(secrets_template_path)
157
+ secrets_template = read_toml(secrets_template_path)
147
158
  if args.environment == "ip": host_url = f"http://{local_ip_v4}:{port}/oauth2callback"
148
159
  elif args.environment == "localhost": host_url = f"http://localhost:{port}/oauth2callback"
149
160
  elif args.environment == "hostname": host_url = f"http://{computer_name}:{port}/oauth2callback"
@@ -152,7 +163,7 @@ def main() -> None:
152
163
  secrets_template["auth"]["redirect_uri"] = host_url
153
164
  secrets_template["auth"]["cookie_secret"] = randstr(35)
154
165
  secrets_template["auth"]["auth0"]["redirect_uri"] = host_url
155
- Save.toml(obj=secrets_template, path=secrets_path)
166
+ save_toml(obj=secrets_template, path=secrets_path)
156
167
  except Exception as ex:
157
168
  print(ex)
158
169
  raise ex
@@ -187,9 +198,9 @@ except (ImportError, ModuleNotFoundError) as ex:
187
198
  print(fr"❌ Failed to import `{choice_file}` as a module: {{ex}} ")
188
199
  print(fr"⚠️ Attempting import with ad-hoc `$PATH` manipulation. DO NOT pickle any objects in this session as correct deserialization cannot be guaranteed.")
189
200
  import sys
190
- sys.path.append(r'{P(choice_file).parent}')
201
+ sys.path.append(r'{PathExtended(choice_file).parent}')
191
202
  {repo_root_add}
192
- from {P(choice_file).stem} import *
203
+ from {PathExtended(choice_file).stem} import *
193
204
  print(fr"✅ Successfully imported `{choice_file}`")
194
205
  """
195
206
  if choice_function is not None:
@@ -207,7 +218,9 @@ try:
207
218
  except ImportError as _ex:
208
219
  print(r'''{txt}''')
209
220
  """ + txt
210
- choice_file = P.tmp().joinpath(f'tmp_scripts/python/{P(choice_file).parent.name}_{P(choice_file).stem}_{randstr()}.py').create(parents_only=True).write_text(txt)
221
+ choice_file = PathExtended.tmp().joinpath(f'tmp_scripts/python/{PathExtended(choice_file).parent.name}_{PathExtended(choice_file).stem}_{randstr()}.py')
222
+ choice_file.parent.mkdir(parents=True, exist_ok=True)
223
+ choice_file.write_text(txt)
211
224
 
212
225
  # ========================= determining basic command structure: putting together exe & choice_file & choice_function & pdb
213
226
  if args.debug:
@@ -227,7 +240,7 @@ except ImportError as _ex:
227
240
  if args.holdDirectory:
228
241
  command = f"{exe} {choice_file}"
229
242
  else:
230
- command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {P.cwd()}"
243
+ command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {PathExtended.cwd()}"
231
244
 
232
245
  elif args.cmd:
233
246
  command = rf""" cd /d {choice_file.parent} & {exe} {choice_file.name} """
@@ -236,12 +249,8 @@ except ImportError as _ex:
236
249
  kwargs_raw = " ".join(args.kw) if args.kw is not None else ""
237
250
  command = f"{exe} {choice_file} {kwargs_raw}"
238
251
  else:
239
- # command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {P.cwd()}"
252
+ # command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {PathExtended.cwd()}"
240
253
  command = f"{exe} {choice_file} "
241
- # this installs in ve env, which is not execution env
242
- # if "ipdb" in command: install_n_import("ipdb")
243
- # if "pudb" in command: install_n_import("pudb")
244
-
245
254
  if not args.cmd:
246
255
  if "ipdb" in command: command = f"pip install ipdb\n{command}"
247
256
  if "pudb" in command: command = f"pip install pudb\n{command}"
@@ -261,20 +270,23 @@ python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
261
270
  if choice_function is not None:
262
271
  command += f"--function {choice_function} "
263
272
 
264
- # try: install_n_import("clipboard").copy(command)
265
- # except Exception as ex: print(f"Failed to copy command to clipboard. {ex}")
266
-
267
273
  if args.Nprocess > 1:
268
- lines = [f""" zellij action new-tab --name nProcess{randstr(2)}"""]
269
- command = command.replace(". activate_ve", ". $HOME/scripts/activate_ve")
274
+ # lines = [f""" zellij action new-tab --name nProcess{randstr(2)}"""]
275
+ # command = command.replace(". activate_ve", ". $HOME/scripts/activate_ve")
276
+ # for an_arg in range(args.Nprocess):
277
+ # sub_command = f"{command} --idx={an_arg} --idx_max={args.Nprocess}"
278
+ # if args.optimized:
279
+ # sub_command = sub_command.replace("python ", "python -OO ")
280
+ # sub_command_path = PathExtended.tmpfile(suffix=".sh").write_text(sub_command)
281
+ # lines.append(f"""zellij action new-pane -- bash {sub_command_path} """)
282
+ # lines.append("sleep 5") # python tends to freeze if you launch instances within 1 microsecond of each other
283
+ # command = "\n".join(lines)
284
+ tab_config = {}
270
285
  for an_arg in range(args.Nprocess):
271
- sub_command = f"{command} --idx={an_arg} --idx_max={args.Nprocess}"
272
- if args.optimized:
273
- sub_command = sub_command.replace("python ", "python -OO ")
274
- sub_command_path = P.tmpfile(suffix=".sh").write_text(sub_command)
275
- lines.append(f"""zellij action new-pane -- bash {sub_command_path} """)
276
- lines.append("sleep 5") # python tends to freeze if you launch instances within 1 microsecond of each other
277
- command = "\n".join(lines)
286
+ tab_config[f"tab{an_arg}"] = (str(PathExtended.cwd()), f"uv run python -m fire {choice_file} {choice_function} --idx={an_arg} --idx_max={args.Nprocess}")
287
+ from machineconfig.cluster.sessions_managers.zellij_local import run_zellij_layout
288
+ run_zellij_layout(tab_config=tab_config, session_name=None)
289
+ return None
278
290
 
279
291
  if args.optimized:
280
292
  # note that in ipython, optimization is meaningless.
@@ -288,7 +300,7 @@ python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
288
300
  console = Console()
289
301
 
290
302
  if args.zellij_tab is not None:
291
- comman_path__ = P.tmpfile(suffix=".sh").write_text(command)
303
+ comman_path__ = PathExtended.tmpfile(suffix=".sh").write_text(command)
292
304
  console.print(Panel(Syntax(command, lexer="shell"), title=f"🔥 fire command @ {comman_path__}: "), style="bold red")
293
305
  import subprocess
294
306
  existing_tab_names = subprocess.run(["zellij", "action", "query-tab-names"], capture_output=True, text=True, check=True).stdout.splitlines()
@@ -296,27 +308,12 @@ python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
296
308
  print(f"⚠️ Tab name `{args.zellij_tab}` already exists. Please choose a different name.")
297
309
  # args.zellij_tab = input("Please enter a new tab name: ")
298
310
  args.zellij_tab += f"_{randstr(3)}"
299
- command = f"""
300
- echo "Sleep 1 seconds to allow zellij to create a new tab"
301
- sleep 1
302
- zellij action new-tab --name {args.zellij_tab}
303
- echo "Sleep 2 seconds to allow zellij to go to the new tab"
304
- sleep 2
305
- zellij action go-to-tab-name {args.zellij_tab}
306
- echo "Sleep 2 seconds to allow zellij to start the new pane"
307
- sleep 2
308
- zellij action new-pane --direction down -- /bin/bash {comman_path__}
309
- echo "Sleep 2 seconds to allow zellij to start the new pane"
310
- sleep 1
311
- zellij action move-focus up; sleep 2
312
- echo "Sleep 2 seconds to allow zellij to close the pane"
313
- sleep 1
314
- zellij action close-pane; sleep 2
315
- """
311
+ from machineconfig.cluster.sessions_managers.zellij_local import run_command_in_zellij_tab
312
+ command = run_command_in_zellij_tab(command=str(comman_path__), tab_name=args.zellij_tab, cwd=None)
316
313
  if args.watch: command = "watchexec --restart --exts py,sh,ps1 " + command
317
314
  if args.git_pull: command = f"\ngit -C {choice_file.parent} pull\n" + command
318
315
  if args.PathExport:
319
- if platform.system() == "Linux": export_line = f"""export PYTHONPATH="{repo_root}""" + """:${PYTHONPATH}" """
316
+ if platform.system() in ["Linux", "Darwin"]: export_line = f"""export PYTHONPATH="{repo_root}""" + """:${PYTHONPATH}" """
320
317
  elif platform.system() == "Windows":
321
318
  # export_line = f"""set PYTHONPATH="{repo_root}""" + """:%PYTHONPATH%" """
322
319
  # powershell equivalent
@@ -326,9 +323,9 @@ zellij action close-pane; sleep 2
326
323
  command = export_line + "\n" + command
327
324
 
328
325
  program_path = os.environ.get("op_script", None)
329
- program_path = P(program_path) if program_path is not None else PROGRAM_PATH
326
+ program_path = PathExtended(program_path) if program_path is not None else PROGRAM_PATH
330
327
  if args.loop:
331
- if platform.system() == "Linux":
328
+ if platform.system() in ["Linux", "Darwin"]:
332
329
  command = command + "\nsleep 0.5"
333
330
  elif platform.system() == "Windows":
334
331
  # command = command + "timeout 0.5\n"
@@ -7,9 +7,9 @@ Currently, the only way to work around this is to predifine the host in ~/.ssh/c
7
7
 
8
8
  import argparse
9
9
  from crocodile.meta import SSH
10
- from crocodile.core import Struct
11
- from crocodile.file_management import P
10
+ from machineconfig.utils.path_reduced import P as PathExtended
12
11
  from machineconfig.scripts.python.helpers.helpers2 import ES
12
+ from machineconfig.utils.utils2 import pprint
13
13
 
14
14
 
15
15
  def main():
@@ -43,12 +43,12 @@ def main():
43
43
  ┃ Cannot use expand symbol `{ES}` in both source and target
44
44
  ┃ This creates a cyclical inference dependency
45
45
  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
46
- else: target = P(args.target).expanduser().absolute()
46
+ else: target = PathExtended(args.target).expanduser().absolute()
47
47
  source = target.collapseuser().as_posix()
48
48
  else:
49
49
  source = ":".join(args.source.split(":")[1:])
50
50
  if args.target == ES: target = None
51
- else: target = P(args.target).expanduser().absolute().as_posix()
51
+ else: target = PathExtended(args.target).expanduser().absolute().as_posix()
52
52
 
53
53
  elif ":" in args.target and (args.target[1] != ":" if len(args.target) > 1 else True): # avoid the case of "C:/":
54
54
  source_is_remote = False
@@ -66,7 +66,7 @@ def main():
66
66
  else:
67
67
  target = ":".join(args.target.split(":")[1:])
68
68
  if args.source == ES: source = None
69
- else: source = P(args.source).expanduser().absolute()
69
+ else: source = PathExtended(args.source).expanduser().absolute()
70
70
 
71
71
  else:
72
72
  raise ValueError("""
@@ -76,7 +76,7 @@ def main():
76
76
  ┃ Format should be: machine:path
77
77
  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
78
78
 
79
- Struct({"source": str(source), "target": str(target), "machine": machine}).print(as_config=True, title="CLI Resolution")
79
+ pprint({"source": str(source), "target": str(target), "machine": machine}, "CLI Resolution")
80
80
 
81
81
  from paramiko.ssh_exception import AuthenticationException # type: ignore
82
82
  try:
@@ -107,7 +107,7 @@ def main():
107
107
  │ Downloading from cloud to local...
108
108
  └────────────────────────────────────────────────────────────────""")
109
109
  ssh.run_locally(f"cloud_copy :^ {target}").print()
110
- received_file = P(target) # type: ignore
110
+ received_file = PathExtended(target) # type: ignore
111
111
  else:
112
112
  if source_is_remote:
113
113
  assert source is not None, """
@@ -132,7 +132,7 @@ def main():
132
132
  └────────────────────────────────────────────────────────────────""")
133
133
  received_file = ssh.copy_from_here(source=source, target=target, z=args.zipFirst, r=args.recursive)
134
134
 
135
- if source_is_remote and isinstance(received_file, P):
135
+ if source_is_remote and isinstance(received_file, PathExtended):
136
136
  print(f"""
137
137
  ┌────────────────────────────────────────────────────────────────
138
138
  │ 📁 File Received
@@ -1,7 +1,7 @@
1
- from crocodile.file_management import P
1
+ from pathlib import Path
2
2
 
3
3
 
4
- def get_zellij_cmd(wd1: P, wd2: P) -> str:
4
+ def get_zellij_cmd(wd1: Path, wd2: Path) -> str:
5
5
  _ = wd1, wd2
6
6
  lines = [""" zellij action new-tab --name gitdiff""",
7
7
  """zellij action new-pane --direction down --name local --cwd ./data """,
@@ -11,4 +11,4 @@ def get_zellij_cmd(wd1: P, wd2: P) -> str:
11
11
  """zellij action write-chars "cd '{wd2}' """,
12
12
  """git status" """
13
13
  ]
14
- return "; ".join(lines)
14
+ return "; ".join(lines)
@@ -1,11 +1,13 @@
1
1
  # as per https://github.com/marketplace/models/azure-openai/o1-preview
2
2
  from openai import OpenAI
3
- from crocodile.file_management import Read, P
3
+ from machineconfig.utils.path_reduced import P as PathExtended
4
+ from machineconfig.utils.utils2 import read_ini
4
5
  from rich import print as rprint
5
6
  from rich.panel import Panel
7
+ from typing import Any
6
8
 
7
9
 
8
- gh_token = Read.ini(P.home().joinpath("dotfiles/creds/git/git_host_tokens.ini"))['thisismygitrepo']['newLongterm']
10
+ gh_token = read_ini(PathExtended.home().joinpath("dotfiles/creds/git/git_host_tokens.ini"))['thisismygitrepo']['newLongterm']
9
11
  endpoint = "https://models.inference.ai.azure.com"
10
12
  model_name_preferences = ["o3-mini", "o1-preview", "o1-mini", "GPT-4o", "GPT-4-o-mini"]
11
13
  client__ = OpenAI(
@@ -14,7 +16,7 @@ client__ = OpenAI(
14
16
  )
15
17
 
16
18
 
17
- def get_response(client, model_name: str, messages: list[dict[str, str]]):
19
+ def get_response(client: Any, model_name: str, messages: list[dict[str, str]]):
18
20
  print(f"""
19
21
  ┌────────────────────────────────────────────────────────────────
20
22
  │ 🤖 Querying Model: {model_name}
@@ -78,7 +80,7 @@ def interactive_chat():
78
80
  title=f"🤖 AI ({model_name})",
79
81
  border_style="blue"
80
82
  ))
81
- except:
83
+ except Exception:
82
84
  # Fallback if rich formatting fails
83
85
  print(f"""
84
86
  ┌────────────────────────────────────────────────────────────────
@@ -1,5 +1,5 @@
1
- from crocodile.core import Struct
2
- from crocodile.file_management import P, Read
1
+ from pathlib import Path
2
+ from machineconfig.utils.utils2 import pprint, read_json, read_ini
3
3
  from pydantic import ConfigDict
4
4
  from pydantic.dataclasses import dataclass
5
5
  from typing import Optional
@@ -46,18 +46,18 @@ class Args():
46
46
  config: Optional[str] = None
47
47
 
48
48
  @staticmethod
49
- def from_config(config_path: P):
50
- return Args(**Read.json(config_path))
49
+ def from_config(config_path: Path):
50
+ return Args(**read_json(config_path))
51
51
 
52
52
 
53
- def find_cloud_config(path: P):
53
+ def find_cloud_config(path: Path):
54
54
  display_header(f"Searching for cloud configuration file @ {path}")
55
55
 
56
56
  for _i in range(len(path.parts)):
57
57
  if path.joinpath("cloud.json").exists():
58
58
  res = Args.from_config(path.joinpath("cloud.json"))
59
59
  display_success(f"Found cloud config at: {path.joinpath('cloud.json')}")
60
- Struct(res.__dict__).print(as_config=True, title="Cloud Config")
60
+ pprint(res.__dict__, "Cloud Config")
61
61
  return res
62
62
  path = path.parent
63
63
 
@@ -65,10 +65,10 @@ def find_cloud_config(path: P):
65
65
  return None
66
66
 
67
67
 
68
- def absolute(path: str) -> P:
69
- obj = P(path).expanduser()
68
+ def absolute(path: str) -> Path:
69
+ obj = Path(path).expanduser()
70
70
  if not path.startswith(".") and obj.exists(): return obj
71
- try_absing = P.cwd().joinpath(path)
71
+ try_absing = Path.cwd().joinpath(path)
72
72
  if try_absing.exists(): return try_absing
73
73
  display_warning(f"Path {path} could not be resolved to absolute path.")
74
74
  display_warning("Trying to resolve symlinks (this may result in unintended paths).")
@@ -88,7 +88,7 @@ def get_secure_share_cloud_config(interactive: bool, cloud: Optional[str]) -> Ar
88
88
  console.print(f"☁️ Using cloud from environment: {cloud}")
89
89
  else:
90
90
  try:
91
- default_cloud__ = Read.ini(DEFAULTS_PATH)['general']['rclone_config_name']
91
+ default_cloud__ = read_ini(DEFAULTS_PATH)['general']['rclone_config_name']
92
92
  except Exception:
93
93
  default_cloud__ = 'No default cloud found.'
94
94
  if default_cloud__ == 'No default cloud found.' or interactive:
@@ -98,7 +98,7 @@ def get_secure_share_cloud_config(interactive: bool, cloud: Optional[str]) -> Ar
98
98
  cloud = default_cloud__
99
99
  console.print(f"☁️ Using default cloud: {cloud}")
100
100
 
101
- default_password_path = P.home().joinpath("dotfiles/creds/passwords/quick_password")
101
+ default_password_path = Path.home().joinpath("dotfiles/creds/passwords/quick_password")
102
102
  if default_password_path.exists():
103
103
  pwd = default_password_path.read_text().strip()
104
104
  default_message = "defaults to quick_password"
@@ -112,7 +112,7 @@ def get_secure_share_cloud_config(interactive: bool, cloud: Optional[str]) -> Ar
112
112
  rel2home=True, root="myshare", os_specific=False,)
113
113
 
114
114
  display_success("Using SecureShare cloud config")
115
- Struct(res.__dict__).print(as_config=True, title="SecureShare Config")
115
+ pprint(res.__dict__, "SecureShare Config")
116
116
  return res
117
117
 
118
118
  def display_header(title: str):
@@ -1,7 +1,6 @@
1
- from crocodile.core import Struct
2
- from crocodile.file_management import Read
3
1
  from machineconfig.scripts.python.helpers.cloud_helpers import Args, ArgsDefaults, absolute, find_cloud_config, get_secure_share_cloud_config
4
2
  from machineconfig.utils.utils import DEFAULTS_PATH
3
+ from machineconfig.utils.utils2 import read_ini, pprint
5
4
  from typing import Optional
6
5
  from rich.console import Console
7
6
  from rich.panel import Panel
@@ -54,7 +53,7 @@ def parse_cloud_source_target(args: Args, source: str, target: str) -> tuple[str
54
53
  maybe_config = tmp_maybe_config
55
54
 
56
55
  if maybe_config is None:
57
- default_cloud: str=Read.ini(DEFAULTS_PATH)['general']['rclone_config_name']
56
+ default_cloud: str=read_ini(DEFAULTS_PATH)['general']['rclone_config_name']
58
57
  console.print(Panel(f"⚠️ No cloud config found. Using default cloud: {default_cloud}", width=150, border_style="yellow"))
59
58
  source = default_cloud + ":" + source[1:]
60
59
  else:
@@ -74,7 +73,7 @@ def parse_cloud_source_target(args: Args, source: str, target: str) -> tuple[str
74
73
  maybe_config = find_cloud_config(path)
75
74
 
76
75
  if maybe_config is None:
77
- default_cloud = Read.ini(DEFAULTS_PATH)['general']['rclone_config_name']
76
+ default_cloud = read_ini(DEFAULTS_PATH)['general']['rclone_config_name']
78
77
  console.print(Panel(f"⚠️ No cloud config found. Using default cloud: {default_cloud}", width=150, border_style="yellow"))
79
78
  target = default_cloud + ":" + target[1:]
80
79
  print("target mutated to:", target, f"because of default cloud being {default_cloud}")
@@ -97,7 +96,8 @@ def parse_cloud_source_target(args: Args, source: str, target: str) -> tuple[str
97
96
  if len(source_parts) > 1 and source_parts[1] == ES: # the source path is to be inferred from target.
98
97
  assert ES not in target, f"You can't use expand symbol `{ES}` in both source and target. Cyclical inference dependency arised."
99
98
  target_obj = absolute(target)
100
- remote_path = target_obj.get_remote_path(os_specific=os_specific, root=root, rel2home=rel2home, strict=False)
99
+ from machineconfig.utils.path_reduced import P as PathExtended
100
+ remote_path = PathExtended(target_obj).get_remote_path(os_specific=os_specific, root=root, rel2home=rel2home, strict=False)
101
101
  source = f"{cloud}:{remote_path.as_posix()}"
102
102
  else: # source path is mentioned, target? maybe.
103
103
  if target == ES: # target path is to be inferred from source.
@@ -115,7 +115,8 @@ def parse_cloud_source_target(args: Args, source: str, target: str) -> tuple[str
115
115
  if len(target_parts) > 1 and target_parts[1] == ES: # the target path is to be inferred from source.
116
116
  assert ES not in source, "You can't use $ in both source and target. Cyclical inference dependency arised."
117
117
  source_obj = absolute(source)
118
- remote_path = source_obj.get_remote_path(os_specific=os_specific, root=root, rel2home=rel2home, strict=False)
118
+ from machineconfig.utils.path_reduced import P as PathExtended
119
+ remote_path = PathExtended(source_obj).get_remote_path(os_specific=os_specific, root=root, rel2home=rel2home, strict=False)
119
120
  target = f"{cloud}:{remote_path.as_posix()}"
120
121
  else: # target path is mentioned, source? maybe.
121
122
  target = str(target)
@@ -130,6 +131,6 @@ def parse_cloud_source_target(args: Args, source: str, target: str) -> tuple[str
130
131
  raise ValueError(f"Either source or target must be a remote path (i.e. machine:path)\nGot: source: `{source}`, target: `{target}`")
131
132
 
132
133
  console.print(Panel("🔍 Path resolution complete", title="[bold blue]Resolution[/bold blue]", border_style="blue"))
133
- Struct({"cloud": cloud, "source": str(source), "target": str(target)}).print(as_config=True, title="CLI Resolution")
134
+ pprint({"cloud": cloud, "source": str(source), "target": str(target)}, "CLI Resolution")
134
135
  _ = pwd, encrypt, zip_arg, share
135
- return cloud, str(source), str(target)
136
+ return cloud, str(source), str(target)
@@ -2,16 +2,16 @@
2
2
  from typing import Any, Callable, Optional
3
3
  import inspect
4
4
  import os
5
- import argparse
5
+ # import argparse
6
6
  from crocodile.core import Display
7
- from crocodile.file_management import P
8
- from machineconfig.utils.utils import choose_ssh_host
7
+ from machineconfig.utils.path_reduced import P as PathExtended
8
+ # from machineconfig.utils.utils import choose_ssh_host
9
9
 
10
10
 
11
- def search_for_files_of_interest(path_obj: P):
11
+ def search_for_files_of_interest(path_obj: PathExtended):
12
12
  if path_obj.joinpath(".venv").exists():
13
13
  path_objects = path_obj.search("*", not_in=[".venv"]).list
14
- files: list[P] = []
14
+ files: list[PathExtended] = []
15
15
  for a_path_obj in path_objects:
16
16
  files += search_for_files_of_interest(path_obj=a_path_obj)
17
17
  return files
@@ -28,19 +28,11 @@ def convert_kwargs_to_fire_kwargs_str(kwargs: dict[str, Any]) -> str:
28
28
  if not kwargs: # empty dict
29
29
  kwargs_str = ''
30
30
  else:
31
- if len(kwargs) == 1:
32
- kwargs_str = f""" --{list(kwargs.keys())[0]} {list(kwargs.values())[0]} """
33
- else:
34
- # print(f"len(kwargs) = {len(kwargs)}")
35
- tmp_list: list[str] = []
36
- for k, v in kwargs.items():
37
- if v is not None:
38
- item = f'"{k}": "{v}"'
39
- else:
40
- item = f'"{k}": None'
41
- tmp_list.append(item)
42
- tmp__ = ", ".join(tmp_list)
43
- kwargs_str = "'{" + tmp__ + "}'"
31
+ # For fire module, all keyword arguments should be passed as --key value pairs
32
+ tmp_list: list[str] = []
33
+ for k, v in kwargs.items():
34
+ tmp_list.append(f"--{k} {v}")
35
+ kwargs_str = " " + " ".join(tmp_list) + " "
44
36
  return kwargs_str
45
37
 
46
38
 
@@ -51,7 +43,7 @@ def parse_pyfile(file_path: str):
51
43
  func_args: list[list[args_spec]] = [[]] # this firt prepopulated dict is for the option 'RUN AS MAIN' which has no args
52
44
 
53
45
  import ast
54
- parsed_ast = ast.parse(P(file_path).read_text(encoding='utf-8'))
46
+ parsed_ast = ast.parse(PathExtended(file_path).read_text(encoding='utf-8'))
55
47
  functions = [
56
48
  node
57
49
  for node in ast.walk(parsed_ast)
@@ -73,12 +65,8 @@ def parse_pyfile(file_path: str):
73
65
  if arg.annotation is not None:
74
66
  try: type_ = arg.annotation.__dict__['id']
75
67
  except KeyError as ke:
76
- # type_ = arg.annotation.__name__
77
- # print(f"Failed to get type for {arg.annotation}. {ke}")
78
- # Struct(get_attrs(arg.annotation)).print(as_yaml=True)
79
68
  type_ = "Any" # e.g. a callable object
80
69
  _ = ke
81
- # raise ke
82
70
  else: type_ = "Any"
83
71
  default_tmp = function.args.defaults[idx] if idx < len(function.args.defaults) else None
84
72
  if default_tmp is None: default = None
@@ -123,18 +111,18 @@ def get_attrs_recursively(obj: Any):
123
111
  return obj
124
112
 
125
113
 
126
- def run_on_remote(func_file: str, args: argparse.Namespace):
127
- host = choose_ssh_host(multi=False)
128
- assert isinstance(host, str), f"host must be a string. Got {type(host)}"
129
- from machineconfig.cluster.remote_machine import RemoteMachine, RemoteMachineConfig
130
- config = RemoteMachineConfig(copy_repo=True, update_repo=False, update_essential_repos=True,
131
- notify_upon_completion=True, ssh_params=dict(host=host),
132
- # to_email=None, email_config_name='enaut',
133
- data=[],
134
- ipython=False, interactive=args.interactive, pdb=False, pudb=args.debug, wrap_in_try_except=False,
135
- transfer_method="sftp")
136
- m = RemoteMachine(func=func_file, func_kwargs=None, config=config)
137
- m.run()
114
+ # def run_on_remote(func_file: str, args: argparse.Namespace):
115
+ # host = choose_ssh_host(multi=False)
116
+ # assert isinstance(host, str), f"host must be a string. Got {type(host)}"
117
+ # from machineconfig.cluster.remote_machine import RemoteMachine, RemoteMachineConfig
118
+ # config = RemoteMachineConfig(copy_repo=True, update_repo=False, update_essential_repos=True,
119
+ # notify_upon_completion=True, ssh_params=dict(host=host),
120
+ # # to_email=None, email_config_name='enaut',
121
+ # data=[],
122
+ # ipython=False, interactive=args.interactive, pdb=False, pudb=args.debug, wrap_in_try_except=False,
123
+ # transfer_method="sftp")
124
+ # m = RemoteMachine(func=func_file, func_kwargs=None, config=config)
125
+ # m.run()
138
126
 
139
127
 
140
128
  def find_repo_root_path(start_path: str) -> Optional[str]: