machineconfig 1.94__py3-none-any.whl → 1.96__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 (529) hide show
  1. machineconfig/cluster/cloud_manager.py +445 -343
  2. machineconfig/cluster/data_transfer.py +63 -56
  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/linux/msc/lid.sh +2 -4
  44. machineconfig/jobs/linux/msc/network.sh +3 -6
  45. machineconfig/jobs/python/__pycache__/__init__.cpython-311.pyc +0 -0
  46. machineconfig/jobs/python/check_installations.py +258 -190
  47. machineconfig/jobs/python/create_bootable_media.py +7 -3
  48. machineconfig/jobs/python/python_cargo_build_share.py +50 -50
  49. machineconfig/jobs/python/python_ve_symlink.py +10 -10
  50. machineconfig/jobs/python/vscode/__pycache__/select_interpreter.cpython-311.pyc +0 -0
  51. machineconfig/jobs/python/vscode/api.py +3 -3
  52. machineconfig/jobs/python/vscode/link_ve.py +6 -6
  53. machineconfig/jobs/python/vscode/select_interpreter.py +13 -9
  54. machineconfig/jobs/python/vscode/sync_code.py +14 -11
  55. machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  56. machineconfig/jobs/python_custom_installers/archive/ngrok.py +5 -5
  57. machineconfig/jobs/python_custom_installers/dev/aider.py +4 -4
  58. machineconfig/jobs/python_custom_installers/dev/alacritty.py +7 -6
  59. machineconfig/jobs/python_custom_installers/dev/brave.py +11 -7
  60. machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +7 -8
  61. machineconfig/jobs/python_custom_installers/dev/code.py +7 -5
  62. machineconfig/jobs/python_custom_installers/dev/cursor.py +66 -5
  63. machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +4 -5
  64. machineconfig/jobs/python_custom_installers/dev/espanso.py +21 -17
  65. machineconfig/jobs/python_custom_installers/dev/goes.py +6 -12
  66. machineconfig/jobs/python_custom_installers/dev/lvim.py +7 -6
  67. machineconfig/jobs/python_custom_installers/dev/nerdfont.py +5 -5
  68. machineconfig/jobs/python_custom_installers/dev/redis.py +11 -7
  69. machineconfig/jobs/python_custom_installers/dev/wezterm.py +12 -8
  70. machineconfig/jobs/python_custom_installers/dev/winget.py +194 -0
  71. machineconfig/jobs/python_custom_installers/{dev/docker.py → docker.py} +12 -7
  72. machineconfig/jobs/python_custom_installers/gh.py +10 -9
  73. machineconfig/jobs/python_custom_installers/hx.py +36 -65
  74. machineconfig/jobs/python_custom_installers/scripts/linux/brave.sh +4 -8
  75. machineconfig/jobs/python_custom_installers/scripts/linux/docker.sh +5 -10
  76. machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +3 -6
  77. machineconfig/jobs/python_custom_installers/scripts/linux/edge.sh +3 -6
  78. machineconfig/jobs/python_custom_installers/scripts/linux/nerdfont.sh +5 -10
  79. machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +4 -8
  80. machineconfig/jobs/python_custom_installers/scripts/linux/redis.sh +5 -10
  81. machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +6 -12
  82. machineconfig/jobs/python_custom_installers/scripts/linux/vscode.sh +101 -33
  83. machineconfig/jobs/python_custom_installers/scripts/linux/warp-cli.sh +5 -10
  84. machineconfig/jobs/python_custom_installers/scripts/linux/wezterm.sh +3 -6
  85. machineconfig/jobs/python_custom_installers/{dev/warp-cli.py → warp-cli.py} +5 -5
  86. machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  87. machineconfig/jobs/python_generic_installers/config.json +133 -9
  88. machineconfig/jobs/python_generic_installers/dev/config.json +208 -37
  89. machineconfig/jobs/python_generic_installers/update.py +3 -0
  90. machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  91. machineconfig/jobs/python_linux_installers/config.json +42 -6
  92. machineconfig/jobs/python_linux_installers/dev/config.json +79 -11
  93. machineconfig/jobs/python_windows_installers/config.json +6 -0
  94. machineconfig/profile/__pycache__/__init__.cpython-311.pyc +0 -0
  95. machineconfig/profile/__pycache__/create.cpython-311.pyc +0 -0
  96. machineconfig/profile/__pycache__/shell.cpython-311.pyc +0 -0
  97. machineconfig/profile/create.py +5 -5
  98. machineconfig/profile/create_hardlinks.py +5 -5
  99. machineconfig/profile/shell.py +69 -63
  100. machineconfig/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  101. machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
  102. machineconfig/scripts/cloud/init.sh +9 -18
  103. machineconfig/scripts/linux/fire +5 -24
  104. machineconfig/scripts/linux/fire_agents +27 -0
  105. machineconfig/scripts/linux/share_cloud.sh +6 -12
  106. machineconfig/scripts/linux/wifi_conn +24 -0
  107. machineconfig/scripts/python/__pycache__/__init__.cpython-311.pyc +0 -0
  108. machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
  109. machineconfig/scripts/python/__pycache__/cloud_copy.cpython-311.pyc +0 -0
  110. machineconfig/scripts/python/__pycache__/cloud_mount.cpython-311.pyc +0 -0
  111. machineconfig/scripts/python/__pycache__/cloud_sync.cpython-311.pyc +0 -0
  112. machineconfig/scripts/python/__pycache__/croshell.cpython-311.pyc +0 -0
  113. machineconfig/scripts/python/__pycache__/devops.cpython-311.pyc +0 -0
  114. machineconfig/scripts/python/__pycache__/devops_backup_retrieve.cpython-311.pyc +0 -0
  115. machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-311.pyc +0 -0
  116. machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-311.pyc +0 -0
  117. machineconfig/scripts/python/__pycache__/fire_agents.cpython-311.pyc +0 -0
  118. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-311.pyc +0 -0
  119. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-313.pyc +0 -0
  120. machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-311.pyc +0 -0
  121. machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
  122. machineconfig/scripts/python/archive/im2text.py +28 -30
  123. machineconfig/scripts/python/archive/tmate_conn.py +10 -13
  124. machineconfig/scripts/python/archive/tmate_start.py +12 -16
  125. machineconfig/scripts/python/choose_wezterm_theme.py +12 -21
  126. machineconfig/scripts/python/cloud_copy.py +49 -104
  127. machineconfig/scripts/python/cloud_manager.py +77 -91
  128. machineconfig/scripts/python/cloud_mount.py +36 -46
  129. machineconfig/scripts/python/cloud_repo_sync.py +33 -79
  130. machineconfig/scripts/python/cloud_sync.py +35 -45
  131. machineconfig/scripts/python/croshell.py +70 -92
  132. machineconfig/scripts/python/devops.py +54 -113
  133. machineconfig/scripts/python/devops_add_identity.py +71 -109
  134. machineconfig/scripts/python/devops_add_ssh_key.py +42 -149
  135. machineconfig/scripts/python/devops_backup_retrieve.py +31 -119
  136. machineconfig/scripts/python/devops_devapps_install.py +6 -10
  137. machineconfig/scripts/python/devops_update_repos.py +5 -4
  138. machineconfig/scripts/python/dotfile.py +10 -7
  139. machineconfig/scripts/python/fire_agents.py +69 -0
  140. machineconfig/scripts/python/fire_jobs.py +117 -78
  141. machineconfig/scripts/python/ftpx.py +8 -8
  142. machineconfig/scripts/python/get_zellij_cmd.py +3 -3
  143. machineconfig/scripts/python/gh_models.py +6 -4
  144. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.pyc +0 -0
  145. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
  146. machineconfig/scripts/python/helpers/__pycache__/cloud_helpers.cpython-311.pyc +0 -0
  147. machineconfig/scripts/python/helpers/__pycache__/helpers2.cpython-311.pyc +0 -0
  148. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-311.pyc +0 -0
  149. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-313.pyc +0 -0
  150. machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-311.pyc +0 -0
  151. machineconfig/scripts/python/helpers/cloud_helpers.py +49 -46
  152. machineconfig/scripts/python/helpers/helpers2.py +26 -39
  153. machineconfig/scripts/python/helpers/helpers4.py +23 -35
  154. machineconfig/scripts/python/helpers/repo_sync_helpers.py +33 -67
  155. machineconfig/scripts/python/mount_nfs.py +8 -11
  156. machineconfig/scripts/python/mount_nw_drive.py +4 -4
  157. machineconfig/scripts/python/mount_ssh.py +2 -2
  158. machineconfig/scripts/python/onetimeshare.py +56 -57
  159. machineconfig/scripts/python/pomodoro.py +55 -55
  160. machineconfig/scripts/python/repos.py +72 -49
  161. machineconfig/scripts/python/scheduler.py +70 -53
  162. machineconfig/scripts/python/snapshot.py +21 -24
  163. machineconfig/scripts/python/start_slidev.py +6 -5
  164. machineconfig/scripts/python/start_terminals.py +3 -1
  165. machineconfig/scripts/python/viewer.py +5 -4
  166. machineconfig/scripts/python/viewer_template.py +138 -140
  167. machineconfig/scripts/python/wifi_conn.py +416 -62
  168. machineconfig/scripts/python/wsl_windows_transfer.py +18 -3
  169. machineconfig/scripts/windows/fire.ps1 +27 -15
  170. machineconfig/settings/linters/.pylintrc +6 -7
  171. machineconfig/settings/lvim/windows/config.lua +0 -0
  172. machineconfig/settings/shells/bash/init.sh +6 -0
  173. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +7 -6
  174. machineconfig/settings/shells/pwsh/init.ps1 +6 -6
  175. machineconfig/settings/shells/wt/settings.json +51 -266
  176. machineconfig/setup_linux/nix/cli_installation.sh +9 -18
  177. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +3 -6
  178. machineconfig/setup_linux/web_shortcuts/all.sh +5 -10
  179. machineconfig/setup_linux/web_shortcuts/ascii_art.sh +7 -14
  180. machineconfig/setup_linux/web_shortcuts/croshell.sh +6 -12
  181. machineconfig/setup_linux/web_shortcuts/interactive.sh +39 -70
  182. machineconfig/setup_linux/web_shortcuts/ssh.sh +8 -16
  183. machineconfig/setup_linux/web_shortcuts/update_system.sh +7 -14
  184. machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +3 -6
  185. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +27 -21
  186. machineconfig/utils/ai/browser_user_wrapper.py +60 -45
  187. machineconfig/utils/ai/generate_file_checklist.py +4 -7
  188. machineconfig/utils/ai/url2md.py +15 -7
  189. machineconfig/utils/cloud/onedrive/setup_oauth.py +59 -0
  190. machineconfig/utils/cloud/onedrive/transaction.py +796 -0
  191. machineconfig/utils/{utils_code.py → code.py} +25 -22
  192. machineconfig/utils/installer.py +81 -44
  193. machineconfig/utils/installer_utils/installer_abc.py +7 -6
  194. machineconfig/utils/installer_utils/installer_class.py +44 -25
  195. machineconfig/utils/io_save.py +107 -0
  196. machineconfig/utils/{utils_links.py → links.py} +28 -35
  197. machineconfig/utils/{utils_options.py → options.py} +14 -28
  198. machineconfig/utils/path.py +112 -0
  199. machineconfig/utils/path_reduced.py +608 -0
  200. machineconfig/utils/procs.py +134 -73
  201. machineconfig/utils/scheduling.py +312 -222
  202. machineconfig/utils/utils.py +19 -26
  203. machineconfig/utils/utils2.py +42 -0
  204. machineconfig/utils/utils5.py +84 -0
  205. machineconfig/utils/ve.py +49 -103
  206. {machineconfig-1.94.dist-info → machineconfig-1.96.dist-info}/METADATA +5 -3
  207. machineconfig-1.96.dist-info/RECORD +437 -0
  208. {machineconfig-1.94.dist-info → machineconfig-1.96.dist-info}/WHEEL +1 -1
  209. machineconfig/cluster/session_managers.py +0 -183
  210. machineconfig/cluster/templates/f.py +0 -4
  211. machineconfig/jobs/python/__pycache__/check_installations.cpython-311.pyc +0 -0
  212. machineconfig/jobs/python/__pycache__/checkout_version.cpython-311.pyc +0 -0
  213. machineconfig/jobs/python/__pycache__/python_ve_symlink.cpython-311.pyc +0 -0
  214. machineconfig/jobs/python/checkout_version.py +0 -123
  215. machineconfig/jobs/python/vscode/__pycache__/api.cpython-311.pyc +0 -0
  216. machineconfig/jobs/python/vscode/__pycache__/link_ve.cpython-311.pyc +0 -0
  217. machineconfig/jobs/python_custom_installers/__pycache__/hx.cpython-311.pyc +0 -0
  218. machineconfig/jobs/python_windows_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  219. machineconfig/scripts/python/.mypy_cache/.gitignore +0 -2
  220. machineconfig/scripts/python/.mypy_cache/3.11/@plugins_snapshot.json +0 -1
  221. machineconfig/scripts/python/.mypy_cache/3.11/__future__.data.json +0 -1
  222. machineconfig/scripts/python/.mypy_cache/3.11/__future__.meta.json +0 -1
  223. machineconfig/scripts/python/.mypy_cache/3.11/_ast.data.json +0 -1
  224. machineconfig/scripts/python/.mypy_cache/3.11/_ast.meta.json +0 -1
  225. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.data.json +0 -1
  226. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.meta.json +0 -1
  227. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.data.json +0 -1
  228. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.meta.json +0 -1
  229. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.data.json +0 -1
  230. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.meta.json +0 -1
  231. machineconfig/scripts/python/.mypy_cache/3.11/_compression.data.json +0 -1
  232. machineconfig/scripts/python/.mypy_cache/3.11/_compression.meta.json +0 -1
  233. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.data.json +0 -1
  234. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.meta.json +0 -1
  235. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.data.json +0 -1
  236. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.meta.json +0 -1
  237. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.data.json +0 -1
  238. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.meta.json +0 -1
  239. machineconfig/scripts/python/.mypy_cache/3.11/_io.data.json +0 -1
  240. machineconfig/scripts/python/.mypy_cache/3.11/_io.meta.json +0 -1
  241. machineconfig/scripts/python/.mypy_cache/3.11/_locale.data.json +0 -1
  242. machineconfig/scripts/python/.mypy_cache/3.11/_locale.meta.json +0 -1
  243. machineconfig/scripts/python/.mypy_cache/3.11/_stat.data.json +0 -1
  244. machineconfig/scripts/python/.mypy_cache/3.11/_stat.meta.json +0 -1
  245. machineconfig/scripts/python/.mypy_cache/3.11/_struct.data.json +0 -1
  246. machineconfig/scripts/python/.mypy_cache/3.11/_struct.meta.json +0 -1
  247. machineconfig/scripts/python/.mypy_cache/3.11/_thread.data.json +0 -1
  248. machineconfig/scripts/python/.mypy_cache/3.11/_thread.meta.json +0 -1
  249. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.data.json +0 -1
  250. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.meta.json +0 -1
  251. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.data.json +0 -1
  252. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.meta.json +0 -1
  253. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.data.json +0 -1
  254. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.meta.json +0 -1
  255. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.data.json +0 -1
  256. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.meta.json +0 -1
  257. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.data.json +0 -1
  258. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.meta.json +0 -1
  259. machineconfig/scripts/python/.mypy_cache/3.11/abc.data.json +0 -1
  260. machineconfig/scripts/python/.mypy_cache/3.11/abc.meta.json +0 -1
  261. machineconfig/scripts/python/.mypy_cache/3.11/argparse.data.json +0 -1
  262. machineconfig/scripts/python/.mypy_cache/3.11/argparse.meta.json +0 -1
  263. machineconfig/scripts/python/.mypy_cache/3.11/ast.data.json +0 -1
  264. machineconfig/scripts/python/.mypy_cache/3.11/ast.meta.json +0 -1
  265. machineconfig/scripts/python/.mypy_cache/3.11/binascii.data.json +0 -1
  266. machineconfig/scripts/python/.mypy_cache/3.11/binascii.meta.json +0 -1
  267. machineconfig/scripts/python/.mypy_cache/3.11/builtins.data.json +0 -1
  268. machineconfig/scripts/python/.mypy_cache/3.11/builtins.meta.json +0 -1
  269. machineconfig/scripts/python/.mypy_cache/3.11/bz2.data.json +0 -1
  270. machineconfig/scripts/python/.mypy_cache/3.11/bz2.meta.json +0 -1
  271. machineconfig/scripts/python/.mypy_cache/3.11/calendar.data.json +0 -1
  272. machineconfig/scripts/python/.mypy_cache/3.11/calendar.meta.json +0 -1
  273. machineconfig/scripts/python/.mypy_cache/3.11/codecs.data.json +0 -1
  274. machineconfig/scripts/python/.mypy_cache/3.11/codecs.meta.json +0 -1
  275. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.data.json +0 -1
  276. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.meta.json +0 -1
  277. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.data.json +0 -1
  278. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.meta.json +0 -1
  279. machineconfig/scripts/python/.mypy_cache/3.11/configparser.data.json +0 -1
  280. machineconfig/scripts/python/.mypy_cache/3.11/configparser.meta.json +0 -1
  281. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.data.json +0 -1
  282. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.meta.json +0 -1
  283. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.data.json +0 -1
  284. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.meta.json +0 -1
  285. machineconfig/scripts/python/.mypy_cache/3.11/datetime.data.json +0 -1
  286. machineconfig/scripts/python/.mypy_cache/3.11/datetime.meta.json +0 -1
  287. machineconfig/scripts/python/.mypy_cache/3.11/decimal.data.json +0 -1
  288. machineconfig/scripts/python/.mypy_cache/3.11/decimal.meta.json +0 -1
  289. machineconfig/scripts/python/.mypy_cache/3.11/dis.data.json +0 -1
  290. machineconfig/scripts/python/.mypy_cache/3.11/dis.meta.json +0 -1
  291. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.data.json +0 -1
  292. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.meta.json +0 -1
  293. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.data.json +0 -1
  294. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.meta.json +0 -1
  295. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.data.json +0 -1
  296. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.meta.json +0 -1
  297. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.data.json +0 -1
  298. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.meta.json +0 -1
  299. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.data.json +0 -1
  300. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.meta.json +0 -1
  301. machineconfig/scripts/python/.mypy_cache/3.11/email/header.data.json +0 -1
  302. machineconfig/scripts/python/.mypy_cache/3.11/email/header.meta.json +0 -1
  303. machineconfig/scripts/python/.mypy_cache/3.11/email/message.data.json +0 -1
  304. machineconfig/scripts/python/.mypy_cache/3.11/email/message.meta.json +0 -1
  305. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.data.json +0 -1
  306. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.meta.json +0 -1
  307. machineconfig/scripts/python/.mypy_cache/3.11/enum.data.json +0 -1
  308. machineconfig/scripts/python/.mypy_cache/3.11/enum.meta.json +0 -1
  309. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.data.json +0 -1
  310. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.meta.json +0 -1
  311. machineconfig/scripts/python/.mypy_cache/3.11/functools.data.json +0 -1
  312. machineconfig/scripts/python/.mypy_cache/3.11/functools.meta.json +0 -1
  313. machineconfig/scripts/python/.mypy_cache/3.11/gc.data.json +0 -1
  314. machineconfig/scripts/python/.mypy_cache/3.11/gc.meta.json +0 -1
  315. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.data.json +0 -1
  316. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.meta.json +0 -1
  317. machineconfig/scripts/python/.mypy_cache/3.11/getpass.data.json +0 -1
  318. machineconfig/scripts/python/.mypy_cache/3.11/getpass.meta.json +0 -1
  319. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.data.json +0 -1
  320. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.meta.json +0 -1
  321. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.data.json +0 -1
  322. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.meta.json +0 -1
  323. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.data.json +0 -1
  324. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.meta.json +0 -1
  325. machineconfig/scripts/python/.mypy_cache/3.11/git/config.data.json +0 -1
  326. machineconfig/scripts/python/.mypy_cache/3.11/git/config.meta.json +0 -1
  327. machineconfig/scripts/python/.mypy_cache/3.11/git/db.data.json +0 -1
  328. machineconfig/scripts/python/.mypy_cache/3.11/git/db.meta.json +0 -1
  329. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.data.json +0 -1
  330. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.meta.json +0 -1
  331. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.data.json +0 -1
  332. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.meta.json +0 -1
  333. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.data.json +0 -1
  334. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.meta.json +0 -1
  335. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.data.json +0 -1
  336. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.meta.json +0 -1
  337. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.data.json +0 -1
  338. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.meta.json +0 -1
  339. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.data.json +0 -1
  340. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.meta.json +0 -1
  341. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.data.json +0 -1
  342. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.meta.json +0 -1
  343. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.data.json +0 -1
  344. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.meta.json +0 -1
  345. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.data.json +0 -1
  346. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.meta.json +0 -1
  347. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.data.json +0 -1
  348. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.meta.json +0 -1
  349. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.data.json +0 -1
  350. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.meta.json +0 -1
  351. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.data.json +0 -1
  352. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.meta.json +0 -1
  353. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.data.json +0 -1
  354. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.meta.json +0 -1
  355. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.data.json +0 -1
  356. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.meta.json +0 -1
  357. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.data.json +0 -1
  358. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.meta.json +0 -1
  359. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.data.json +0 -1
  360. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.meta.json +0 -1
  361. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.data.json +0 -1
  362. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.meta.json +0 -1
  363. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.data.json +0 -1
  364. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.meta.json +0 -1
  365. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.data.json +0 -1
  366. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.meta.json +0 -1
  367. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.data.json +0 -1
  368. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.meta.json +0 -1
  369. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.data.json +0 -1
  370. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.meta.json +0 -1
  371. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.data.json +0 -1
  372. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.meta.json +0 -1
  373. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.data.json +0 -1
  374. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.meta.json +0 -1
  375. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.data.json +0 -1
  376. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.meta.json +0 -1
  377. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.data.json +0 -1
  378. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.meta.json +0 -1
  379. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.data.json +0 -1
  380. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.meta.json +0 -1
  381. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.data.json +0 -1
  382. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.meta.json +0 -1
  383. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.data.json +0 -1
  384. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.meta.json +0 -1
  385. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.data.json +0 -1
  386. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.meta.json +0 -1
  387. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.data.json +0 -1
  388. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.meta.json +0 -1
  389. machineconfig/scripts/python/.mypy_cache/3.11/git/types.data.json +0 -1
  390. machineconfig/scripts/python/.mypy_cache/3.11/git/types.meta.json +0 -1
  391. machineconfig/scripts/python/.mypy_cache/3.11/git/util.data.json +0 -1
  392. machineconfig/scripts/python/.mypy_cache/3.11/git/util.meta.json +0 -1
  393. machineconfig/scripts/python/.mypy_cache/3.11/glob.data.json +0 -1
  394. machineconfig/scripts/python/.mypy_cache/3.11/glob.meta.json +0 -1
  395. machineconfig/scripts/python/.mypy_cache/3.11/gzip.data.json +0 -1
  396. machineconfig/scripts/python/.mypy_cache/3.11/gzip.meta.json +0 -1
  397. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.data.json +0 -1
  398. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.meta.json +0 -1
  399. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.data.json +0 -1
  400. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.meta.json +0 -1
  401. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.data.json +0 -1
  402. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.meta.json +0 -1
  403. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.data.json +0 -1
  404. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.meta.json +0 -1
  405. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.data.json +0 -1
  406. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.meta.json +0 -1
  407. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.data.json +0 -1
  408. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.meta.json +0 -1
  409. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.data.json +0 -1
  410. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.meta.json +0 -1
  411. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.data.json +0 -1
  412. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.meta.json +0 -1
  413. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.data.json +0 -1
  414. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.meta.json +0 -1
  415. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.data.json +0 -1
  416. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.meta.json +0 -1
  417. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.data.json +0 -1
  418. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.meta.json +0 -1
  419. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.data.json +0 -1
  420. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.meta.json +0 -1
  421. machineconfig/scripts/python/.mypy_cache/3.11/inspect.data.json +0 -1
  422. machineconfig/scripts/python/.mypy_cache/3.11/inspect.meta.json +0 -1
  423. machineconfig/scripts/python/.mypy_cache/3.11/io.data.json +0 -1
  424. machineconfig/scripts/python/.mypy_cache/3.11/io.meta.json +0 -1
  425. machineconfig/scripts/python/.mypy_cache/3.11/itertools.data.json +0 -1
  426. machineconfig/scripts/python/.mypy_cache/3.11/itertools.meta.json +0 -1
  427. machineconfig/scripts/python/.mypy_cache/3.11/locale.data.json +0 -1
  428. machineconfig/scripts/python/.mypy_cache/3.11/locale.meta.json +0 -1
  429. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.data.json +0 -1
  430. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.meta.json +0 -1
  431. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.data.json +0 -1
  432. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.meta.json +0 -1
  433. machineconfig/scripts/python/.mypy_cache/3.11/mmap.data.json +0 -1
  434. machineconfig/scripts/python/.mypy_cache/3.11/mmap.meta.json +0 -1
  435. machineconfig/scripts/python/.mypy_cache/3.11/numbers.data.json +0 -1
  436. machineconfig/scripts/python/.mypy_cache/3.11/numbers.meta.json +0 -1
  437. machineconfig/scripts/python/.mypy_cache/3.11/opcode.data.json +0 -1
  438. machineconfig/scripts/python/.mypy_cache/3.11/opcode.meta.json +0 -1
  439. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.data.json +0 -1
  440. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.meta.json +0 -1
  441. machineconfig/scripts/python/.mypy_cache/3.11/os/path.data.json +0 -1
  442. machineconfig/scripts/python/.mypy_cache/3.11/os/path.meta.json +0 -1
  443. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.data.json +0 -1
  444. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.meta.json +0 -1
  445. machineconfig/scripts/python/.mypy_cache/3.11/platform.data.json +0 -1
  446. machineconfig/scripts/python/.mypy_cache/3.11/platform.meta.json +0 -1
  447. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.data.json +0 -1
  448. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.meta.json +0 -1
  449. machineconfig/scripts/python/.mypy_cache/3.11/re.data.json +0 -1
  450. machineconfig/scripts/python/.mypy_cache/3.11/re.meta.json +0 -1
  451. machineconfig/scripts/python/.mypy_cache/3.11/resource.data.json +0 -1
  452. machineconfig/scripts/python/.mypy_cache/3.11/resource.meta.json +0 -1
  453. machineconfig/scripts/python/.mypy_cache/3.11/shlex.data.json +0 -1
  454. machineconfig/scripts/python/.mypy_cache/3.11/shlex.meta.json +0 -1
  455. machineconfig/scripts/python/.mypy_cache/3.11/shutil.data.json +0 -1
  456. machineconfig/scripts/python/.mypy_cache/3.11/shutil.meta.json +0 -1
  457. machineconfig/scripts/python/.mypy_cache/3.11/signal.data.json +0 -1
  458. machineconfig/scripts/python/.mypy_cache/3.11/signal.meta.json +0 -1
  459. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.data.json +0 -1
  460. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.meta.json +0 -1
  461. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.data.json +0 -1
  462. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.meta.json +0 -1
  463. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.data.json +0 -1
  464. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.meta.json +0 -1
  465. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.data.json +0 -1
  466. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.meta.json +0 -1
  467. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.data.json +0 -1
  468. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.meta.json +0 -1
  469. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.data.json +0 -1
  470. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.meta.json +0 -1
  471. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.data.json +0 -1
  472. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.meta.json +0 -1
  473. machineconfig/scripts/python/.mypy_cache/3.11/stat.data.json +0 -1
  474. machineconfig/scripts/python/.mypy_cache/3.11/stat.meta.json +0 -1
  475. machineconfig/scripts/python/.mypy_cache/3.11/string.data.json +0 -1
  476. machineconfig/scripts/python/.mypy_cache/3.11/string.meta.json +0 -1
  477. machineconfig/scripts/python/.mypy_cache/3.11/struct.data.json +0 -1
  478. machineconfig/scripts/python/.mypy_cache/3.11/struct.meta.json +0 -1
  479. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.data.json +0 -1
  480. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.meta.json +0 -1
  481. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.data.json +0 -1
  482. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.meta.json +0 -1
  483. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.data.json +0 -1
  484. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.meta.json +0 -1
  485. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.data.json +0 -1
  486. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.meta.json +0 -1
  487. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.data.json +0 -1
  488. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.meta.json +0 -1
  489. machineconfig/scripts/python/.mypy_cache/3.11/threading.data.json +0 -1
  490. machineconfig/scripts/python/.mypy_cache/3.11/threading.meta.json +0 -1
  491. machineconfig/scripts/python/.mypy_cache/3.11/time.data.json +0 -1
  492. machineconfig/scripts/python/.mypy_cache/3.11/time.meta.json +0 -1
  493. machineconfig/scripts/python/.mypy_cache/3.11/types.data.json +0 -1
  494. machineconfig/scripts/python/.mypy_cache/3.11/types.meta.json +0 -1
  495. machineconfig/scripts/python/.mypy_cache/3.11/typing.data.json +0 -1
  496. machineconfig/scripts/python/.mypy_cache/3.11/typing.meta.json +0 -1
  497. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.data.json +0 -1
  498. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.meta.json +0 -1
  499. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.data.json +0 -1
  500. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.meta.json +0 -1
  501. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.data.json +0 -1
  502. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.meta.json +0 -1
  503. machineconfig/scripts/python/.mypy_cache/3.11/uuid.data.json +0 -1
  504. machineconfig/scripts/python/.mypy_cache/3.11/uuid.meta.json +0 -1
  505. machineconfig/scripts/python/.mypy_cache/3.11/warnings.data.json +0 -1
  506. machineconfig/scripts/python/.mypy_cache/3.11/warnings.meta.json +0 -1
  507. machineconfig/scripts/python/.mypy_cache/3.11/weakref.data.json +0 -1
  508. machineconfig/scripts/python/.mypy_cache/3.11/weakref.meta.json +0 -1
  509. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.data.json +0 -1
  510. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.meta.json +0 -1
  511. machineconfig/scripts/python/.mypy_cache/3.11/zlib.data.json +0 -1
  512. machineconfig/scripts/python/.mypy_cache/3.11/zlib.meta.json +0 -1
  513. machineconfig/scripts/python/.mypy_cache/CACHEDIR.TAG +0 -3
  514. machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-311.pyc +0 -0
  515. machineconfig/scripts/python/__pycache__/gh_models.cpython-311.pyc +0 -0
  516. machineconfig/scripts/python/__pycache__/url2md.cpython-311.pyc +0 -0
  517. machineconfig/scripts/python/__pycache__/viewer.cpython-311.pyc +0 -0
  518. machineconfig/scripts/python/__pycache__/vscode_api.cpython-311.pyc +0 -0
  519. machineconfig/settings/__pycache__/__init__.cpython-311.pyc +0 -0
  520. machineconfig/settings/linters/.ruff_cache/.gitignore +0 -2
  521. machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +0 -1
  522. machineconfig/settings/shells/ipy/profiles/default/__pycache__/__init__.cpython-311.pyc +0 -0
  523. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/__init__.cpython-311.pyc +0 -0
  524. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/playext.cpython-311.pyc +0 -0
  525. machineconfig/utils/utils_path.py +0 -151
  526. machineconfig/utils/ve_utils/ve1.py +0 -111
  527. machineconfig/utils/ve_utils/ve2.py +0 -142
  528. machineconfig-1.94.dist-info/RECORD +0 -710
  529. {machineconfig-1.94.dist-info → machineconfig-1.96.dist-info}/top_level.txt +0 -0
