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

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

Potentially problematic release.


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

Files changed (504) hide show
  1. machineconfig/cluster/cloud_manager.py +445 -343
  2. machineconfig/cluster/data_transfer.py +63 -57
  3. machineconfig/cluster/distribute.py +284 -280
  4. machineconfig/cluster/file_manager.py +234 -237
  5. machineconfig/cluster/job_params.py +133 -133
  6. machineconfig/cluster/loader_runner.py +183 -149
  7. machineconfig/cluster/remote_machine.py +269 -252
  8. machineconfig/cluster/script_execution.py +215 -209
  9. machineconfig/cluster/script_notify_upon_completion.py +50 -43
  10. machineconfig/cluster/self_ssh.py +52 -54
  11. machineconfig/cluster/sessions_managers/__init__.py +0 -0
  12. machineconfig/cluster/sessions_managers/archive/__init__.py +0 -0
  13. machineconfig/{jobs/python → cluster/sessions_managers/archive}/create_zellij_template.py +5 -3
  14. machineconfig/cluster/sessions_managers/archive/session_managers.py +184 -0
  15. machineconfig/cluster/sessions_managers/demo_rich_zellij.py +0 -0
  16. machineconfig/cluster/sessions_managers/enhanced_command_runner.py +160 -0
  17. machineconfig/cluster/sessions_managers/wt_local.py +494 -0
  18. machineconfig/cluster/sessions_managers/wt_local_manager.py +577 -0
  19. machineconfig/cluster/sessions_managers/wt_remote.py +288 -0
  20. machineconfig/cluster/sessions_managers/wt_remote_manager.py +483 -0
  21. machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +196 -0
  22. machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +418 -0
  23. machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +175 -0
  24. machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +300 -0
  25. machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +228 -0
  26. machineconfig/cluster/sessions_managers/zellij_local.py +418 -0
  27. machineconfig/cluster/sessions_managers/zellij_local_manager.py +533 -0
  28. machineconfig/cluster/sessions_managers/zellij_remote.py +229 -0
  29. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +188 -0
  30. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +64 -0
  31. machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +126 -0
  32. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +334 -0
  33. machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +68 -0
  34. machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +119 -0
  35. machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +85 -0
  36. machineconfig/cluster/templates/cli_click.py +0 -1
  37. machineconfig/cluster/templates/cli_gooey.py +102 -104
  38. machineconfig/cluster/templates/run_cloud.py +51 -51
  39. machineconfig/cluster/templates/run_cluster.py +103 -59
  40. machineconfig/cluster/templates/run_remote.py +57 -58
  41. machineconfig/cluster/templates/utils.py +69 -36
  42. machineconfig/jobs/__pycache__/__init__.cpython-311.pyc +0 -0
  43. machineconfig/jobs/python/__pycache__/__init__.cpython-311.pyc +0 -0
  44. machineconfig/jobs/python/check_installations.py +258 -190
  45. machineconfig/jobs/python/create_bootable_media.py +7 -3
  46. machineconfig/jobs/python/python_cargo_build_share.py +50 -50
  47. machineconfig/jobs/python/python_ve_symlink.py +6 -6
  48. machineconfig/jobs/python/vscode/__pycache__/select_interpreter.cpython-311.pyc +0 -0
  49. machineconfig/jobs/python/vscode/api.py +1 -1
  50. machineconfig/jobs/python/vscode/link_ve.py +2 -2
  51. machineconfig/jobs/python/vscode/select_interpreter.py +9 -5
  52. machineconfig/jobs/python/vscode/sync_code.py +8 -5
  53. machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  54. machineconfig/jobs/python_custom_installers/archive/ngrok.py +1 -1
  55. machineconfig/jobs/python_custom_installers/dev/alacritty.py +3 -2
  56. machineconfig/jobs/python_custom_installers/dev/brave.py +7 -3
  57. machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +3 -4
  58. machineconfig/jobs/python_custom_installers/dev/code.py +3 -1
  59. machineconfig/jobs/python_custom_installers/dev/cursor.py +66 -5
  60. machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -1
  61. machineconfig/jobs/python_custom_installers/dev/espanso.py +13 -9
  62. machineconfig/jobs/python_custom_installers/dev/goes.py +2 -8
  63. machineconfig/jobs/python_custom_installers/dev/lvim.py +3 -2
  64. machineconfig/jobs/python_custom_installers/dev/nerdfont.py +1 -1
  65. machineconfig/jobs/python_custom_installers/dev/redis.py +7 -3
  66. machineconfig/jobs/python_custom_installers/dev/wezterm.py +8 -4
  67. machineconfig/jobs/python_custom_installers/dev/winget.py +194 -0
  68. machineconfig/jobs/python_custom_installers/{dev/docker.py → docker.py} +8 -3
  69. machineconfig/jobs/python_custom_installers/gh.py +4 -3
  70. machineconfig/jobs/python_custom_installers/hx.py +9 -8
  71. machineconfig/jobs/python_custom_installers/scripts/linux/vscode.sh +97 -30
  72. machineconfig/jobs/python_custom_installers/{dev/warp-cli.py → warp-cli.py} +1 -1
  73. machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  74. machineconfig/jobs/python_generic_installers/config.json +133 -9
  75. machineconfig/jobs/python_generic_installers/dev/config.json +208 -37
  76. machineconfig/jobs/python_generic_installers/update.py +3 -0
  77. machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  78. machineconfig/jobs/python_linux_installers/config.json +42 -6
  79. machineconfig/jobs/python_linux_installers/dev/config.json +79 -11
  80. machineconfig/jobs/python_windows_installers/config.json +6 -0
  81. machineconfig/profile/__pycache__/__init__.cpython-311.pyc +0 -0
  82. machineconfig/profile/__pycache__/create.cpython-311.pyc +0 -0
  83. machineconfig/profile/__pycache__/shell.cpython-311.pyc +0 -0
  84. machineconfig/profile/create.py +5 -5
  85. machineconfig/profile/create_hardlinks.py +5 -5
  86. machineconfig/profile/shell.py +44 -17
  87. machineconfig/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  88. machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
  89. machineconfig/scripts/linux/fire_agents +27 -0
  90. machineconfig/scripts/linux/mcinit +27 -0
  91. machineconfig/scripts/linux/wifi_conn +24 -0
  92. machineconfig/scripts/python/__pycache__/__init__.cpython-311.pyc +0 -0
  93. machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
  94. machineconfig/scripts/python/__pycache__/cloud_copy.cpython-311.pyc +0 -0
  95. machineconfig/scripts/python/__pycache__/cloud_mount.cpython-311.pyc +0 -0
  96. machineconfig/scripts/python/__pycache__/cloud_sync.cpython-311.pyc +0 -0
  97. machineconfig/scripts/python/__pycache__/croshell.cpython-311.pyc +0 -0
  98. machineconfig/scripts/python/__pycache__/devops.cpython-311.pyc +0 -0
  99. machineconfig/scripts/python/__pycache__/devops_backup_retrieve.cpython-311.pyc +0 -0
  100. machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-311.pyc +0 -0
  101. machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-311.pyc +0 -0
  102. machineconfig/scripts/python/__pycache__/fire_agents.cpython-311.pyc +0 -0
  103. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-311.pyc +0 -0
  104. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-313.pyc +0 -0
  105. machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-311.pyc +0 -0
  106. machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
  107. machineconfig/scripts/python/ai/__pycache__/init.cpython-311.pyc +0 -0
  108. machineconfig/scripts/python/ai/init.py +56 -0
  109. machineconfig/scripts/python/ai/rules/python/dev.md +31 -0
  110. machineconfig/scripts/python/archive/im2text.py +1 -3
  111. machineconfig/scripts/python/choose_wezterm_theme.py +3 -3
  112. machineconfig/scripts/python/cloud_copy.py +10 -10
  113. machineconfig/scripts/python/cloud_manager.py +77 -99
  114. machineconfig/scripts/python/cloud_mount.py +13 -12
  115. machineconfig/scripts/python/cloud_repo_sync.py +14 -11
  116. machineconfig/scripts/python/croshell.py +24 -21
  117. machineconfig/scripts/python/devops.py +12 -17
  118. machineconfig/scripts/python/devops_add_identity.py +32 -10
  119. machineconfig/scripts/python/devops_add_ssh_key.py +10 -10
  120. machineconfig/scripts/python/devops_backup_retrieve.py +9 -8
  121. machineconfig/scripts/python/devops_devapps_install.py +6 -6
  122. machineconfig/scripts/python/devops_update_repos.py +4 -3
  123. machineconfig/scripts/python/dotfile.py +10 -7
  124. machineconfig/scripts/python/fire_agents.py +69 -0
  125. machineconfig/scripts/python/fire_jobs.py +62 -65
  126. machineconfig/scripts/python/ftpx.py +8 -8
  127. machineconfig/scripts/python/get_zellij_cmd.py +3 -3
  128. machineconfig/scripts/python/gh_models.py +6 -4
  129. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.pyc +0 -0
  130. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
  131. machineconfig/scripts/python/helpers/__pycache__/cloud_helpers.cpython-311.pyc +0 -0
  132. machineconfig/scripts/python/helpers/__pycache__/helpers2.cpython-311.pyc +0 -0
  133. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-311.pyc +0 -0
  134. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-313.pyc +0 -0
  135. machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-311.pyc +0 -0
  136. machineconfig/scripts/python/helpers/cloud_helpers.py +12 -12
  137. machineconfig/scripts/python/helpers/helpers2.py +9 -8
  138. machineconfig/scripts/python/helpers/helpers4.py +23 -35
  139. machineconfig/scripts/python/helpers/repo_sync_helpers.py +17 -16
  140. machineconfig/scripts/python/mount_nfs.py +8 -11
  141. machineconfig/scripts/python/mount_nw_drive.py +4 -4
  142. machineconfig/scripts/python/mount_ssh.py +2 -2
  143. machineconfig/scripts/python/onetimeshare.py +56 -57
  144. machineconfig/scripts/python/pomodoro.py +55 -55
  145. machineconfig/scripts/python/repos.py +26 -18
  146. machineconfig/scripts/python/scheduler.py +70 -53
  147. machineconfig/scripts/python/snapshot.py +21 -24
  148. machineconfig/scripts/python/start_slidev.py +6 -5
  149. machineconfig/scripts/python/start_terminals.py +3 -1
  150. machineconfig/scripts/python/viewer.py +5 -4
  151. machineconfig/scripts/python/viewer_template.py +138 -140
  152. machineconfig/scripts/python/wifi_conn.py +412 -60
  153. machineconfig/scripts/python/wsl_windows_transfer.py +18 -3
  154. machineconfig/scripts/windows/mcinit.ps1 +4 -0
  155. machineconfig/settings/linters/.pylintrc +6 -7
  156. machineconfig/settings/lvim/windows/config.lua +0 -0
  157. machineconfig/settings/shells/bash/init.sh +6 -0
  158. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +7 -6
  159. machineconfig/settings/shells/pwsh/init.ps1 +6 -6
  160. machineconfig/settings/shells/wt/settings.json +51 -266
  161. machineconfig/setup_linux/web_shortcuts/interactive.sh +5 -2
  162. machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +3 -6
  163. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +11 -9
  164. machineconfig/utils/ai/url2md.py +2 -2
  165. machineconfig/utils/cloud/onedrive/setup_oauth.py +59 -0
  166. machineconfig/utils/cloud/onedrive/transaction.py +796 -0
  167. machineconfig/utils/code.py +22 -13
  168. machineconfig/utils/installer.py +78 -35
  169. machineconfig/utils/installer_utils/installer_abc.py +7 -6
  170. machineconfig/utils/installer_utils/installer_class.py +44 -25
  171. machineconfig/utils/io_save.py +107 -0
  172. machineconfig/utils/links.py +19 -15
  173. machineconfig/utils/options.py +4 -8
  174. machineconfig/utils/path.py +91 -78
  175. machineconfig/utils/path_reduced.py +608 -0
  176. machineconfig/utils/procs.py +110 -45
  177. machineconfig/utils/scheduling.py +312 -222
  178. machineconfig/utils/utils.py +7 -7
  179. machineconfig/utils/utils2.py +42 -0
  180. machineconfig/utils/utils5.py +84 -0
  181. machineconfig/utils/ve.py +49 -87
  182. {machineconfig-1.95.dist-info → machineconfig-1.97.dist-info}/METADATA +2 -2
  183. machineconfig-1.97.dist-info/RECORD +442 -0
  184. machineconfig/cluster/session_managers.py +0 -183
  185. machineconfig/cluster/templates/f.py +0 -4
  186. machineconfig/jobs/python/__pycache__/check_installations.cpython-311.pyc +0 -0
  187. machineconfig/jobs/python/__pycache__/checkout_version.cpython-311.pyc +0 -0
  188. machineconfig/jobs/python/__pycache__/python_ve_symlink.cpython-311.pyc +0 -0
  189. machineconfig/jobs/python/checkout_version.py +0 -123
  190. machineconfig/jobs/python/vscode/__pycache__/api.cpython-311.pyc +0 -0
  191. machineconfig/jobs/python/vscode/__pycache__/link_ve.cpython-311.pyc +0 -0
  192. machineconfig/jobs/python_custom_installers/__pycache__/hx.cpython-311.pyc +0 -0
  193. machineconfig/jobs/python_windows_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  194. machineconfig/scripts/python/.mypy_cache/.gitignore +0 -2
  195. machineconfig/scripts/python/.mypy_cache/3.11/@plugins_snapshot.json +0 -1
  196. machineconfig/scripts/python/.mypy_cache/3.11/__future__.data.json +0 -1
  197. machineconfig/scripts/python/.mypy_cache/3.11/__future__.meta.json +0 -1
  198. machineconfig/scripts/python/.mypy_cache/3.11/_ast.data.json +0 -1
  199. machineconfig/scripts/python/.mypy_cache/3.11/_ast.meta.json +0 -1
  200. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.data.json +0 -1
  201. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.meta.json +0 -1
  202. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.data.json +0 -1
  203. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.meta.json +0 -1
  204. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.data.json +0 -1
  205. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.meta.json +0 -1
  206. machineconfig/scripts/python/.mypy_cache/3.11/_compression.data.json +0 -1
  207. machineconfig/scripts/python/.mypy_cache/3.11/_compression.meta.json +0 -1
  208. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.data.json +0 -1
  209. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.meta.json +0 -1
  210. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.data.json +0 -1
  211. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.meta.json +0 -1
  212. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.data.json +0 -1
  213. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.meta.json +0 -1
  214. machineconfig/scripts/python/.mypy_cache/3.11/_io.data.json +0 -1
  215. machineconfig/scripts/python/.mypy_cache/3.11/_io.meta.json +0 -1
  216. machineconfig/scripts/python/.mypy_cache/3.11/_locale.data.json +0 -1
  217. machineconfig/scripts/python/.mypy_cache/3.11/_locale.meta.json +0 -1
  218. machineconfig/scripts/python/.mypy_cache/3.11/_stat.data.json +0 -1
  219. machineconfig/scripts/python/.mypy_cache/3.11/_stat.meta.json +0 -1
  220. machineconfig/scripts/python/.mypy_cache/3.11/_struct.data.json +0 -1
  221. machineconfig/scripts/python/.mypy_cache/3.11/_struct.meta.json +0 -1
  222. machineconfig/scripts/python/.mypy_cache/3.11/_thread.data.json +0 -1
  223. machineconfig/scripts/python/.mypy_cache/3.11/_thread.meta.json +0 -1
  224. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.data.json +0 -1
  225. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.meta.json +0 -1
  226. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.data.json +0 -1
  227. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.meta.json +0 -1
  228. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.data.json +0 -1
  229. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.meta.json +0 -1
  230. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.data.json +0 -1
  231. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.meta.json +0 -1
  232. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.data.json +0 -1
  233. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.meta.json +0 -1
  234. machineconfig/scripts/python/.mypy_cache/3.11/abc.data.json +0 -1
  235. machineconfig/scripts/python/.mypy_cache/3.11/abc.meta.json +0 -1
  236. machineconfig/scripts/python/.mypy_cache/3.11/argparse.data.json +0 -1
  237. machineconfig/scripts/python/.mypy_cache/3.11/argparse.meta.json +0 -1
  238. machineconfig/scripts/python/.mypy_cache/3.11/ast.data.json +0 -1
  239. machineconfig/scripts/python/.mypy_cache/3.11/ast.meta.json +0 -1
  240. machineconfig/scripts/python/.mypy_cache/3.11/binascii.data.json +0 -1
  241. machineconfig/scripts/python/.mypy_cache/3.11/binascii.meta.json +0 -1
  242. machineconfig/scripts/python/.mypy_cache/3.11/builtins.data.json +0 -1
  243. machineconfig/scripts/python/.mypy_cache/3.11/builtins.meta.json +0 -1
  244. machineconfig/scripts/python/.mypy_cache/3.11/bz2.data.json +0 -1
  245. machineconfig/scripts/python/.mypy_cache/3.11/bz2.meta.json +0 -1
  246. machineconfig/scripts/python/.mypy_cache/3.11/calendar.data.json +0 -1
  247. machineconfig/scripts/python/.mypy_cache/3.11/calendar.meta.json +0 -1
  248. machineconfig/scripts/python/.mypy_cache/3.11/codecs.data.json +0 -1
  249. machineconfig/scripts/python/.mypy_cache/3.11/codecs.meta.json +0 -1
  250. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.data.json +0 -1
  251. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.meta.json +0 -1
  252. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.data.json +0 -1
  253. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.meta.json +0 -1
  254. machineconfig/scripts/python/.mypy_cache/3.11/configparser.data.json +0 -1
  255. machineconfig/scripts/python/.mypy_cache/3.11/configparser.meta.json +0 -1
  256. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.data.json +0 -1
  257. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.meta.json +0 -1
  258. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.data.json +0 -1
  259. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.meta.json +0 -1
  260. machineconfig/scripts/python/.mypy_cache/3.11/datetime.data.json +0 -1
  261. machineconfig/scripts/python/.mypy_cache/3.11/datetime.meta.json +0 -1
  262. machineconfig/scripts/python/.mypy_cache/3.11/decimal.data.json +0 -1
  263. machineconfig/scripts/python/.mypy_cache/3.11/decimal.meta.json +0 -1
  264. machineconfig/scripts/python/.mypy_cache/3.11/dis.data.json +0 -1
  265. machineconfig/scripts/python/.mypy_cache/3.11/dis.meta.json +0 -1
  266. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.data.json +0 -1
  267. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.meta.json +0 -1
  268. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.data.json +0 -1
  269. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.meta.json +0 -1
  270. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.data.json +0 -1
  271. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.meta.json +0 -1
  272. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.data.json +0 -1
  273. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.meta.json +0 -1
  274. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.data.json +0 -1
  275. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.meta.json +0 -1
  276. machineconfig/scripts/python/.mypy_cache/3.11/email/header.data.json +0 -1
  277. machineconfig/scripts/python/.mypy_cache/3.11/email/header.meta.json +0 -1
  278. machineconfig/scripts/python/.mypy_cache/3.11/email/message.data.json +0 -1
  279. machineconfig/scripts/python/.mypy_cache/3.11/email/message.meta.json +0 -1
  280. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.data.json +0 -1
  281. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.meta.json +0 -1
  282. machineconfig/scripts/python/.mypy_cache/3.11/enum.data.json +0 -1
  283. machineconfig/scripts/python/.mypy_cache/3.11/enum.meta.json +0 -1
  284. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.data.json +0 -1
  285. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.meta.json +0 -1
  286. machineconfig/scripts/python/.mypy_cache/3.11/functools.data.json +0 -1
  287. machineconfig/scripts/python/.mypy_cache/3.11/functools.meta.json +0 -1
  288. machineconfig/scripts/python/.mypy_cache/3.11/gc.data.json +0 -1
  289. machineconfig/scripts/python/.mypy_cache/3.11/gc.meta.json +0 -1
  290. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.data.json +0 -1
  291. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.meta.json +0 -1
  292. machineconfig/scripts/python/.mypy_cache/3.11/getpass.data.json +0 -1
  293. machineconfig/scripts/python/.mypy_cache/3.11/getpass.meta.json +0 -1
  294. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.data.json +0 -1
  295. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.meta.json +0 -1
  296. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.data.json +0 -1
  297. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.meta.json +0 -1
  298. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.data.json +0 -1
  299. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.meta.json +0 -1
  300. machineconfig/scripts/python/.mypy_cache/3.11/git/config.data.json +0 -1
  301. machineconfig/scripts/python/.mypy_cache/3.11/git/config.meta.json +0 -1
  302. machineconfig/scripts/python/.mypy_cache/3.11/git/db.data.json +0 -1
  303. machineconfig/scripts/python/.mypy_cache/3.11/git/db.meta.json +0 -1
  304. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.data.json +0 -1
  305. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.meta.json +0 -1
  306. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.data.json +0 -1
  307. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.meta.json +0 -1
  308. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.data.json +0 -1
  309. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.meta.json +0 -1
  310. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.data.json +0 -1
  311. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.meta.json +0 -1
  312. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.data.json +0 -1
  313. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.meta.json +0 -1
  314. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.data.json +0 -1
  315. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.meta.json +0 -1
  316. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.data.json +0 -1
  317. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.meta.json +0 -1
  318. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.data.json +0 -1
  319. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.meta.json +0 -1
  320. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.data.json +0 -1
  321. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.meta.json +0 -1
  322. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.data.json +0 -1
  323. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.meta.json +0 -1
  324. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.data.json +0 -1
  325. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.meta.json +0 -1
  326. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.data.json +0 -1
  327. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.meta.json +0 -1
  328. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.data.json +0 -1
  329. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.meta.json +0 -1
  330. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.data.json +0 -1
  331. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.meta.json +0 -1
  332. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.data.json +0 -1
  333. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.meta.json +0 -1
  334. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.data.json +0 -1
  335. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.meta.json +0 -1
  336. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.data.json +0 -1
  337. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.meta.json +0 -1
  338. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.data.json +0 -1
  339. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.meta.json +0 -1
  340. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.data.json +0 -1
  341. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.meta.json +0 -1
  342. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.data.json +0 -1
  343. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.meta.json +0 -1
  344. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.data.json +0 -1
  345. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.meta.json +0 -1
  346. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.data.json +0 -1
  347. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.meta.json +0 -1
  348. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.data.json +0 -1
  349. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.meta.json +0 -1
  350. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.data.json +0 -1
  351. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.meta.json +0 -1
  352. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.data.json +0 -1
  353. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.meta.json +0 -1
  354. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.data.json +0 -1
  355. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.meta.json +0 -1
  356. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.data.json +0 -1
  357. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.meta.json +0 -1
  358. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.data.json +0 -1
  359. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.meta.json +0 -1
  360. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.data.json +0 -1
  361. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.meta.json +0 -1
  362. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.data.json +0 -1
  363. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.meta.json +0 -1
  364. machineconfig/scripts/python/.mypy_cache/3.11/git/types.data.json +0 -1
  365. machineconfig/scripts/python/.mypy_cache/3.11/git/types.meta.json +0 -1
  366. machineconfig/scripts/python/.mypy_cache/3.11/git/util.data.json +0 -1
  367. machineconfig/scripts/python/.mypy_cache/3.11/git/util.meta.json +0 -1
  368. machineconfig/scripts/python/.mypy_cache/3.11/glob.data.json +0 -1
  369. machineconfig/scripts/python/.mypy_cache/3.11/glob.meta.json +0 -1
  370. machineconfig/scripts/python/.mypy_cache/3.11/gzip.data.json +0 -1
  371. machineconfig/scripts/python/.mypy_cache/3.11/gzip.meta.json +0 -1
  372. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.data.json +0 -1
  373. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.meta.json +0 -1
  374. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.data.json +0 -1
  375. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.meta.json +0 -1
  376. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.data.json +0 -1
  377. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.meta.json +0 -1
  378. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.data.json +0 -1
  379. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.meta.json +0 -1
  380. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.data.json +0 -1
  381. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.meta.json +0 -1
  382. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.data.json +0 -1
  383. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.meta.json +0 -1
  384. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.data.json +0 -1
  385. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.meta.json +0 -1
  386. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.data.json +0 -1
  387. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.meta.json +0 -1
  388. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.data.json +0 -1
  389. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.meta.json +0 -1
  390. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.data.json +0 -1
  391. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.meta.json +0 -1
  392. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.data.json +0 -1
  393. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.meta.json +0 -1
  394. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.data.json +0 -1
  395. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.meta.json +0 -1
  396. machineconfig/scripts/python/.mypy_cache/3.11/inspect.data.json +0 -1
  397. machineconfig/scripts/python/.mypy_cache/3.11/inspect.meta.json +0 -1
  398. machineconfig/scripts/python/.mypy_cache/3.11/io.data.json +0 -1
  399. machineconfig/scripts/python/.mypy_cache/3.11/io.meta.json +0 -1
  400. machineconfig/scripts/python/.mypy_cache/3.11/itertools.data.json +0 -1
  401. machineconfig/scripts/python/.mypy_cache/3.11/itertools.meta.json +0 -1
  402. machineconfig/scripts/python/.mypy_cache/3.11/locale.data.json +0 -1
  403. machineconfig/scripts/python/.mypy_cache/3.11/locale.meta.json +0 -1
  404. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.data.json +0 -1
  405. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.meta.json +0 -1
  406. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.data.json +0 -1
  407. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.meta.json +0 -1
  408. machineconfig/scripts/python/.mypy_cache/3.11/mmap.data.json +0 -1
  409. machineconfig/scripts/python/.mypy_cache/3.11/mmap.meta.json +0 -1
  410. machineconfig/scripts/python/.mypy_cache/3.11/numbers.data.json +0 -1
  411. machineconfig/scripts/python/.mypy_cache/3.11/numbers.meta.json +0 -1
  412. machineconfig/scripts/python/.mypy_cache/3.11/opcode.data.json +0 -1
  413. machineconfig/scripts/python/.mypy_cache/3.11/opcode.meta.json +0 -1
  414. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.data.json +0 -1
  415. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.meta.json +0 -1
  416. machineconfig/scripts/python/.mypy_cache/3.11/os/path.data.json +0 -1
  417. machineconfig/scripts/python/.mypy_cache/3.11/os/path.meta.json +0 -1
  418. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.data.json +0 -1
  419. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.meta.json +0 -1
  420. machineconfig/scripts/python/.mypy_cache/3.11/platform.data.json +0 -1
  421. machineconfig/scripts/python/.mypy_cache/3.11/platform.meta.json +0 -1
  422. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.data.json +0 -1
  423. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.meta.json +0 -1
  424. machineconfig/scripts/python/.mypy_cache/3.11/re.data.json +0 -1
  425. machineconfig/scripts/python/.mypy_cache/3.11/re.meta.json +0 -1
  426. machineconfig/scripts/python/.mypy_cache/3.11/resource.data.json +0 -1
  427. machineconfig/scripts/python/.mypy_cache/3.11/resource.meta.json +0 -1
  428. machineconfig/scripts/python/.mypy_cache/3.11/shlex.data.json +0 -1
  429. machineconfig/scripts/python/.mypy_cache/3.11/shlex.meta.json +0 -1
  430. machineconfig/scripts/python/.mypy_cache/3.11/shutil.data.json +0 -1
  431. machineconfig/scripts/python/.mypy_cache/3.11/shutil.meta.json +0 -1
  432. machineconfig/scripts/python/.mypy_cache/3.11/signal.data.json +0 -1
  433. machineconfig/scripts/python/.mypy_cache/3.11/signal.meta.json +0 -1
  434. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.data.json +0 -1
  435. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.meta.json +0 -1
  436. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.data.json +0 -1
  437. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.meta.json +0 -1
  438. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.data.json +0 -1
  439. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.meta.json +0 -1
  440. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.data.json +0 -1
  441. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.meta.json +0 -1
  442. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.data.json +0 -1
  443. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.meta.json +0 -1
  444. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.data.json +0 -1
  445. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.meta.json +0 -1
  446. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.data.json +0 -1
  447. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.meta.json +0 -1
  448. machineconfig/scripts/python/.mypy_cache/3.11/stat.data.json +0 -1
  449. machineconfig/scripts/python/.mypy_cache/3.11/stat.meta.json +0 -1
  450. machineconfig/scripts/python/.mypy_cache/3.11/string.data.json +0 -1
  451. machineconfig/scripts/python/.mypy_cache/3.11/string.meta.json +0 -1
  452. machineconfig/scripts/python/.mypy_cache/3.11/struct.data.json +0 -1
  453. machineconfig/scripts/python/.mypy_cache/3.11/struct.meta.json +0 -1
  454. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.data.json +0 -1
  455. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.meta.json +0 -1
  456. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.data.json +0 -1
  457. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.meta.json +0 -1
  458. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.data.json +0 -1
  459. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.meta.json +0 -1
  460. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.data.json +0 -1
  461. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.meta.json +0 -1
  462. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.data.json +0 -1
  463. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.meta.json +0 -1
  464. machineconfig/scripts/python/.mypy_cache/3.11/threading.data.json +0 -1
  465. machineconfig/scripts/python/.mypy_cache/3.11/threading.meta.json +0 -1
  466. machineconfig/scripts/python/.mypy_cache/3.11/time.data.json +0 -1
  467. machineconfig/scripts/python/.mypy_cache/3.11/time.meta.json +0 -1
  468. machineconfig/scripts/python/.mypy_cache/3.11/types.data.json +0 -1
  469. machineconfig/scripts/python/.mypy_cache/3.11/types.meta.json +0 -1
  470. machineconfig/scripts/python/.mypy_cache/3.11/typing.data.json +0 -1
  471. machineconfig/scripts/python/.mypy_cache/3.11/typing.meta.json +0 -1
  472. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.data.json +0 -1
  473. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.meta.json +0 -1
  474. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.data.json +0 -1
  475. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.meta.json +0 -1
  476. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.data.json +0 -1
  477. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.meta.json +0 -1
  478. machineconfig/scripts/python/.mypy_cache/3.11/uuid.data.json +0 -1
  479. machineconfig/scripts/python/.mypy_cache/3.11/uuid.meta.json +0 -1
  480. machineconfig/scripts/python/.mypy_cache/3.11/warnings.data.json +0 -1
  481. machineconfig/scripts/python/.mypy_cache/3.11/warnings.meta.json +0 -1
  482. machineconfig/scripts/python/.mypy_cache/3.11/weakref.data.json +0 -1
  483. machineconfig/scripts/python/.mypy_cache/3.11/weakref.meta.json +0 -1
  484. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.data.json +0 -1
  485. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.meta.json +0 -1
  486. machineconfig/scripts/python/.mypy_cache/3.11/zlib.data.json +0 -1
  487. machineconfig/scripts/python/.mypy_cache/3.11/zlib.meta.json +0 -1
  488. machineconfig/scripts/python/.mypy_cache/CACHEDIR.TAG +0 -3
  489. machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-311.pyc +0 -0
  490. machineconfig/scripts/python/__pycache__/gh_models.cpython-311.pyc +0 -0
  491. machineconfig/scripts/python/__pycache__/url2md.cpython-311.pyc +0 -0
  492. machineconfig/scripts/python/__pycache__/viewer.cpython-311.pyc +0 -0
  493. machineconfig/scripts/python/__pycache__/vscode_api.cpython-311.pyc +0 -0
  494. machineconfig/settings/__pycache__/__init__.cpython-311.pyc +0 -0
  495. machineconfig/settings/linters/.ruff_cache/.gitignore +0 -2
  496. machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +0 -1
  497. machineconfig/settings/shells/ipy/profiles/default/__pycache__/__init__.cpython-311.pyc +0 -0
  498. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/__init__.cpython-311.pyc +0 -0
  499. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/playext.cpython-311.pyc +0 -0
  500. machineconfig/utils/ve_utils/ve1.py +0 -111
  501. machineconfig/utils/ve_utils/ve2.py +0 -155
  502. machineconfig-1.95.dist-info/RECORD +0 -712
  503. {machineconfig-1.95.dist-info → machineconfig-1.97.dist-info}/WHEEL +0 -0
  504. {machineconfig-1.95.dist-info → machineconfig-1.97.dist-info}/top_level.txt +0 -0
