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
@@ -1,222 +1,312 @@
1
- """Task scheduler
2
- """
3
-
4
- from crocodile.file_management import P, Read, str2timedelta, Save
5
- # from crocodile.meta import Terminal
6
- from machineconfig.utils.utils import get_shell_script_executing_python_file
7
- from dataclasses import dataclass
8
- from datetime import datetime, timedelta
9
- import platform
10
- import subprocess
11
- from typing import Optional
12
- # from crocodile.meta import Scheduler
13
-
14
-
15
- SCHEDULER_DEFAULT_ROOT = P.home().joinpath("dotfiles/scripts/.scheduler")
16
- SUCCESS = "success"
17
- DEFAULT_CONFIG = """
18
- [specs]
19
- frequency = 30d
20
- start = 2024-01-01 01:00
21
-
22
- [runtime]
23
- venv = ve
24
- """
25
-
26
-
27
- class Register:
28
- def __init__(self, root: str):
29
- self.root = P(root).expanduser().absolute()
30
-
31
- def register_runtime(self, frequency_months: int = 1):
32
- start, end = self.get_report_start_end_datetimes(frequency_months=frequency_months)
33
- report = Report(name="runtime", start=start, end=end, status="success")
34
- report.to_path(self.root.joinpath("runtime.ini"))
35
- return report
36
-
37
- def read_runtime(self):
38
- return Report.from_path(self.root.joinpath("runtime.ini"))
39
-
40
- @staticmethod
41
- def format_date(date: datetime):
42
- return str(date.year)[2:] + "-" + str(date.month).zfill(2)
43
- @staticmethod
44
- def get_report_start_end_datetimes(frequency_months: int):
45
- now = datetime.now()
46
- import numpy as np
47
- chunks = np.arange(start=1, stop=12, step=frequency_months)
48
- chunk_now_start_month: int = chunks[chunks <= now.month][-1]
49
- chunk_now_start = datetime(year=now.year, month=chunk_now_start_month, day=1)
50
- from dateutil.relativedelta import relativedelta
51
- previous_chunk_start = chunk_now_start - relativedelta(months=frequency_months)
52
- return previous_chunk_start, chunk_now_start
53
-
54
-
55
- @dataclass
56
- class Report:
57
- name: str
58
- start: datetime
59
- end: datetime
60
- status: str
61
-
62
- @classmethod
63
- def from_path(cls, path: P, return_default_if_not_found: bool=False):
64
- if not path.exists():
65
- if return_default_if_not_found:
66
- return Report(name=path.parent.name, start=datetime(year=2000, month=1, day=1), end=datetime(year=2000, month=1, day=1), status="NA")
67
- else:
68
- raise ValueError(f"Could not find report at {path}")
69
- ini = Read.ini(path)['report']
70
- return cls(
71
- name=ini["name"],
72
- start=datetime.fromisoformat(ini["start"]),
73
- end=datetime.fromisoformat(ini["end"]),
74
- status=ini["status"],
75
- )
76
- def to_path(self, path: P):
77
- Save.ini(path=path, obj={'report': {
78
- 'name': self.name,
79
- 'start': self.start.isoformat(),
80
- 'end': self.end.isoformat(),
81
- 'status': str(self.status),
82
- }})
83
-
84
-
85
- @dataclass
86
- class Task:
87
- name: str
88
- task_root: P
89
- frequency: timedelta
90
- start: datetime
91
- venv: str
92
- @property
93
- def report_path(self):
94
- return self.task_root.joinpath("report.ini")
95
-
96
-
97
- def read_task_from_dir(path: P):
98
- tasks_config = Read.ini(path.joinpath("config.ini"))
99
- task = Task(name=path.name,
100
- task_root=path,
101
- frequency=str2timedelta(tasks_config["specs"]["frequency"]),
102
- start=datetime.fromisoformat(tasks_config["specs"]["start"]),
103
- venv=tasks_config["runtime"]["venv"],
104
- # output_dir=P(a_task_section["output_dir"]).expanduser().absolute(),
105
- )
106
- return task
107
-
108
-
109
- def main(root: Optional[str] = None, ignore_conditions: bool=True):
110
- if root is None: root_resolved = SCHEDULER_DEFAULT_ROOT
111
- else: root_resolved = P(root).expanduser().absolute()
112
- tasks_dirs = root_resolved.search(files=False, folders=True).filter(lambda x: x.joinpath("task.py").exists())
113
-
114
- print(f"""
115
- ╔{'═'*78}╗
116
- 📂 TASK SCHEDULER INITIALIZED ║
117
- ╚{'═'*78}╝
118
- """)
119
- print(f"📁 Root directory resolved: {root_resolved}")
120
-
121
- tasks: list[Task] = []
122
- for a_dir in tasks_dirs:
123
- tasks.append(read_task_from_dir(a_dir))
124
-
125
- from machineconfig.utils.utils import choose_multiple_options
126
- import pandas as pd
127
- df_res = pd.DataFrame([Report.from_path(path=a_task.report_path).__dict__ for a_task in tasks])
128
- tasks_chosen_raw = choose_multiple_options(df_res.to_markdown().splitlines(), "📋 Choose tasks to run")
129
- tasks_chosen = [tasks[int(a_task_chosen.split("|")[1])] for a_task_chosen in tasks_chosen_raw]
130
-
131
- print(f"""
132
- 🎯 Selected Tasks:
133
- {df_res}
134
- """)
135
-
136
- result: list[Report] = []
137
- for a_task in tasks_chosen:
138
- if not ignore_conditions:
139
- answer, report = should_task_run(a_task)
140
- else:
141
- answer, report = True, None
142
- if answer: report = run_task(a_task)
143
- else:
144
- assert report is not None
145
- result.append(report)
146
-
147
- df_res = pd.DataFrame([r.__dict__ for r in result])
148
- print(f"""
149
- Task Execution Results:
150
- {df_res}
151
- """)
152
- return ""
153
-
154
-
155
- def should_task_run(task: Task, tolerance_mins: int = 1440) -> tuple[bool, Optional[Report]]:
156
- if not task.report_path.exists():
157
- print(f"""
158
- ⚠️ Task {task.name} has no record of being run before. Running now...
159
- """)
160
- return True, None
161
- old_report = Report.from_path(task.report_path)
162
- time_since_execution = datetime.now() - old_report.end
163
- if time_since_execution > task.frequency:
164
- print(f"""
165
- ⚠️ Task {task.name} has not been run for {time_since_execution}. It is meant to run every {task.frequency}. Running now if time is okay...
166
- """)
167
- elif old_report.status != SUCCESS:
168
- print(f"""
169
- ⚠️ Task {task.name} last run failed. Running now if time is okay...
170
- """)
171
- else:
172
- print(f"""
173
- Task `{task.name}` was run successfully {time_since_execution} ago. Skipping...
174
- """)
175
- return False, old_report
176
-
177
- suitable_run_time = task.start.time()
178
- time_now = datetime.now().time()
179
- min_diff = abs(suitable_run_time.hour - time_now.hour) * 60 + abs(suitable_run_time.minute - time_now.minute)
180
- if not min_diff < tolerance_mins:
181
- status = f"⌚ Time now is not suitable for running task {task.name} (Ideally, it should be run at {suitable_run_time})"
182
- print(f"""
183
- {status}
184
- """)
185
- return False, old_report
186
- return True, old_report
187
-
188
-
189
- def run_task(task: Task) -> Report:
190
- start_time = datetime.now()
191
-
192
- print(f"""
193
- ╔{'═'*78}╗
194
- 🚀 RUNNING TASK ║
195
- ╚{'═'*78}╝
196
- """)
197
- print(f"🔧 Task Name: {task.name}")
198
-
199
- shell_script = get_shell_script_executing_python_file(python_file=task.task_root.joinpath("task.py").to_str(), ve_name=task.venv)
200
- shell_script_root = P.tmp().joinpath(f"tmp_scripts/scheduler/{task.name}").create()
201
- try:
202
- if platform.system() == 'Windows':
203
- shell_script = shell_script_root.joinpath("run.ps1").write_text(shell_script)
204
- subprocess.run(['powershell', '-ExecutionPolicy', 'Unrestricted', shell_script], check=True)
205
- elif platform.system() == 'Linux':
206
- shell_script = shell_script_root.joinpath("run.sh").write_text(shell_script)
207
- subprocess.run(['bash', shell_script], check=True)
208
- else: res = f"Error: Unsupported platform {platform.system()}."
209
- res = SUCCESS
210
- except subprocess.CalledProcessError:
211
- res = f"Error: The script {shell_script_root} failed to run."
212
- except Exception as e:
213
- res = f"Error: An unexpected error occurred while running the script {shell_script_root}: {e}"
214
-
215
- end_time = datetime.now()
216
- report = Report(name=task.name, start=start_time, end=end_time, status=res.replace('\n', '_NL_').strip().replace('=', '_eq_'))
217
- report.to_path(task.report_path)
218
-
219
- print(f"""
220
- ✅ Task {task.name} completed with status: {res}
221
- """)
222
- return report
1
+ # """Task scheduler
2
+ # """
3
+
4
+ # from machineconfig.utils.utils import get_shell_script_executing_python_file
5
+ # from machineconfig.utils.utils2 import read_ini
6
+ # from dataclasses import dataclass
7
+ # from datetime import datetime, timedelta
8
+ # from typing import Optional, Any
9
+ # from rich.console import Console
10
+ # from rich.panel import Panel
11
+ # import platform
12
+ # import subprocess
13
+
14
+
15
+ # def str2timedelta(time_str: str) -> timedelta:
16
+ # """Convert string to timedelta. Simple implementation for common cases."""
17
+ # # Handle common formats like "1h", "30m", "2d", etc.
18
+ # import re
19
+
20
+ # # Parse patterns like "1h", "30m", "2d", "1w"
21
+ # match = re.match(r'^(\d+)([hdwm])$', time_str.lower())
22
+ # if match:
23
+ # value, unit = match.groups()
24
+ # value = int(value)
25
+
26
+ # if unit == 'h':
27
+ # return timedelta(hours=value)
28
+ # elif unit == 'd':
29
+ # return timedelta(days=value)
30
+ # elif unit == 'w':
31
+ # return timedelta(weeks=value)
32
+ # elif unit == 'm':
33
+ # return timedelta(minutes=value)
34
+
35
+ # # Fallback: try to parse as seconds
36
+ # try:
37
+ # return timedelta(seconds=int(time_str))
38
+ # except ValueError:
39
+ # raise ValueError(f"Cannot parse time string: {time_str}")
40
+
41
+
42
+ # def format_table_markdown(data: list[dict[str, Any]]) -> str:
43
+ # """Convert list of dictionaries to markdown table format."""
44
+ # if not data:
45
+ # return ""
46
+
47
+ # # Get all unique keys from all dictionaries
48
+ # all_keys = set()
49
+ # for row in data:
50
+ # all_keys.update(row.keys())
51
+
52
+ # keys = sorted(all_keys)
53
+
54
+ # # Create header
55
+ # header = "|" + "|".join(f" {key} " for key in keys) + "|"
56
+ # separator = "|" + "|".join(" --- " for _ in keys) + "|"
57
+
58
+ # # Create rows
59
+ # rows = []
60
+ # for row in data:
61
+ # row_values = []
62
+ # for key in keys:
63
+ # value = row.get(key, "")
64
+ # # Convert to string and handle None values
65
+ # if value is None:
66
+ # value = ""
67
+ # else:
68
+ # value = str(value)
69
+ # row_values.append(f" {value} ")
70
+ # rows.append("|" + "|".join(row_values) + "|")
71
+
72
+ # return "\n".join([header, separator] + rows)
73
+
74
+
75
+ # SCHEDULER_DEFAULT_ROOT = PathExtended.home().joinpath("dotfiles/scripts/.scheduler")
76
+ # SUCCESS = "success"
77
+ # DEFAULT_CONFIG = """
78
+ # [specs]
79
+ # frequency = 30d
80
+ # start = 2024-01-01 01:00
81
+
82
+ # [runtime]
83
+ # venv = ve
84
+ # """
85
+
86
+
87
+ # def save_ini(path: PathExtended, obj: dict[str, dict[str, Any]]) -> PathExtended:
88
+ # """Write a simple INI file to `path` using standard library.
89
+
90
+ # The `obj` should be a mapping of section name to a mapping of key/value pairs.
91
+ # Values are converted to strings. The parent directory is created if missing.
92
+ # Returns the resolved path.
93
+ # """
94
+ # import configparser
95
+
96
+ # resolved_path: PathExtended = PathExtended(path).expanduser().absolute()
97
+ # resolved_path.parent.mkdir(parents=True, exist_ok=True)
98
+
99
+ # config = configparser.ConfigParser()
100
+ # for section_name, section_values in obj.items():
101
+ # # Ensure all values are stringified for configparser
102
+ # config[section_name] = {str(k): ("" if v is None else str(v)) for k, v in section_values.items()}
103
+
104
+ # with open(resolved_path, "w", encoding="utf-8") as file:
105
+ # config.write(file)
106
+
107
+ # return resolved_path
108
+
109
+
110
+ # class Register:
111
+ # def __init__(self, root: str):
112
+ # self.root = PathExtended(root).expanduser().absolute()
113
+
114
+ # def register_runtime(self, frequency_months: int = 1):
115
+ # start, end = self.get_report_start_end_datetimes(frequency_months=frequency_months)
116
+ # report = Report(name="runtime", start=start, end=end, status="success")
117
+ # report.to_path(self.root.joinpath("runtime.ini"))
118
+ # return report
119
+
120
+ # def read_runtime(self):
121
+ # return Report.from_path(self.root.joinpath("runtime.ini"))
122
+
123
+ # @staticmethod
124
+ # def format_date(date: datetime):
125
+ # return str(date.year)[2:] + "-" + str(date.month).zfill(2)
126
+ # # @staticmethod
127
+ # # def get_report_start_end_datetimes(frequency_months: int):
128
+ # # now = datetime.now()
129
+ # # import numpy as np
130
+ # # chunks = np.arange(start=1, stop=12, step=frequency_months)
131
+ # # chunk_now_start_month: int = chunks[chunks <= now.month][-1]
132
+ # # chunk_now_start = datetime(year=now.year, month=chunk_now_start_month, day=1)
133
+ # # from dateutil.relativedelta import relativedelta
134
+ # # previous_chunk_start = chunk_now_start - relativedelta(months=frequency_months)
135
+ # # return previous_chunk_start, chunk_now_start
136
+
137
+
138
+ # @dataclass
139
+ # class Report:
140
+ # name: str
141
+ # start: datetime
142
+ # end: datetime
143
+ # status: str
144
+
145
+ # @classmethod
146
+ # def from_path(cls, path: PathExtended, return_default_if_not_found: bool=False):
147
+ # if not path.exists():
148
+ # if return_default_if_not_found:
149
+ # return Report(name=path.parent.name, start=datetime(year=2000, month=1, day=1), end=datetime(year=2000, month=1, day=1), status="NA")
150
+ # else:
151
+ # raise ValueError(f"Could not find report at {path}")
152
+ # ini = read_ini(path)['report']
153
+ # return cls(
154
+ # name=ini["name"],
155
+ # start=datetime.fromisoformat(ini["start"]),
156
+ # end=datetime.fromisoformat(ini["end"]),
157
+ # status=ini["status"],
158
+ # )
159
+ # def to_path(self, path: PathExtended):
160
+ # save_ini(path=path, obj={
161
+ # 'report': {
162
+ # 'name': self.name,
163
+ # 'start': self.start.isoformat(),
164
+ # 'end': self.end.isoformat(),
165
+ # 'status': str(self.status),
166
+ # }
167
+ # })
168
+
169
+
170
+ # @dataclass
171
+ # class Task:
172
+ # name: str
173
+ # task_root: PathExtended
174
+ # frequency: timedelta
175
+ # start: datetime
176
+ # venv: str
177
+ # @property
178
+ # def report_path(self):
179
+ # return self.task_root.joinpath("report.ini")
180
+
181
+
182
+ # def read_task_from_dir(path: PathExtended):
183
+ # tasks_config = read_ini(path.joinpath("config.ini"))
184
+ # task = Task(name=path.name,
185
+ # task_root=path,
186
+ # frequency=str2timedelta(tasks_config["specs"]["frequency"]),
187
+ # start=datetime.fromisoformat(tasks_config["specs"]["start"]),
188
+ # venv=tasks_config["runtime"]["venv"],
189
+ # # output_dir=PathExtended(a_task_section["output_dir"]).expanduser().absolute(),
190
+ # )
191
+ # return task
192
+
193
+
194
+ # def main(root: Optional[str] = None, ignore_conditions: bool=True):
195
+ # if root is None: root_resolved = SCHEDULER_DEFAULT_ROOT
196
+ # else: root_resolved = PathExtended(root).expanduser().absolute()
197
+ # # Replace crocodile List usage with pathlib iteration
198
+ # from pathlib import Path
199
+ # # Find all `task.py` files under root and use their parent directories
200
+ # tasks_dirs = list({PathExtended(p.parent) for p in Path(str(root_resolved)).rglob("task.py")})
201
+
202
+ # # Print a fancy box using rich
203
+ # console = Console()
204
+ # console.print(Panel("TASK SCHEDULER INITIALIZED", title="Status", expand=False))
205
+
206
+ # print(f"📁 Root directory resolved: {root_resolved}")
207
+
208
+ # tasks: list[Task] = []
209
+ # for a_dir in tasks_dirs:
210
+ # tasks.append(read_task_from_dir(a_dir))
211
+
212
+ # from machineconfig.utils.utils import choose_multiple_options
213
+
214
+ # # Create data for tasks display
215
+ # task_data = [Report.from_path(path=a_task.report_path).__dict__ for a_task in tasks]
216
+ # task_display = format_table_markdown(task_data)
217
+ # tasks_chosen_raw = choose_multiple_options(task_display.splitlines(), "📋 Choose tasks to run")
218
+ # tasks_chosen = [tasks[int(a_task_chosen.split("|")[1])] for a_task_chosen in tasks_chosen_raw]
219
+
220
+ # print(f"""
221
+ # 🎯 Selected Tasks:
222
+ # {task_display}
223
+ # """)
224
+
225
+ # result: list[Report] = []
226
+ # for a_task in tasks_chosen:
227
+ # if not ignore_conditions:
228
+ # answer, report = should_task_run(a_task)
229
+ # else:
230
+ # answer, report = True, None
231
+ # if answer: report = run_task(a_task)
232
+ # else:
233
+ # assert report is not None
234
+ # result.append(report)
235
+
236
+ # result_data = [r.__dict__ for r in result]
237
+ # result_display = format_table_markdown(result_data)
238
+ # print(f"""
239
+ # ✅ Task Execution Results:
240
+ # {result_display}
241
+ # """)
242
+ # return ""
243
+
244
+
245
+ # def should_task_run(task: Task, tolerance_mins: int = 1440) -> tuple[bool, Optional[Report]]:
246
+ # if not task.report_path.exists():
247
+ # print(f"""
248
+ # ⚠️ Task {task.name} has no record of being run before. Running now...
249
+ # """)
250
+ # return True, None
251
+ # old_report = Report.from_path(task.report_path)
252
+ # time_since_execution = datetime.now() - old_report.end
253
+ # if time_since_execution > task.frequency:
254
+ # print(f"""
255
+ # ⚠️ Task {task.name} has not been run for {time_since_execution}. It is meant to run every {task.frequency}. Running now if time is okay...
256
+ # """)
257
+ # elif old_report.status != SUCCESS:
258
+ # print(f"""
259
+ # ⚠️ Task {task.name} last run failed. Running now if time is okay...
260
+ # """)
261
+ # else:
262
+ # print(f"""
263
+ # ✅ Task `{task.name}` was run successfully {time_since_execution} ago. Skipping...
264
+ # """)
265
+ # return False, old_report
266
+
267
+ # suitable_run_time = task.start.time()
268
+ # time_now = datetime.now().time()
269
+ # min_diff = abs(suitable_run_time.hour - time_now.hour) * 60 + abs(suitable_run_time.minute - time_now.minute)
270
+ # if not min_diff < tolerance_mins:
271
+ # status = f"⌚ Time now is not suitable for running task {task.name} (Ideally, it should be run at {suitable_run_time})"
272
+ # print(f"""
273
+ # {status}
274
+ # """)
275
+ # return False, old_report
276
+ # return True, old_report
277
+
278
+
279
+ # def run_task(task: Task) -> Report:
280
+ # start_time = datetime.now()
281
+
282
+ # # Print a fancy box using rich
283
+ # console = Console()
284
+ # console.print(Panel("RUNNING TASK", title="Status", expand=False))
285
+
286
+ # print(f"Task: {task.name}")
287
+
288
+ # shell_script = get_shell_script_executing_python_file(python_file=str(task.task_root.joinpath("task.py")), ve_name=task.venv)
289
+ # shell_script_root = PathExtended.tmp().joinpath(f"tmp_scripts/scheduler/{task.name}")
290
+ # shell_script_root.mkdir(parents=True, exist_ok=True)
291
+ # try:
292
+ # if platform.system() == 'Windows':
293
+ # shell_script = shell_script_root.joinpath("run.ps1").write_text(shell_script)
294
+ # subprocess.run(['powershell', '-ExecutionPolicy', 'Unrestricted', shell_script], check=True)
295
+ # elif platform.system() in ['Linux', 'Darwin']:
296
+ # shell_script = shell_script_root.joinpath("run.sh").write_text(shell_script)
297
+ # subprocess.run(['bash', shell_script], check=True)
298
+ # else: res = f"Error: Unsupported platform {platform.system()}."
299
+ # res = SUCCESS
300
+ # except subprocess.CalledProcessError:
301
+ # res = f"Error: The script {shell_script_root} failed to run."
302
+ # except Exception as e:
303
+ # res = f"Error: An unexpected error occurred while running the script {shell_script_root}: {e}"
304
+
305
+ # end_time = datetime.now()
306
+ # report = Report(name=task.name, start=start_time, end=end_time, status=res.replace('\n', '_NL_').strip().replace('=', '_eq_'))
307
+ # report.to_path(task.report_path)
308
+
309
+ # print(f"""
310
+ # ✅ Task {task.name} completed with status: {res}
311
+ # """)
312
+ # return report
@@ -2,13 +2,15 @@
2
2
  Utils