@@ -12,15 +12,15 @@ 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 import get_repo_root, get_ve_activate_line, get_ve_path_and_ipython_profile
15
16
  from machineconfig.utils.utils import display_options, choose_one_option, PROGRAM_PATH, match_file_name, sanitize_path
16
- from machineconfig.utils.ve_utils.ve1 import get_ve_activate_line, get_ve_name_and_ipython_profile
17
- from crocodile.file_management import P, Read
18
- 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
19
20
  import platform
20
21
  from typing import Optional
21
22
  import argparse
22
-
23
- from machineconfig.utils.ve_utils.ve1 import get_repo_root
23
+ import os
24
24
 
25
25
 
26
26
  str2obj = {"True": True, "False": False, "None": None}
@@ -36,37 +36,44 @@ def main() -> None:
36
36
  parser.add_argument("--interactive", "-i", action="store_true", help="Whether to run the job interactively using IPython")
37
37
  parser.add_argument("--debug", "-d", action="store_true", help="debug")
38
38
  parser.add_argument("--choose_function", "-c", action="store_true", help="debug")
39
- parser.add_argument("--loop", "-l", action="store_true", help="infinite recusion (runs again after completion)")
39
+ parser.add_argument("--loop", "-l", action="store_true", help="infinite recusion (runs again after completion/interruption)")
40
40
  parser.add_argument("--jupyter", "-j", action="store_true", help="open in a jupyter notebook")