@@ -1,37 +1,70 @@
1
1
 
2
- """
3
- This module contains utility functions for the cluster module.
4
- """
5
-
6
- import inspect
7
- from crocodile.core import Save
8
- from crocodile.file_management import P
9
- from machineconfig.cluster.remote_machine import WorkloadParams
10
- from typing import Optional, Any, Callable
11
-
12
-
13
- def expensive_function(workload_params: WorkloadParams, sim_dict: Optional[dict[str, Any]] = None) -> P:
14
- import time
15
- from rich.progress import track
16
- print("Hello, I am one thread of an expensive function, and I just started running ...")
17
- print(f"Oh, I recieved this parameter: {sim_dict=} & {workload_params=} ")
18
- execution_time_in_seconds = 60 * 1
19
- steps = 100
20
- for _ in track(range(steps), description="Progress bar ..."):
21
- time.sleep(execution_time_in_seconds / steps) # Simulate work being done
22
- print(f"I'm done, I crunched numbers from {workload_params.idx_start} to {workload_params.idx_end}.")
23
- _ = workload_params.idx_max
24
-
25
- save_dir = P.tmp().joinpath("tmp_dirs/expensive_function_single_thread").joinpath(workload_params.save_suffix, f"thread_{workload_params.idx_start}_{workload_params.idx_end}").create()
26
- Save.pickle(obj={'a': 1}, path=save_dir.joinpath("trial_func_result.pkl"))
27
- return save_dir
28
-
29
-
30
- def assert_has_workload_params(func_or_method: Callable[..., Any]):
31
- if not inspect.isfunction(func_or_method) and not inspect.ismethod(func_or_method): raise TypeError(f"{func_or_method} is not a function or method.")
32
- try: params = inspect.signature(func_or_method).parameters
33
- except ValueError as e: raise ValueError(f"Failed to inspect signature of {func_or_method}: {e}") from e
34
- if 'workload_params' not in params: raise ValueError(f"{func_or_method.__name__}() does not have 'workload_params' parameter.")
35
- if params['workload_params'].kind != inspect.Parameter.POSITIONAL_OR_KEYWORD: raise ValueError(f"{func_or_method.__name__}() 'workload_params' parameter is not a positional or keyword parameter.")
36
- if params['workload_params'].default is not inspect.Parameter.empty: raise ValueError(f"{func_or_method.__name__}() 'workload_params' parameter should not have a default value.")
37
- return True
2
+ # """
3
+ # This module contains utility functions for the cluster module.
4
+ # """
5
+
6
+ # import inspect
7
+ # from machineconfig.utils.io_save import save_pickle
8
+
9
+ # from machineconfig.cluster.remote_machine import WorkloadParams
10
+ from typing import Optional
11
+ from crocodile.file_management import P, PLike
12
+
13
+ # def expensive_function(workload_params: WorkloadParams, sim_dict: Optional[dict[str, Any]] = None) -> P:
14
+ # import time
15
+ # from rich.progress import track
16
+ # print("Hello, I am one thread of an expensive function, and I just started running ...")
17
+ # print(f"Oh, I recieved this parameter: {sim_dict=} & {workload_params=} ")
18
+ # execution_time_in_seconds = 60 * 1
19
+ # steps = 100
20
+ # for _ in track(range(steps), description="Progress bar ..."):
21
+ # time.sleep(execution_time_in_seconds / steps) # Simulate work being done
22
+ # print(f"I'm done, I crunched numbers from {workload_params.idx_start} to {workload_params.idx_end}.")
23
+ # _ = workload_params.idx_max
24
+
25
+ # save_dir = PathExtended.tmp().joinpath("tmp_dirs/expensive_function_single_thread").joinpath(workload_params.save_suffix, f"thread_{workload_params.idx_start}_{workload_params.idx_end}")
26
+ # save_dir.mkdir(parents=True, exist_ok=True)
27
+ # save_pickle(obj={'a': 1}, path=save_dir.joinpath("trial_func_result.pkl"))
28
+ # return save_dir
29
+
30
+
31
+ # def assert_has_workload_params(func_or_method: Callable[..., Any]):
32
+ # if not inspect.isfunction(func_or_method) and not inspect.ismethod(func_or_method): raise TypeError(f"{func_or_method} is not a function or method.")
33
+ # try: params = inspect.signature(func_or_method).parameters
34
+ # except ValueError as e: raise ValueError(f"Failed to inspect signature of {func_or_method}: {e}") from e
35
+ # if 'workload_params' not in params: raise ValueError(f"{func_or_method.__name__}() does not have 'workload_params' parameter.")
36
+ # if params['workload_params'].kind != inspect.Parameter.POSITIONAL_OR_KEYWORD: raise ValueError(f"{func_or_method.__name__}() 'workload_params' parameter is not a positional or keyword parameter.")
37
+ # if params['workload_params'].default is not inspect.Parameter.empty: raise ValueError(f"{func_or_method.__name__}() 'workload_params' parameter should not have a default value.")
38
+ # return True
39
+
40
+
41
+ def to_cloud(localpath: PLike, cloud: str, remotepath: Optional[PLike], zip: bool = False, encrypt: bool = False,
42
+ key: Optional[bytes] = None, pwd: Optional[str] = None, rel2home: bool = False, strict: bool = True,
43
+ obfuscate: bool = False,
44
+ share: bool = False, verbose: bool = True, os_specific: bool = False, transfers: int = 10, root: Optional[str] = "myhome") -> 'P':
45
+ to_del = []
46
+ localpath = P(localpath).expanduser().absolute() if not P(localpath).exists() else P(localpath)
47
+ if zip:
48
+ localpath = localpath.zip(inplace=False)
49
+ to_del.append(localpath)
50
+ if encrypt:
51
+ localpath = localpath.encrypt(key=key, pwd=pwd, inplace=False)
52
+ to_del.append(localpath)
53
+ if remotepath is None:
54
+ rp = localpath.get_remote_path(root=root, os_specific=os_specific, rel2home=rel2home, strict=strict, obfuscate=obfuscate) # if rel2home else (P(root) / localpath if root is not None else localpath)
55
+ else: rp = P(remotepath)
56
+
57
+ from rclone_python import rclone
58
+ rclone.copy(localpath.as_posix(), f"{cloud}:{rp.as_posix()}", show_progress=True)
59
+
60
+ if share:
61
+ if verbose: print("🔗 SHARING FILE")
62
+ tmp = rclone.link(f"{cloud}:{rp.as_posix()}")
63
+ return P(tmp)
64
+ return localpath
65
+
66
+
67
+ if __name__ == "__main__":
68
+ from pathlib import Path
69
+ localpath = Path.home().joinpath("Downloads", "exchangeInfo")
70
+ to_cloud(localpath, "odp", remotepath=None)
@@ -1,196 +1,264 @@
1
- """CI
2
- """
1
+ # """CI
2
+ # """
3
3
 