3
3
  """
4
4
 
5
- from crocodile.file_management import P
5
+ from machineconfig.utils.path_reduced import P as PathExtended
6
6
  # import crocodile.environment as env
7
7
  import machineconfig
8
- from machineconfig.utils.utils_options import check_tool_exists, choose_cloud_interactively, choose_multiple_options, choose_one_option, choose_ssh_host, display_options
9
- from machineconfig.utils.utils_links import build_links, symlink_copy, symlink_func
10
- from machineconfig.utils.utils_code import get_shell_script_executing_python_file, get_shell_file_executing_python_script, write_shell_script_to_default_program_path, print_code, PROGRAM_PATH
11
- from machineconfig.utils.utils_path import sanitize_path, match_file_name
8
+ from machineconfig.utils.options import check_tool_exists, choose_cloud_interactively, choose_multiple_options, choose_one_option, choose_ssh_host, display_options
9
+ from rich.console import Console
10
+ from rich.panel import Panel
11
+ from machineconfig.utils.links import build_links, symlink_copy, symlink_func
12
+ from machineconfig.utils.code import get_shell_script_executing_python_file, get_shell_file_executing_python_script, write_shell_script_to_default_program_path, print_code, PROGRAM_PATH
13
+ from machineconfig.utils.path import sanitize_path, match_file_name
12
14
 
13
15
  # Split into multiple assignments to fix incompatible tuple sizes
14
16
  _ = get_shell_script_executing_python_file, get_shell_file_executing_python_script, print_code, PROGRAM_PATH, display_options, write_shell_script_to_default_program_path
@@ -24,12 +26,12 @@ _ = sanitize_path
24
26
  _ = match_file_name
25
27
 
26
28
 
27
- LIBRARY_ROOT = P(machineconfig.__file__).resolve().parent # .replace(P.home().to_str().lower(), P.home().str)
29
+ LIBRARY_ROOT = PathExtended(machineconfig.__file__).resolve().parent # .replace(str(PathExtended.home()).lower(), PathExtended.home().str)
28
30
  REPO_ROOT = LIBRARY_ROOT.parent.parent
29
- CONFIG_PATH = P.home().joinpath(".config/machineconfig")
31
+ CONFIG_PATH = PathExtended.home().joinpath(".config/machineconfig")
30
32
  INSTALL_VERSION_ROOT = CONFIG_PATH.joinpath("cli_tools_installers/versions")
31
- INSTALL_TMP_DIR = P.home().joinpath("tmp_results", "tmp_installers")
32
- DEFAULTS_PATH = P.home().joinpath("dotfiles/machineconfig/defaults.ini")
33
+ INSTALL_TMP_DIR = PathExtended.home().joinpath("tmp_results", "tmp_installers")
34
+ DEFAULTS_PATH = PathExtended.home().joinpath("dotfiles/machineconfig/defaults.ini")
33
35
 
34
36
 
35
37
  # def get_latest_version(url: str) -> None:
@@ -49,7 +51,7 @@ DEFAULTS_PATH = P.home().joinpath("dotfiles/machineconfig/defaults.ini")
49
51
 
50
52
 
51
53
  def check_dotfiles_version_is_beyond(commit_dtm: str, update: bool=False):
52
- dotfiles_path = str(P.home().joinpath("dotfiles"))
54
+ dotfiles_path = str(PathExtended.home().joinpath("dotfiles"))
53
55
  from git import Repo
54
56
  repo = Repo(path=dotfiles_path)
55
57
  last_commit = repo.head.commit
@@ -58,16 +60,13 @@ def check_dotfiles_version_is_beyond(commit_dtm: str, update: bool=False):
58
60
  dtm = datetime(dtm.year, dtm.month, dtm.day, dtm.hour, dtm.minute, dtm.second)
59
61
  res = dtm > datetime.fromisoformat(commit_dtm)
60
62
  if res is False and update is True:
61
- print(f"""
62
- {'=' * 60}
63
- 🔄 UPDATE REQUIRED | Updating dotfiles because {dtm} < {datetime.fromisoformat(commit_dtm)}
64
- {'=' * 60}
65
- """)
63
+ console = Console()
64
+ console.print(Panel(f"🔄 UPDATE REQUIRED | Updating dotfiles because {dtm} < {datetime.fromisoformat(commit_dtm)}", border_style="bold blue", expand=False))
66
65
  from machineconfig.scripts.python.cloud_repo_sync import main
67
66
  main(cloud=None, path=dotfiles_path)
68
67
  return res
69
68
 
70
- def wait_for_jobs_to_finish(root: P, pattern: str, wait_for_n_jobs: int, max_wait_minutes: float) -> bool:
69
+ def wait_for_jobs_to_finish(root: PathExtended, pattern: str, wait_for_n_jobs: int, max_wait_minutes: float) -> bool:
71
70
  wait_finished: bool=False
72
71
  import time
73
72
  t0 = time.time()
@@ -76,18 +75,12 @@ def wait_for_jobs_to_finish(root: P, pattern: str, wait_for_n_jobs: int, max_wai
76
75
  counter = len(parts)
77
76
  if counter == wait_for_n_jobs:
78
77
  wait_finished = True
79
- print(f"""
80
- {'=' * 60}
81
- ✅ JOB COMPLETE | {counter} Jobs finished successfully. Exiting.
82
- {'=' * 60}
83
- """)
78
+ console = Console()
79
+ console.print(Panel(f"✅ JOB COMPLETE | {counter} Jobs finished successfully. Exiting.", border_style="bold blue", expand=False))
84
80
  return True
85
81
  if (time.time() - t0) > 60 * max_wait_minutes:
86
- print(f"""
87
- {'=' * 60}
88
- ⏱️ TIMEOUT | Waited for {max_wait_minutes} minutes. Exiting.
89
- {'=' * 60}
90
- """)
82
+ console = Console()
83
+ console.print(Panel(f"⏱️ TIMEOUT | Waited for {max_wait_minutes} minutes. Exiting.", border_style="bold blue", expand=False))
91
84
  return False
92
85
  print(f"""
93
86
  ⏳ PROGRESS | {counter}/{wait_for_n_jobs} jobs finished. Waiting for {wait_for_n_jobs - counter} more jobs to complete, sleeping for 60 seconds.