41
41
  parser.add_argument("--submit_to_cloud", "-C", action="store_true", help="submit to cloud compute")
42
42
  parser.add_argument("--remote", "-r", action="store_true", help="launch on a remote machine")
43
43
  parser.add_argument("--module", "-m", action="store_true", help="launch the main file")
44
44
  parser.add_argument("--streamlit", "-S", action="store_true", help="run as streamlit app")
45
+ parser.add_argument("--environment", "-E", type=str, help="Choose ip, localhost, hostname or arbitrary url", default="")
45
46
  parser.add_argument("--holdDirectory", "-D", action="store_true", help="hold current directory and avoid cd'ing to the script directory")
47
+ parser.add_argument("--PathExport", "-P", action="store_true", help="augment the PYTHONPATH with repo root.")
46
48
  parser.add_argument("--git_pull", "-g", action="store_true", help="Start by pulling the git repo")
47
- parser.add_argument("--optimized", "-O", action="store_true", help="Run the optimized version of the function")
49
+ parser.add_argument("--optimized", "-O", action="store_true", help="Run the optimized version of the function")
48
50
  parser.add_argument("--Nprocess", "-p", type=int, help="Number of processes to use", default=1)
49
- 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)")
50
51
  parser.add_argument("--zellij_tab", "-z", type=str, dest="zellij_tab", help="open in a new zellij tab")