4
4
 
5
- import time
6
- import pandas as pd
5
+ # import time
7
6
  import platform
8
- from rich.console import Console
9
- # from rich.progress import track
10
- from machineconfig.utils.utils import LIBRARY_ROOT, INSTALL_VERSION_ROOT
11
- from machineconfig.utils.installer import get_installed_cli_apps
12
- from crocodile.core import List as L, install_n_import, Struct
13
- from crocodile.file_management import P
14
- from crocodile.meta import Terminal
15
- from tqdm import tqdm
16
- from typing import Optional
17
- from datetime import datetime
7
+ # from typing import Any
8
+ # from rich.console import Console
9
+ # from machineconfig.utils.utils2 import pprint
10
+ # # from rich.progress import track
11
+ from machineconfig.utils.utils import LIBRARY_ROOT
12
+ # from machineconfig.utils.installer import get_installed_cli_apps
13
+
14
+ # from tqdm import tqdm
15
+ # from typing import Optional
16
+ # from datetime import datetime
17
+ # import csv
18
18
 
19
19
 
20
20
  APP_SUMMARY_PATH = LIBRARY_ROOT.joinpath(f"profile/records/{platform.system().lower()}/apps_summary_report.csv")
21
- CLOUD: str = "gdw" # Read.ini(DEFAULTS_PATH)['general']['rclone_config_name']
22
- # my onedrive doesn't allow sharing.
23
-
24
-
25
- def scan(path: P, pct: float = 0.0):
26
- vt = install_n_import(library="vt", package="vt-py")
27
- client = vt.Client(P.home().joinpath("dotfiles/creds/tokens/virustotal").read_text().split("\n")[0])
28
- console = Console()
29
- console.rule(f"Scanning {path}. {pct:.2f}% done")
30
- if path.is_dir():
31
- print(f"📁 Skipping {path} as it is a directory.")
32
- return None
33
- with open(str(path), "rb") as f:
34
- analysis = client.scan_file(f)
35
- repeat_counter: int = 0
36
- while True:
37
- with console.status(f"waiting for scan of {path} ... "):
38
- try:
39
- anal = client.get_object("/analyses/{}", analysis.id)
40
- if anal.status == "completed": break
41
- except Exception as ex: # type: ignore
42
- repeat_counter += 1
43
- if repeat_counter > 2:
44
- raise ValueError(f"❌ Error in scanning {path}") from ex
45
- print("⚠️ Error in scanning, trying again...")
46
- time.sleep(30)
47
- df = pd.DataFrame(anal.results.values())
48
- malicious = []
49
- for _idx, row in df.iterrows():
50
- # try:
51
- # print(row.result)
52
- # except Exception as ex: # type: ignore
53
- # print(row)
54
- if row.result is None and row.category in ["undetected", "type-unsupported", "failure", "timeout", "confirmed-timeout"]: continue
55
- else:
56
- Struct(row.to_dict()).print(as_config=True, title=f"🔍 Found Category {row.category}")
57
- malicious.append(row)
58
- positive_pct: float = round(number=len(malicious) / len(df) * 100, ndigits=1)
59
- print(f"""
60
- {'=' * 50}
61
- 🔬 SCAN RESULTS | Positive ratio: {positive_pct:.1f}%
62
- {'=' * 50}
63
- """)
64
- return positive_pct, df
65
-
66
-
67
- def main() -> None:
68
- apps_paths_tmp: L[P] = get_installed_cli_apps()
69
- versions_files_paths: L[P] = INSTALL_VERSION_ROOT.search()
70
- app_versions: list[Optional[str]] = []
71
- apps_paths_raw: L[P] = L([])
72
- for an_app in apps_paths_tmp:
73
- version_path = versions_files_paths.filter(lambda x: x.stem == an_app.stem)
74
- if len(version_path) == 1:
75
- app_versions.append(version_path.list[0].read_text())
76
- apps_paths_raw.append(an_app)
77
- # if an_app.stem in versions_files_paths.stem:
78
- # app_versions.append(versions_files_paths.filter(lambda x: x.stem == an_app.stem.replace(".exe", "")).list[0].read_text())
79
- # else:
80
- # print(f"🤔 Cloud not find a documented version for installation of {an_app.stem}, trying to get it from the app itself.")
81
- # tmp = Terminal().run(f"{an_app.stem} --version", shell="powershell").capture().op_if_successfull_or_default(strict_err=False, strict_returcode=False)
82
- # if tmp is not None: tmp = tmp.split("\n")[0]
83
- # print(f"➡️ Found version `{tmp}` for {an_app.stem}.")
84
- # app_versions.append(None)
85
- print(f"""
86
- {'=' * 150}
87
- 🔍 TOOL CHECK | Checking tools (#{len(apps_paths_tmp)}) collected from `{INSTALL_VERSION_ROOT}`
88
- {'=' * 150}
89
- """)
90
- apps_paths_raw.print()
91
- positive_pct: list[Optional[float]] = []
92
- scan_time: list[str] = []
93
- detailed_results: list[dict[str, Optional[pd.DataFrame]]] = []
94
-
95
- for idx, app in enumerate(apps_paths_raw):
96
- try: res = scan(path=app, pct=idx / len(apps_paths_raw) * 100)
97
- except ValueError as ve:
98
- print(f"❌ ERROR | {ve}")
99
- res = None
100
- if res is None:
101
- positive_pct.append(None)
102
- detailed_results.append({app.stem: None})
103
- else:
104
- ppct, df = res
105
- positive_pct.append(ppct)
106
- detailed_results.append({app.stem: df})
107
- scan_time.append(datetime.now().strftime("%Y-%m-%d %H:%M"))
108
-
109
- res_df = pd.DataFrame({"app_name": apps_paths_raw.apply(lambda x: x.stem).list,
110
- "version": app_versions,
111
- "positive_pct": positive_pct,
112
- "scan_time": scan_time,
113
- "app_path": apps_paths_raw.apply(lambda x: x.collapseuser(strict=False).as_posix()).list})
114
-
115
- app_url: list[Optional[str]] = []
116
- for idx, row in tqdm(res_df.iterrows(), total=res_df.shape[0]):
117
- apps_safe_url = upload(P(str(row["app_path"])).expanduser())
118
- app_url.append(apps_safe_url.as_posix() if type(apps_safe_url) is P else apps_safe_url)
119
- res_df["app_url"] = app_url
120
- res_df.to_csv(APP_SUMMARY_PATH.with_suffix(".csv").create(parents_only=True), index=False)
121
- APP_SUMMARY_PATH.with_suffix(".md").write_text(res_df.to_markdown())
122
- print(f"""
123
- {'=' * 150}
124
- 📊 SAFETY REPORT | Summary of app scanning results
125
- {'=' * 150}
126
- """)
127
- print(res_df)
128
-
129
-
130
- def upload(path: P):
131
- import call_function_with_timeout
132
- set_time_out = call_function_with_timeout.SetTimeout
133
- func_with_timeout = set_time_out(lambda: path.to_cloud(CLOUD, rel2home=True, share=True, os_specific=True), timeout=180)
134
- is_done, _is_timeout, _erro_message, results = func_with_timeout()
135
- if is_done: return results
136
- else: return None
137
-
138
-
139
- class PrecheckedCloudInstaller:
140
- def __init__(self):
141
- install_n_import("gdown")
142
- self.df = pd.read_csv(APP_SUMMARY_PATH)
143
-
144
- @staticmethod
145
- def download_google_links(url: str):
146
- # if "drive.google.com" in str(url): url = str(url).replace("open?", "uc?")
147
- # else: raise NotImplementedError("Only google drive is supported for now.")
148
- # return P(url).download(name=name)
149
- gdrive_id = P(url).parts[-1].split("id=")[1]
150
- gdown = install_n_import("gdown")
151
- result = P(gdown.download(id=gdrive_id)).absolute()
152
- return result
153
-
154
- @staticmethod
155
- def install_cli_apps(app_url: str):
156
- try:
157
- exe = PrecheckedCloudInstaller.download_google_links(app_url)
158
- except Exception as ex: # type: ignore
159
- print(f"❌ ERROR | Failed downloading {app_url}: {ex}")
160
- return None
161
- if platform.system().lower() == "linux":
162
- Terminal().run(f"chmod +x {exe}")
163
- Terminal().run(f"mv {exe} /usr/local/bin/")
164
- elif platform.system().lower() == "windows":
165
- exe.move(folder=P.home().joinpath("AppData/Local/Microsoft/WindowsApps"), overwrite=True)
166
- return True
167
-
168
- def download_safe_apps(self, name: str="AllEssentials"):
169
- # if platform.system().lower() == "windows":
170
- # from machineconfig.jobs.python.python_windows_installers_all import get_cli_py_installers
171
- # cli_installers = get_cli_py_installers()
172
- # elif platform.system().lower() == "linux":
173
- # from machineconfig.jobs.python.python_linux_installers_all import get_cli_py_installers
174
- # cli_installers = get_cli_py_installers()
175
- # else: raise NotImplementedError(f"Platform {platform.system().lower()} is not supported yet.")
176
-
177
- if name == "AllEssentials":
178
- print(f"""
179
- {'=' * 150}
180
- 📥 DOWNLOAD | Downloading {self.df.shape[0]} apps...
181
- {'=' * 150}
182
- """)
183
- print(self.df)
184
- _res = L(self.df.app_url).apply(PrecheckedCloudInstaller.install_cli_apps, jobs=20)
185
- else:
186
- app_url = self.df[self.df.app_name == name].iloc[0].app_url
187
- _res = PrecheckedCloudInstaller.install_cli_apps(app_url=app_url)
188
-
189
- # print("\n" * 3)
190
- # for item_flag, item_name in zip(res, self.df["app_name"]):
191
- # if item_flag: print(f"✅ {item_name} is installed. 😁")
192
- # else: print(f"❌ {item_name} failed to install for reasons explained in the log above, try manually.")
193
-
194
-
195
- if __name__ == '__main__':
196
- pass
21
+ # CLOUD: str = "gdw" # Read.ini(DEFAULTS_PATH)['general']['rclone_config_name']
22
+ # # my onedrive doesn't allow sharing.
23
+
24
+
25
+ # def scan(path: P, pct: float = 0.0):
26
+ # import vt # vt-py
27
+ # client = vt.Client(PathExtended.home().joinpath("dotfiles/creds/tokens/virustotal").read_text().split("\n")[0])
28
+ # console = Console()
29
+ # console.rule(f"Scanning {path}. {pct:.2f}% done")
30
+ # if path.is_dir():
31
+ # print(f"📁 Skipping {path} as it is a directory.")
32
+ # return None
33
+ # with open(str(path), "rb") as f:
34
+ # analysis = client.scan_file(f)
35
+ # repeat_counter: int = 0
36
+ # while True:
37
+ # with console.status(f"waiting for scan of {path} ... "):
38
+ # try:
39
+ # anal = client.get_object("/analyses/{}", analysis.id)
40
+ # if anal.status == "completed": break
41
+ # except Exception as ex: # type: ignore
42
+ # repeat_counter += 1
43
+ # if repeat_counter > 2:
44
+ # raise ValueError(f"❌ Error in scanning {path}") from ex
45
+ # print("⚠️ Error in scanning, trying again...")
46
+ # time.sleep(30)
47
+
48
+ # # Convert results to list of dictionaries
49
+ # results_data = list(anal.results.values())
50
+ # malicious = []
51
+ # for result_item in results_data:
52
+ # # Convert result item to dictionary if it has attributes
53
+ # if hasattr(result_item, '__dict__'):
54
+ # result_dict = result_item.__dict__
55
+ # else:
56
+ # # Assume it already has the necessary attributes
57
+ # result_dict = {
58
+ # 'result': getattr(result_item, 'result', None),
59
+ # 'category': getattr(result_item, 'category', 'unknown')
60
+ # }
61
+
62
+ # if result_dict.get('result') is None and result_dict.get('category') in ["undetected", "type-unsupported", "failure", "timeout", "confirmed-timeout"]:
63
+ # continue
64
+ # else:
65
+ # pprint(result_dict, f"🔍 Found Category {result_dict.get('category')}")
66
+ # malicious.append(result_item)
67
+
68
+ # positive_pct: float = round(number=len(malicious) / len(results_data) * 100, ndigits=1)
69
+ # print(f"""
70
+ # {'=' * 50}
71
+ # 🔬 SCAN RESULTS | Positive ratio: {positive_pct:.1f}%
72
+ # {'=' * 50}
73
+ # """)
74
+ # return positive_pct, results_data
75
+
76
+
77
+ # def main() -> None:
78
+ # # Convert potential custom List types to plain Python lists
79
+ # tmp_apps = get_installed_cli_apps()
80
+ # apps_paths_tmp: list[PathExtended]
81
+ # if hasattr(tmp_apps, "list"):
82
+ # apps_paths_tmp = list(tmp_apps.list)
83
+ # else:
84
+ # try:
85
+ # apps_paths_tmp = list(tmp_apps)
86
+ # except TypeError:
87
+ # apps_paths_tmp = [tmp_apps]
88
+
89
+ # tmp_versions = INSTALL_VERSION_ROOT.search()
90
+ # versions_files_paths: list[PathExtended]
91
+ # if hasattr(tmp_versions, "list"):
92
+ # versions_files_paths = list(tmp_versions.list)
93
+ # else:
94
+ # try:
95
+ # versions_files_paths = list(tmp_versions)
96
+ # except TypeError:
97
+ # versions_files_paths = [tmp_versions]
98
+
99
+ # app_versions: list[Optional[str]] = []
100
+ # apps_paths_raw: list[PathExtended] = []
101
+ # for an_app in apps_paths_tmp:
102
+ # version_path = [x for x in versions_files_paths if x.stem == an_app.stem]
103
+ # if len(version_path) == 1:
104
+ # app_versions.append(version_path[0].read_text())
105
+ # apps_paths_raw.append(an_app)
106
+ # # if an_app.stem in versions_files_paths.stem:
107
+ # # app_versions.append(versions_files_paths.filter(lambda x: x.stem == an_app.stem.replace(".exe", "")).list[0].read_text())
108
+ # # else:
109
+ # # print(f"🤔 Cloud not find a documented version for installation of {an_app.stem}, trying to get it from the app itself.")
110
+ # # tmp = Terminal().run(f"{an_app.stem} --version", shell="powershell").capture().op_if_successfull_or_default(strict_err=False, strict_returcode=False)
111
+ # # if tmp is not None: tmp = tmp.split("\n")[0]
112
+ # # print(f"➡️ Found version `{tmp}` for {an_app.stem}.")
113
+ # # app_versions.append(None)
114
+ # print(f"""
115
+ # {'=' * 150}
116
+ # 🔍 TOOL CHECK | Checking tools (#{len(apps_paths_tmp)}) collected from `{INSTALL_VERSION_ROOT}`
117
+ # {'=' * 150}
118
+ # """)
119
+ # for path_item in apps_paths_raw:
120
+ # print(path_item)
121
+ # positive_pct: list[Optional[float]] = []
122
+ # scan_time: list[str] = []
123
+ # detailed_results: list[dict[str, Optional[list[Any]]]] = []
124
+
125
+ # for idx, app in enumerate(apps_paths_raw):
126
+ # try: res = scan(path=app, pct=idx / len(apps_paths_raw) * 100)
127
+ # except ValueError as ve:
128
+ # print(f"❌ ERROR | {ve}")
129
+ # res = None
130
+ # if res is None:
131
+ # positive_pct.append(None)
132
+ # detailed_results.append({app.stem: None})
133
+ # else:
134
+ # ppct, results_data = res
135
+ # positive_pct.append(ppct)
136
+ # detailed_results.append({app.stem: results_data})
137
+ # scan_time.append(datetime.now().strftime("%Y-%m-%d %H:%M"))
138
+
139
+ # # Create list of dictionaries instead of DataFrame
140
+ # app_data = []
141
+ # for i, app_path in enumerate(apps_paths_raw):
142
+ # app_data.append({
143
+ # "app_name": app_path.stem,
144
+ # "version": app_versions[i],
145
+ # "positive_pct": positive_pct[i],
146
+ # "scan_time": scan_time[i],
147
+ # "app_path": app_path.collapseuser(strict=False).as_posix()
148
+ # })
149
+
150
+ # # Add app URLs
151
+ # for i, app_info in enumerate(tqdm(app_data, desc="Uploading apps")):
152
+ # apps_safe_url = upload(PathExtended(app_info["app_path"]).expanduser())
153
+ # app_info["app_url"] = apps_safe_url.as_posix() if (apps_safe_url is not None and type(apps_safe_url) is P) else str(apps_safe_url) if apps_safe_url is not None else ""
154
+
155
+ # # Write to CSV using standard library
156
+ # csv_path = APP_SUMMARY_PATH.with_suffix(".csv")
157
+ # csv_path.parent.mkdir(parents=True, exist_ok=True)
158
+ # with open(csv_path, 'w', newline='', encoding='utf-8') as csvfile:
159
+ # if app_data:
160
+ # fieldnames = app_data[0].keys()
161
+ # writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
162
+ # writer.writeheader()
163
+ # writer.writerows(app_data)
164
+
165
+ # # Create markdown table
166
+ # def format_app_table_markdown(data: list[dict[str, Any]]) -> str:
167
+ # if not data:
168
+ # return ""
169
+ # keys = list(data[0].keys())
170
+ # header = "|" + "|".join(f" {key} " for key in keys) + "|"
171
+ # separator = "|" + "|".join(" --- " for _ in keys) + "|"
172
+ # rows = []
173
+ # for row in data:
174
+ # row_values = [f" {str(row.get(key, ''))} " for key in keys]
175
+ # rows.append("|" + "|".join(row_values) + "|")
176
+ # return "\n".join([header, separator] + rows)
177
+
178
+ # markdown_content = format_app_table_markdown(app_data)
179
+ # APP_SUMMARY_PATH.with_suffix(".md").write_text(markdown_content)
180
+
181
+ # print(f"""
182
+ # {'=' * 150}
183
+ # 📊 SAFETY REPORT | Summary of app scanning results
184
+ # {'=' * 150}
185
+ # """)
186
+ # print(markdown_content)
187
+
188
+
189
+ # def upload(path: PathExtended):
190
+ # import call_function_with_timeout
191
+ # set_time_out = call_function_with_timeout.SetTimeout
192
+ # func_with_timeout = set_time_out(lambda: path.to_cloud(CLOUD, rel2home=True, share=True, os_specific=True), timeout=180)
193
+ # is_done, _is_timeout, _erro_message, results = func_with_timeout()
194
+ # if is_done: return results
195
+ # else: return None
196
+
197
+
198
+ # class PrecheckedCloudInstaller:
199
+ # def __init__(self):
200
+ # # Read CSV using standard library
201
+ # self.data = []
202
+ # if APP_SUMMARY_PATH.exists():
203
+ # with open(APP_SUMMARY_PATH, 'r', encoding='utf-8') as csvfile:
204
+ # reader = csv.DictReader(csvfile)
205
+ # self.data = list(reader)
206
+
207
+ # @staticmethod
208
+ # def download_google_links(url: str):
209
+ # # if "drive.google.com" in str(url): url = str(url).replace("open?", "uc?")
210
+ # # else: raise NotImplementedError("Only google drive is supported for now.")
211
+ # # return PathExtended(url).download(name=name)
212
+ # gdrive_id = PathExtended(url).parts[-1].split("id=")[1]
213
+ # result = PathExtended(gdown.download(id=gdrive_id)).absolute()
214
+ # return result
215
+
216
+ # @staticmethod
217
+ # def install_cli_apps(app_url: str):
218
+ # try:
219
+ # exe = PrecheckedCloudInstaller.download_google_links(app_url)
220
+ # except Exception as ex: # type: ignore
221
+ # print(f"❌ ERROR | Failed downloading {app_url}: {ex}")
222
+ # return None
223
+ # if platform.system().lower() in ["linux", "darwin"]:
224
+ # Terminal().run(f"chmod +x {exe}")
225
+ # Terminal().run(f"mv {exe} /usr/local/bin/")
226
+ # elif platform.system().lower() == "windows":
227
+ # exe.move(folder=PathExtended.home().joinpath("AppData/Local/Microsoft/WindowsApps"), overwrite=True)
228
+ # return True
229
+
230
+ # def download_safe_apps(self, name: str="AllEssentials"):
231
+ # # if platform.system().lower() == "windows":
232
+ # # from machineconfig.jobs.python.python_windows_installers_all import get_cli_py_installers
233
+ # # cli_installers = get_cli_py_installers()
234
+ # # elif platform.system().lower() == "linux":
235
+ # # from machineconfig.jobs.python.python_linux_installers_all import get_cli_py_installers
236
+ # # cli_installers = get_cli_py_installers()
237
+ # # else: raise NotImplementedError(f"Platform {platform.system().lower()} is not supported yet.")
238
+
239
+ # if name == "AllEssentials":
240
+ # print(f"""
241
+ # {'=' * 150}
242
+ # 📥 DOWNLOAD | Downloading {len(self.data)} apps...
243
+ # {'=' * 150}
244
+ # """)
245
+ # print(self.data)
246
+ # app_urls = [item['app_url'] for item in self.data]
247
+ # from concurrent.futures import ThreadPoolExecutor
248
+ # with ThreadPoolExecutor(max_workers=20) as executor:
249
+ # _res = list(executor.map(PrecheckedCloudInstaller.install_cli_apps, app_urls))
250
+ # else:
251
+ # app_items = [item for item in self.data if item['app_name'] == name]
252
+ # if not app_items:
253
+ # raise ValueError(f"App '{name}' not found in data")
254
+ # app_url = app_items[0]['app_url']
255
+ # _res = PrecheckedCloudInstaller.install_cli_apps(app_url=app_url)
256
+
257
+ # # print("\n" * 3)
258
+ # # for item_flag, item_name in zip(res, self.df["app_name"]):
259
+ # # if item_flag: print(f"✅ {item_name} is installed. 😁")
260
+ # # else: print(f"❌ {item_name} failed to install for reasons explained in the log above, try manually.")
261
+
262
+
263
+ # if __name__ == '__main__':
264
+ # pass
@@ -5,9 +5,13 @@
5
5
  # # one can either install rufus: https://rufus.ie/en/