51
- args = parser.parse_args()
52
-
53
- path_obj = sanitize_path(P(args.path))
52
+ parser.add_argument("--watch", "-w", action="store_true", help="watch the file for changes")
53
+ 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
+ try:
55
+ args = parser.parse_args()
56
+ except Exception as ex:
57
+ print(f"❌ Failed to parse arguments: {ex}")
58
+ parser.print_help()
59
+ raise ex
60
+ path_obj = sanitize_path(PathExtended(args.path))
54
61
  if not path_obj.exists():
55
- path_obj = match_file_name(sub_string=args.path)
62
+ path_obj = match_file_name(sub_string=args.path, search_root=PathExtended.cwd())
56
63
  else: pass
57
-
58
64
  if path_obj.is_dir():
59
65
  print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
60
66
  files = search_for_files_of_interest(path_obj)
61
67
  choice_file = choose_one_option(options=files, fzf=True)
62
- choice_file = P(choice_file)
68
+ choice_file = PathExtended(choice_file)
63
69
  else:
64
70
  choice_file = path_obj
65
- print(f"💾 Selected file: {choice_file}")
71
+ repo_root = get_repo_root(str(choice_file))
72
+ print(f"💾 Selected file: {choice_file}.\nRepo root: {repo_root}")
66
73
 
67
- ve_name_suggested, ipy_profile = get_ve_name_and_ipython_profile(choice_file)
74
+ ve_root_from_file, ipy_profile = get_ve_path_and_ipython_profile(choice_file)
68
75
  if ipy_profile is None: ipy_profile = "default"
69
- activate_ve_line = get_ve_activate_line(ve_name=args.ve or ve_name_suggested, a_path=str(choice_file))
76
+ activate_ve_line = get_ve_activate_line(ve_root=args.ve or ve_root_from_file or "$HOME/venvs/ve")
70
77
 
71
78
  # Convert args.kw to dictionary
72
79
  if choice_file.suffix == ".py":
@@ -84,13 +91,14 @@ def main() -> None:
84
91
  kwargs = {}
85
92
 
86
93
  # ========================= choosing function to run
94
+ choice_function: Optional[str] = None # Initialize to avoid unbound variable
87
95
  if args.choose_function or args.submit_to_cloud:
88
96
  if choice_file.suffix == ".py":
89
97
  options, func_args = parse_pyfile(file_path=str(choice_file))
90
98
  choice_function_tmp = display_options(msg="Choose a function to run", options=options, fzf=True, multi=False)
91
99
  assert isinstance(choice_function_tmp, str), f"choice_function must be a string. Got {type(choice_function_tmp)}"