6
6
  # # however, to create bootable media with multiple OSs to choose from:
7
7
 
8
- # P(r'https://github.com/ventoy/Ventoy/archive/refs/tags/v1.0.78.zip').download().unzip().search[0]()
9
- # P(r'https://mirrors.layeronline.com/linuxmint/stable/21/linuxmint-21-cinnamon-64bit.iso').download(folder=P.home().joinpath("Downloads/os").create())
10
- # P(r'https://download.manjaro.org/kde/21.3.7/manjaro-kde-21.3.7-minimal-220816-linux515.iso').download(folder=P.home().joinpath("Downloads/os").create())
8
+ # PathExtended(r'https://github.com/ventoy/Ventoy/archive/refs/tags/v1.0.78.zip').download().unzip().search[0]()
9
+ # download_folder = PathExtended.home().joinpath("Downloads/os")
10
+ # download_folder.mkdir(parents=True, exist_ok=True)
11
+ # PathExtended(r'https://mirrors.layeronline.com/linuxmint/stable/21/linuxmint-21-cinnamon-64bit.iso').download(folder=download_folder)
12
+ # download_folder2 = PathExtended.home().joinpath("Downloads/os")
13
+ # download_folder2.mkdir(parents=True, exist_ok=True)
14
+ # PathExtended(r'https://download.manjaro.org/kde/21.3.7/manjaro-kde-21.3.7-minimal-220816-linux515.iso').download(folder=download_folder2)
11
15
 
12
16
 
13
17
  # if __name__ == '__main__':