92
100
  choice_index = options.index(choice_function_tmp)
93
- choice_function: Optional[str] = choice_function_tmp.split(' -- ')[0]
101
+ choice_function = choice_function_tmp.split(' -- ')[0]
94
102
  choice_function_args = func_args[choice_index]
95
103
 
96
104
  if choice_function == "RUN AS MAIN": choice_function = None
@@ -104,34 +112,60 @@ def main() -> None:
104
112
  if line == "": continue
105
113
  if line.startswith("echo"): continue
106
114
  options.append(line)
107
- choice_line = choose_one_option(options=options, fzf=True)
108
- choice_file = P.tmpfile(suffix=".sh").write_text(choice_line)
115
+ chosen_lines = display_options(msg="Choose a line to run", options=options, fzf=True, multi=True)
116
+ choice_file = PathExtended.tmpfile(suffix=".sh").write_text("\n".join(chosen_lines))
109
117
  choice_function = None
110
118
  else:
111
119
  choice_function = args.function
112
120
 
113
121
  if choice_file.suffix == ".py":
114
122
  if args.streamlit:
115
- from crocodile.environment import get_network_addresses
116
- local_ip_v4 = get_network_addresses()["local_ip_v4"]
123
+ import socket
124
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
125
+ try:
126
+ s.connect(('8.8.8.8', 1))
127
+ local_ip_v4 = s.getsockname()[0]
128
+ except Exception:
129
+ local_ip_v4 = socket.gethostbyname(socket.gethostname())
130
+ finally:
131
+ s.close()
117
132
  computer_name = platform.node()
118
133
  port = 8501
119
- toml_path: Optional[P] = None
134
+ toml_path: Optional[PathExtended] = None
120
135
  toml_path_maybe = choice_file.parent.joinpath(".streamlit/config.toml")
121
- if toml_path_maybe.exists(): toml_path = toml_path_maybe
136
+ if toml_path_maybe.exists():
137
+ toml_path = toml_path_maybe
122
138
  elif choice_file.parent.name == "pages":
123
139
  toml_path_maybe = choice_file.parent.parent.joinpath(".streamlit/config.toml")
124
140
  if toml_path_maybe.exists(): toml_path = toml_path_maybe
125
141
  if toml_path is not None:
126
- config = Read.toml(toml_path)
142
+ print(f"📄 Reading config.toml @ {toml_path}")
143
+ config = read_toml(toml_path)
127
144
  if "server" in config:
128
145
  if "port" in config["server"]:
129
146
  port = config["server"]["port"]
147
+ secrets_path = toml_path.with_name("secrets.toml")
148
+ if repo_root is not None:
149
+ secrets_template_path = PathExtended.home().joinpath(f"dotfiles/creds/streamlit/{PathExtended(repo_root).name}/{choice_file.name}/secrets.toml")
150
+ if args.environment != "" and not secrets_path.exists() and secrets_template_path.exists():
151
+ secrets_template = read_toml(secrets_template_path)
152
+ if args.environment == "ip": host_url = f"http://{local_ip_v4}:{port}/oauth2callback"
153
+ elif args.environment == "localhost": host_url = f"http://localhost:{port}/oauth2callback"
154
+ elif args.environment == "hostname": host_url = f"http://{computer_name}:{port}/oauth2callback"
155
+ else: host_url = f"http://{args.environment}:{port}/oauth2callback"
156
+ try:
157
+ secrets_template["auth"]["redirect_uri"] = host_url
158
+ secrets_template["auth"]["cookie_secret"] = randstr(35)
159
+ secrets_template["auth"]["auth0"]["redirect_uri"] = host_url
160
+ save_toml(obj=secrets_template, path=secrets_path)
161
+ except Exception as ex:
162
+ print(ex)
163
+ raise ex
130
164
  message = f"🚀 Streamlit app is running @:\n1- http://{local_ip_v4}:{port}\n2- http://{computer_name}:{port}\n3- http://localhost:{port}"
131
165
  from rich.panel import Panel
132
166
  from rich import print as rprint
133
167
  rprint(Panel(message))
134
- exe = "streamlit run --server.address 0.0.0.0 --server.headless true"
168
+ exe = f"streamlit run --server.address 0.0.0.0 --server.headless true --server.port {port}"
135
169
  # exe = f"cd '{choice_file.parent}'; " + exe
136
170
  elif args.interactive is False: exe = "python"
137
171
  elif args.jupyter: exe = "jupyter-lab"
@@ -145,9 +179,8 @@ def main() -> None:
145
179
  raise NotImplementedError(f"File type {choice_file.suffix} not supported, in the sense that I don't know how to fire it.")
146
180
 
147
181
  if args.module or (args.debug and args.choose_function): # because debugging tools do not support choosing functions and don't interplay with fire module. So the only way to have debugging and choose function options is to import the file as a module into a new script and run the function of interest there and debug the new script.
148
- assert choice_file.suffix == ".py", f"File must be a python file to be imported as a module. Got {choice_file.suffix}"
182
+ assert choice_file.suffix == ".py", f"File must be a python file to be imported as a module. Got {choice_file}"
149
183
  import_line = get_import_module_code(str(choice_file))
150
- repo_root = get_repo_root(str(choice_file))
151
184
  if repo_root is not None:
152
185
  repo_root_add = f"""sys.path.append(r'{repo_root}')"""
153
186
  else:
@@ -159,9 +192,9 @@ except (ImportError, ModuleNotFoundError) as ex:
159
192
  print(fr"❌ Failed to import `{choice_file}` as a module: {{ex}} ")
160
193
  print(fr"⚠️ Attempting import with ad-hoc `$PATH` manipulation. DO NOT pickle any objects in this session as correct deserialization cannot be guaranteed.")
161
194
  import sys
162
- sys.path.append(r'{P(choice_file).parent}')
195
+ sys.path.append(r'{PathExtended(choice_file).parent}')
163
196
  {repo_root_add}
164
- from {P(choice_file).stem} import *
197
+ from {PathExtended(choice_file).stem} import *
165
198
  print(fr"✅ Successfully imported `{choice_file}`")
166
199
  """
167
200
  if choice_function is not None:
@@ -179,7 +212,9 @@ try:
179
212
  except ImportError as _ex:
180
213
  print(r'''{txt}''')
181
214
  """ + txt
182
- 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)
215
+ choice_file = PathExtended.tmp().joinpath(f'tmp_scripts/python/{PathExtended(choice_file).parent.name}_{PathExtended(choice_file).stem}_{randstr()}.py')
216
+ choice_file.parent.mkdir(parents=True, exist_ok=True)
217
+ choice_file.write_text(txt)
183
218
 
184
219
  # ========================= determining basic command structure: putting together exe & choice_file & choice_function & pdb
185
220
  if args.debug:
@@ -199,7 +234,7 @@ except ImportError as _ex:
199
234
  if args.holdDirectory:
200
235
  command = f"{exe} {choice_file}"
201
236
  else:
202
- command = f"cd {choice_file.parent}\n\n{exe} {choice_file.name}\n\ncd {P.cwd()}"
237
+ command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {PathExtended.cwd()}"
203
238
 
204
239
  elif args.cmd:
205
240
  command = rf""" cd /d {choice_file.parent} & {exe} {choice_file.name} """
@@ -208,21 +243,18 @@ except ImportError as _ex:
208
243
  kwargs_raw = " ".join(args.kw) if args.kw is not None else ""
209
244
  command = f"{exe} {choice_file} {kwargs_raw}"
210
245
  else:
211
- # command = f"cd {choice_file.parent}\n\n{exe} {choice_file.name}\n\ncd {P.cwd()}"
246
+ # command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {PathExtended.cwd()}"
212
247
  command = f"{exe} {choice_file} "
213
- # this installs in ve env, which is not execution env
214
- # if "ipdb" in command: install_n_import("ipdb")
215
- # if "pudb" in command: install_n_import("pudb")
216
-
217
248
  if not args.cmd:
218
- if "ipdb" in command: command = f"pip install ipdb\n\n{command}"
219
- if "pudb" in command: command = f"pip install pudb\n\n{command}"
220
- command = f"{activate_ve_line}\n\n{command}"
249
+ if "ipdb" in command: command = f"pip install ipdb\n{command}"
250
+ if "pudb" in command: command = f"pip install pudb\n{command}"
251
+ command = f"{activate_ve_line}\n{command}"
221
252
  else:
222
253
  # CMD equivalent
223
254
  if "ipdb" in command: command = f"pip install ipdb & {command}"
224
255
  if "pudb" in command: command = f"pip install pudb & {command}"
225
- command = fr"""start cmd -Argument "/k %USERPROFILE%\venvs\{args.ve}\Scripts\activate.bat & {command} " """ # this works from powershell
256
+ new_line = "\n"
257
+ command = fr"""start cmd -Argument "/k {activate_ve_line.replace(".ps1", ".bat").replace(". ", "")} & {command.replace(new_line, " & ")} " """ # this works from powershell
226
258
  # this works from cmd # command = fr""" start cmd /k "%USERPROFILE%\venvs\{args.ve}\Scripts\activate.bat & {command} " """ # because start in cmd is different from start in powershell (in powershell it is short for Start-Process)
227
259
 
228
260
  if args.submit_to_cloud:
@@ -232,23 +264,23 @@ python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
232
264
  if choice_function is not None:
233
265
  command += f"--function {choice_function} "
234
266
 
235
- # try: install_n_import("clipboard").copy(command)
236
- # except Exception as ex: print(f"Failed to copy command to clipboard. {ex}")
237
-
238
- if args.loop:
239
- command = command + "\n" + f". {PROGRAM_PATH}"
240
-
241
267
  if args.Nprocess > 1:
242
- lines = [f""" zellij action new-tab --name nProcess{randstr(2)}"""]
243
- command = command.replace(". activate_ve", ". $HOME/scripts/activate_ve")
268
+ # lines = [f""" zellij action new-tab --name nProcess{randstr(2)}"""]
269
+ # command = command.replace(". activate_ve", ". $HOME/scripts/activate_ve")
270
+ # 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 = PathExtended.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)
278
+ tab_config = {}
244
279
  for an_arg in range(args.Nprocess):
245
- sub_command = f"{command} --idx={an_arg} --idx_max={args.Nprocess}"
246
- if args.optimized:
247
- sub_command = sub_command.replace("python ", "python -OO ")
248
- sub_command_path = P.tmpfile(suffix=".sh").write_text(sub_command)
249
- lines.append(f"""zellij action new-pane -- bash {sub_command_path} """)
250
- lines.append("sleep 5") # python tends to freeze if you launch instances within 1 microsecond of each other
251
- command = "\n".join(lines)
280
+ 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}")
281
+ from machineconfig.cluster.sessions_managers.zellij_local import run_zellij_layout
282
+ run_zellij_layout(tab_config=tab_config, session_name=None)
283
+ return None
252
284
 
253
285
  if args.optimized:
254
286
  # note that in ipython, optimization is meaningless.
@@ -262,7 +294,7 @@ python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
262
294
  console = Console()
263
295
 
264
296
  if args.zellij_tab is not None:
265
- comman_path__ = P.tmpfile(suffix=".sh").write_text(command)
297
+ comman_path__ = PathExtended.tmpfile(suffix=".sh").write_text(command)
266
298
  console.print(Panel(Syntax(command, lexer="shell"), title=f"🔥 fire command @ {comman_path__}: "), style="bold red")
267
299
  import subprocess
268
300
  existing_tab_names = subprocess.run(["zellij", "action", "query-tab-names"], capture_output=True, text=True, check=True).stdout.splitlines()
@@ -270,27 +302,34 @@ python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
270
302
  print(f"⚠️ Tab name `{args.zellij_tab}` already exists. Please choose a different name.")
271
303
  # args.zellij_tab = input("Please enter a new tab name: ")
272
304
  args.zellij_tab += f"_{randstr(3)}"
273
- command = f"""
274
- echo "Sleep 1 seconds to allow zellij to create a new tab"
275
- sleep 1
276
- zellij action new-tab --name {args.zellij_tab}
277
- echo "Sleep 2 seconds to allow zellij to go to the new tab"
278
- sleep 2
279
- zellij action go-to-tab-name {args.zellij_tab}
280
- echo "Sleep 2 seconds to allow zellij to start the new pane"
281
- sleep 2
282
- zellij action new-pane --direction down -- /bin/bash {comman_path__}
283
- echo "Sleep 2 seconds to allow zellij to start the new pane"
284
- sleep 1
285
- zellij action move-focus up; sleep 2
286
- echo "Sleep 2 seconds to allow zellij to close the pane"
287
- sleep 1
288
- zellij action close-pane; sleep 2
289
- """
290
- if args.git_pull:
291
- command = f"\ngit -C {choice_file.parent} pull\n\n" + command
292
- console.print(Panel(Syntax(command, lexer="shell"), title=f"🔥 fire command @ {PROGRAM_PATH}: "), style="bold red")
293
- PROGRAM_PATH.write_text(command)
305
+ from machineconfig.cluster.sessions_managers.zellij_local import run_command_in_zellij_tab
306
+ command = run_command_in_zellij_tab(command=str(comman_path__), tab_name=args.zellij_tab, cwd=None)
307
+ if args.watch: command = "watchexec --restart --exts py,sh,ps1 " + command
308
+ if args.git_pull: command = f"\ngit -C {choice_file.parent} pull\n" + command
309
+ if args.PathExport:
310
+ if platform.system() in ["Linux", "Darwin"]: export_line = f"""export PYTHONPATH="{repo_root}""" + """:${PYTHONPATH}" """
311
+ elif platform.system() == "Windows":
312
+ # export_line = f"""set PYTHONPATH="{repo_root}""" + """:%PYTHONPATH%" """
313
+ # powershell equivalent
314
+ export_line = f"""$env:PYTHONPATH="{repo_root}""" + """:$env:PYTHONPATH" """
315
+ else:
316
+ raise NotImplementedError(f"Platform {platform.system()} not supported.")
317
+ command = export_line + "\n" + command
318
+
319
+ program_path = os.environ.get("op_script", None)
320
+ program_path = PathExtended(program_path) if program_path is not None else PROGRAM_PATH
321
+ if args.loop:
322
+ if platform.system() in ["Linux", "Darwin"]:
323
+ command = command + "\nsleep 0.5"
324
+ elif platform.system() == "Windows":
325
+ # command = command + "timeout 0.5\n"
326
+ #pwsh equivalent
327
+ command ="$ErrorActionPreference = 'SilentlyContinue';\n" + command + "\nStart-Sleep -Seconds 0.5"
328
+ else:
329
+ raise NotImplementedError(f"Platform {platform.system()} not supported.")
330
+ command = command + f"\n. {program_path}"
331
+ console.print(Panel(Syntax(command, lexer="shell"), title=f"🔥 fire command @ {program_path}: "), style="bold red")
332
+ program_path.write_text(command)
294
333
 
295
334
 
296
335
  if __name__ == '__main__':
@@ -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,11 +1,16 @@
1
-
2
- from crocodile.core import Struct
3
- from crocodile.file_management import P, Read
1
+ from pathlib import Path
2
+ from machineconfig.utils.utils2 import pprint, read_json, read_ini
4
3
  from pydantic import ConfigDict
5
4
  from pydantic.dataclasses import dataclass
6
5
  from typing import Optional
7
6
  import os
8
7
  from machineconfig.utils.utils import DEFAULTS_PATH
8
+ from rich.console import Console
9
+ from rich.panel import Panel
10
+ from rich import box # Import box
11
+
12
+
13
+ console = Console()
9
14
 
10
15
 
11
16
  class ArgsDefaults:
@@ -41,68 +46,49 @@ class Args():
41
46
  config: Optional[str] = None
42
47
 
43
48
  @staticmethod
44
- def from_config(config_path: P):
45
- # from crocodile.core import install_n_import
46
- # install_n_import("pydantic")
47
- # from pydantic import BaseModel, ConfigDict
48
- return Args(**Read.json(config_path))
49
+ def from_config(config_path: Path):
50
+ return Args(**read_json(config_path))
49
51
 
50
52
 
51
- def find_cloud_config(path: P):
52
- print(f"""
53
- ╭{'─' * 70}╮
54
- │ 🔍 Searching for cloud configuration file... │
55
- ╰{'─' * 70}╯
56
- """)
53
+ def find_cloud_config(path: Path):
54
+ display_header(f"Searching for cloud configuration file @ {path}")
57
55
 
58
56
  for _i in range(len(path.parts)):
59
57
  if path.joinpath("cloud.json").exists():
60
58
  res = Args.from_config(path.joinpath("cloud.json"))
61
- print(f"""
62
- ╭{'─' * 70}╮
63
- │ ✅ Found cloud config at: {path.joinpath('cloud.json')} │
64
- ╰{'─' * 70}╯
65
- """)
66
- Struct(res.__dict__).print(as_config=True, title="Cloud Config")
59
+ display_success(f"Found cloud config at: {path.joinpath('cloud.json')}")
60
+ pprint(res.__dict__, "Cloud Config")
67
61
  return res
68
62
  path = path.parent
69
63
 
70
- print("No cloud configuration file found")
64
+ display_error("No cloud configuration file found")
71
65
  return None
72
66
 
73
67
 
74
- def absolute(path: str) -> P:
75
- obj = P(path).expanduser()
68
+ def absolute(path: str) -> Path:
69
+ obj = Path(path).expanduser()
76
70
  if not path.startswith(".") and obj.exists(): return obj
77
- try_absing = P.cwd().joinpath(path)
71
+ try_absing = Path.cwd().joinpath(path)
78
72
  if try_absing.exists(): return try_absing
79
- print(f"""
80
- ╭{'─' * 70}╮
81
- │ ⚠️ WARNING: │
82
- │ Path {path} could not be resolved to absolute path.
83
- │ Trying to resolve symlinks (this may result in unintended paths). │
84
- ╰{'─' * 70}╯
85
- """)
73
+ display_warning(f"Path {path} could not be resolved to absolute path.")
74
+ display_warning("Trying to resolve symlinks (this may result in unintended paths).")
86
75
  return obj.absolute()
87
76
 
88
77
 
89
78
 
90
79
  def get_secure_share_cloud_config(interactive: bool, cloud: Optional[str]) -> Args:
91
- print(f"""
92
- ╔{'═' * 70}╗
93
- ║ 🔐 Secure Share Cloud Configuration ║
94
- ╚{'═' * 70}╝
95
- """)
80
+ console = Console()
81
+ console.print(Panel("🔐 Secure Share Cloud Configuration", expand=False))
96
82
 
97
83
  if cloud is None:
98
84
  if os.environ.get("CLOUD_CONFIG_NAME") is not None:
99
85
  default_cloud = os.environ.get("CLOUD_CONFIG_NAME")
100
86
  assert default_cloud is not None
101
87
  cloud = default_cloud
102
- print(f"☁️ Using cloud from environment: {cloud}")
88
+ console.print(f"☁️ Using cloud from environment: {cloud}")
103
89
  else:
104
90
  try:
105
- default_cloud__ = Read.ini(DEFAULTS_PATH)['general']['rclone_config_name']
91
+ default_cloud__ = read_ini(DEFAULTS_PATH)['general']['rclone_config_name']
106
92
  except Exception:
107
93
  default_cloud__ = 'No default cloud found.'
108
94
  if default_cloud__ == 'No default cloud found.' or interactive:
@@ -110,9 +96,9 @@ def get_secure_share_cloud_config(interactive: bool, cloud: Optional[str]) -> Ar
110
96
  cloud = input(f"☁️ Enter cloud name (default {default_cloud__}): ") or default_cloud__
111
97
  else:
112
98
  cloud = default_cloud__
113
- print(f"☁️ Using default cloud: {cloud}")
99
+ console.print(f"☁️ Using default cloud: {cloud}")
114
100
 
115
- default_password_path = P.home().joinpath("dotfiles/creds/passwords/quick_password")
101
+ default_password_path = Path.home().joinpath("dotfiles/creds/passwords/quick_password")
116
102
  if default_password_path.exists():
117
103
  pwd = default_password_path.read_text().strip()
118
104
  default_message = "defaults to quick_password"
@@ -125,10 +111,27 @@ def get_secure_share_cloud_config(interactive: bool, cloud: Optional[str]) -> Ar
125
111
  zip=True, overwrite=True, share=True,
126
112
  rel2home=True, root="myshare", os_specific=False,)
127
113
 
128
- print(f"""
129
- ╭{'─' * 70}╮
130
- │ ⚙️ Using SecureShare cloud config │
131
- ╰{'─' * 70}╯
132
- """)
133
- Struct(res.__dict__).print(as_config=True, title="SecureShare Config")
114
+ display_success("Using SecureShare cloud config")
115
+ pprint(res.__dict__, "SecureShare Config")
134
116
  return res
117
+
118
+ def display_header(title: str):
119
+ console.print(Panel(title, box=box.DOUBLE_EDGE, title_align="left")) # Replace print with Panel
120
+
121
+ def display_subheader(title: str):
122
+ console.print(Panel(title, box=box.ROUNDED, title_align="left")) # Replace print with Panel
123
+
124
+ def display_content(content: str):
125
+ console.print(Panel(content, box=box.ROUNDED, title_align="left")) # Replace print with Panel
126
+
127
+ def display_status(status: str):
128
+ console.print(Panel(status, box=box.ROUNDED, title_align="left")) # Replace print with Panel
129
+
130
+ def display_success(message: str):
131
+ console.print(Panel(message, box=box.ROUNDED, border_style="green", title_align="left")) # Replace print with Panel
132
+
133
+ def display_warning(message: str):
134
+ console.print(Panel(message, box=box.ROUNDED, border_style="yellow", title_align="left")) # Replace print with Panel
135
+
136
+ def display_error(message: str):
137
+ console.print(Panel(message, box=box.ROUNDED, border_style="red", title_align="left")) # Replace print with Panel