machineconfig 1.95__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 (499) 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/wifi_conn +24 -0
  91. machineconfig/scripts/python/__pycache__/__init__.cpython-311.pyc +0 -0
  92. machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
  93. machineconfig/scripts/python/__pycache__/cloud_copy.cpython-311.pyc +0 -0
  94. machineconfig/scripts/python/__pycache__/cloud_mount.cpython-311.pyc +0 -0
  95. machineconfig/scripts/python/__pycache__/cloud_sync.cpython-311.pyc +0 -0
  96. machineconfig/scripts/python/__pycache__/croshell.cpython-311.pyc +0 -0
  97. machineconfig/scripts/python/__pycache__/devops.cpython-311.pyc +0 -0
  98. machineconfig/scripts/python/__pycache__/devops_backup_retrieve.cpython-311.pyc +0 -0
  99. machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-311.pyc +0 -0
  100. machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-311.pyc +0 -0
  101. machineconfig/scripts/python/__pycache__/fire_agents.cpython-311.pyc +0 -0
  102. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-311.pyc +0 -0
  103. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-313.pyc +0 -0
  104. machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-311.pyc +0 -0
  105. machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
  106. machineconfig/scripts/python/archive/im2text.py +1 -3
  107. machineconfig/scripts/python/choose_wezterm_theme.py +3 -3
  108. machineconfig/scripts/python/cloud_copy.py +10 -10
  109. machineconfig/scripts/python/cloud_manager.py +77 -99
  110. machineconfig/scripts/python/cloud_mount.py +13 -12
  111. machineconfig/scripts/python/cloud_repo_sync.py +14 -11
  112. machineconfig/scripts/python/croshell.py +24 -21
  113. machineconfig/scripts/python/devops.py +12 -17
  114. machineconfig/scripts/python/devops_add_identity.py +32 -10
  115. machineconfig/scripts/python/devops_add_ssh_key.py +10 -10
  116. machineconfig/scripts/python/devops_backup_retrieve.py +9 -8
  117. machineconfig/scripts/python/devops_devapps_install.py +6 -6
  118. machineconfig/scripts/python/devops_update_repos.py +4 -3
  119. machineconfig/scripts/python/dotfile.py +10 -7
  120. machineconfig/scripts/python/fire_agents.py +69 -0
  121. machineconfig/scripts/python/fire_jobs.py +56 -65
  122. machineconfig/scripts/python/ftpx.py +8 -8
  123. machineconfig/scripts/python/get_zellij_cmd.py +3 -3
  124. machineconfig/scripts/python/gh_models.py +6 -4
  125. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.pyc +0 -0
  126. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
  127. machineconfig/scripts/python/helpers/__pycache__/cloud_helpers.cpython-311.pyc +0 -0
  128. machineconfig/scripts/python/helpers/__pycache__/helpers2.cpython-311.pyc +0 -0
  129. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-311.pyc +0 -0
  130. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-313.pyc +0 -0
  131. machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-311.pyc +0 -0
  132. machineconfig/scripts/python/helpers/cloud_helpers.py +12 -12
  133. machineconfig/scripts/python/helpers/helpers2.py +9 -8
  134. machineconfig/scripts/python/helpers/helpers4.py +23 -35
  135. machineconfig/scripts/python/helpers/repo_sync_helpers.py +17 -16
  136. machineconfig/scripts/python/mount_nfs.py +8 -11
  137. machineconfig/scripts/python/mount_nw_drive.py +4 -4
  138. machineconfig/scripts/python/mount_ssh.py +2 -2
  139. machineconfig/scripts/python/onetimeshare.py +56 -57
  140. machineconfig/scripts/python/pomodoro.py +55 -55
  141. machineconfig/scripts/python/repos.py +26 -18
  142. machineconfig/scripts/python/scheduler.py +70 -53
  143. machineconfig/scripts/python/snapshot.py +21 -24
  144. machineconfig/scripts/python/start_slidev.py +6 -5
  145. machineconfig/scripts/python/start_terminals.py +3 -1
  146. machineconfig/scripts/python/viewer.py +5 -4
  147. machineconfig/scripts/python/viewer_template.py +138 -140
  148. machineconfig/scripts/python/wifi_conn.py +412 -60
  149. machineconfig/scripts/python/wsl_windows_transfer.py +18 -3
  150. machineconfig/settings/linters/.pylintrc +6 -7
  151. machineconfig/settings/lvim/windows/config.lua +0 -0
  152. machineconfig/settings/shells/bash/init.sh +6 -0
  153. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +7 -6
  154. machineconfig/settings/shells/pwsh/init.ps1 +6 -6
  155. machineconfig/settings/shells/wt/settings.json +51 -266
  156. machineconfig/setup_linux/web_shortcuts/interactive.sh +5 -2
  157. machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +3 -6
  158. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +11 -9
  159. machineconfig/utils/ai/url2md.py +2 -2
  160. machineconfig/utils/cloud/onedrive/setup_oauth.py +59 -0
  161. machineconfig/utils/cloud/onedrive/transaction.py +796 -0
  162. machineconfig/utils/code.py +22 -13
  163. machineconfig/utils/installer.py +78 -35
  164. machineconfig/utils/installer_utils/installer_abc.py +7 -6
  165. machineconfig/utils/installer_utils/installer_class.py +44 -25
  166. machineconfig/utils/io_save.py +107 -0
  167. machineconfig/utils/links.py +19 -15
  168. machineconfig/utils/options.py +4 -8
  169. machineconfig/utils/path.py +91 -78
  170. machineconfig/utils/path_reduced.py +608 -0
  171. machineconfig/utils/procs.py +110 -45
  172. machineconfig/utils/scheduling.py +312 -222
  173. machineconfig/utils/utils.py +7 -7
  174. machineconfig/utils/utils2.py +42 -0
  175. machineconfig/utils/utils5.py +84 -0
  176. machineconfig/utils/ve.py +49 -87
  177. {machineconfig-1.95.dist-info → machineconfig-1.96.dist-info}/METADATA +2 -2
  178. machineconfig-1.96.dist-info/RECORD +437 -0
  179. machineconfig/cluster/session_managers.py +0 -183
  180. machineconfig/cluster/templates/f.py +0 -4
  181. machineconfig/jobs/python/__pycache__/check_installations.cpython-311.pyc +0 -0
  182. machineconfig/jobs/python/__pycache__/checkout_version.cpython-311.pyc +0 -0
  183. machineconfig/jobs/python/__pycache__/python_ve_symlink.cpython-311.pyc +0 -0
  184. machineconfig/jobs/python/checkout_version.py +0 -123
  185. machineconfig/jobs/python/vscode/__pycache__/api.cpython-311.pyc +0 -0
  186. machineconfig/jobs/python/vscode/__pycache__/link_ve.cpython-311.pyc +0 -0
  187. machineconfig/jobs/python_custom_installers/__pycache__/hx.cpython-311.pyc +0 -0
  188. machineconfig/jobs/python_windows_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  189. machineconfig/scripts/python/.mypy_cache/.gitignore +0 -2
  190. machineconfig/scripts/python/.mypy_cache/3.11/@plugins_snapshot.json +0 -1
  191. machineconfig/scripts/python/.mypy_cache/3.11/__future__.data.json +0 -1
  192. machineconfig/scripts/python/.mypy_cache/3.11/__future__.meta.json +0 -1
  193. machineconfig/scripts/python/.mypy_cache/3.11/_ast.data.json +0 -1
  194. machineconfig/scripts/python/.mypy_cache/3.11/_ast.meta.json +0 -1
  195. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.data.json +0 -1
  196. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.meta.json +0 -1
  197. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.data.json +0 -1
  198. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.meta.json +0 -1
  199. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.data.json +0 -1
  200. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.meta.json +0 -1
  201. machineconfig/scripts/python/.mypy_cache/3.11/_compression.data.json +0 -1
  202. machineconfig/scripts/python/.mypy_cache/3.11/_compression.meta.json +0 -1
  203. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.data.json +0 -1
  204. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.meta.json +0 -1
  205. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.data.json +0 -1
  206. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.meta.json +0 -1
  207. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.data.json +0 -1
  208. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.meta.json +0 -1
  209. machineconfig/scripts/python/.mypy_cache/3.11/_io.data.json +0 -1
  210. machineconfig/scripts/python/.mypy_cache/3.11/_io.meta.json +0 -1
  211. machineconfig/scripts/python/.mypy_cache/3.11/_locale.data.json +0 -1
  212. machineconfig/scripts/python/.mypy_cache/3.11/_locale.meta.json +0 -1
  213. machineconfig/scripts/python/.mypy_cache/3.11/_stat.data.json +0 -1
  214. machineconfig/scripts/python/.mypy_cache/3.11/_stat.meta.json +0 -1
  215. machineconfig/scripts/python/.mypy_cache/3.11/_struct.data.json +0 -1
  216. machineconfig/scripts/python/.mypy_cache/3.11/_struct.meta.json +0 -1
  217. machineconfig/scripts/python/.mypy_cache/3.11/_thread.data.json +0 -1
  218. machineconfig/scripts/python/.mypy_cache/3.11/_thread.meta.json +0 -1
  219. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.data.json +0 -1
  220. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.meta.json +0 -1
  221. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.data.json +0 -1
  222. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.meta.json +0 -1
  223. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.data.json +0 -1
  224. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.meta.json +0 -1
  225. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.data.json +0 -1
  226. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.meta.json +0 -1
  227. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.data.json +0 -1
  228. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.meta.json +0 -1
  229. machineconfig/scripts/python/.mypy_cache/3.11/abc.data.json +0 -1
  230. machineconfig/scripts/python/.mypy_cache/3.11/abc.meta.json +0 -1
  231. machineconfig/scripts/python/.mypy_cache/3.11/argparse.data.json +0 -1
  232. machineconfig/scripts/python/.mypy_cache/3.11/argparse.meta.json +0 -1
  233. machineconfig/scripts/python/.mypy_cache/3.11/ast.data.json +0 -1
  234. machineconfig/scripts/python/.mypy_cache/3.11/ast.meta.json +0 -1
  235. machineconfig/scripts/python/.mypy_cache/3.11/binascii.data.json +0 -1
  236. machineconfig/scripts/python/.mypy_cache/3.11/binascii.meta.json +0 -1
  237. machineconfig/scripts/python/.mypy_cache/3.11/builtins.data.json +0 -1
  238. machineconfig/scripts/python/.mypy_cache/3.11/builtins.meta.json +0 -1
  239. machineconfig/scripts/python/.mypy_cache/3.11/bz2.data.json +0 -1
  240. machineconfig/scripts/python/.mypy_cache/3.11/bz2.meta.json +0 -1
  241. machineconfig/scripts/python/.mypy_cache/3.11/calendar.data.json +0 -1
  242. machineconfig/scripts/python/.mypy_cache/3.11/calendar.meta.json +0 -1
  243. machineconfig/scripts/python/.mypy_cache/3.11/codecs.data.json +0 -1
  244. machineconfig/scripts/python/.mypy_cache/3.11/codecs.meta.json +0 -1
  245. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.data.json +0 -1
  246. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.meta.json +0 -1
  247. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.data.json +0 -1
  248. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.meta.json +0 -1
  249. machineconfig/scripts/python/.mypy_cache/3.11/configparser.data.json +0 -1
  250. machineconfig/scripts/python/.mypy_cache/3.11/configparser.meta.json +0 -1
  251. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.data.json +0 -1
  252. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.meta.json +0 -1
  253. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.data.json +0 -1
  254. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.meta.json +0 -1
  255. machineconfig/scripts/python/.mypy_cache/3.11/datetime.data.json +0 -1
  256. machineconfig/scripts/python/.mypy_cache/3.11/datetime.meta.json +0 -1
  257. machineconfig/scripts/python/.mypy_cache/3.11/decimal.data.json +0 -1
  258. machineconfig/scripts/python/.mypy_cache/3.11/decimal.meta.json +0 -1
  259. machineconfig/scripts/python/.mypy_cache/3.11/dis.data.json +0 -1
  260. machineconfig/scripts/python/.mypy_cache/3.11/dis.meta.json +0 -1
  261. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.data.json +0 -1
  262. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.meta.json +0 -1
  263. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.data.json +0 -1
  264. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.meta.json +0 -1
  265. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.data.json +0 -1
  266. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.meta.json +0 -1
  267. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.data.json +0 -1
  268. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.meta.json +0 -1
  269. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.data.json +0 -1
  270. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.meta.json +0 -1
  271. machineconfig/scripts/python/.mypy_cache/3.11/email/header.data.json +0 -1
  272. machineconfig/scripts/python/.mypy_cache/3.11/email/header.meta.json +0 -1
  273. machineconfig/scripts/python/.mypy_cache/3.11/email/message.data.json +0 -1
  274. machineconfig/scripts/python/.mypy_cache/3.11/email/message.meta.json +0 -1
  275. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.data.json +0 -1
  276. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.meta.json +0 -1
  277. machineconfig/scripts/python/.mypy_cache/3.11/enum.data.json +0 -1
  278. machineconfig/scripts/python/.mypy_cache/3.11/enum.meta.json +0 -1
  279. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.data.json +0 -1
  280. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.meta.json +0 -1
  281. machineconfig/scripts/python/.mypy_cache/3.11/functools.data.json +0 -1
  282. machineconfig/scripts/python/.mypy_cache/3.11/functools.meta.json +0 -1
  283. machineconfig/scripts/python/.mypy_cache/3.11/gc.data.json +0 -1
  284. machineconfig/scripts/python/.mypy_cache/3.11/gc.meta.json +0 -1
  285. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.data.json +0 -1
  286. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.meta.json +0 -1
  287. machineconfig/scripts/python/.mypy_cache/3.11/getpass.data.json +0 -1
  288. machineconfig/scripts/python/.mypy_cache/3.11/getpass.meta.json +0 -1
  289. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.data.json +0 -1
  290. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.meta.json +0 -1
  291. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.data.json +0 -1
  292. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.meta.json +0 -1
  293. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.data.json +0 -1
  294. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.meta.json +0 -1
  295. machineconfig/scripts/python/.mypy_cache/3.11/git/config.data.json +0 -1
  296. machineconfig/scripts/python/.mypy_cache/3.11/git/config.meta.json +0 -1
  297. machineconfig/scripts/python/.mypy_cache/3.11/git/db.data.json +0 -1
  298. machineconfig/scripts/python/.mypy_cache/3.11/git/db.meta.json +0 -1
  299. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.data.json +0 -1
  300. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.meta.json +0 -1
  301. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.data.json +0 -1
  302. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.meta.json +0 -1
  303. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.data.json +0 -1
  304. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.meta.json +0 -1
  305. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.data.json +0 -1
  306. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.meta.json +0 -1
  307. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.data.json +0 -1
  308. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.meta.json +0 -1
  309. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.data.json +0 -1
  310. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.meta.json +0 -1
  311. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.data.json +0 -1
  312. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.meta.json +0 -1
  313. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.data.json +0 -1
  314. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.meta.json +0 -1
  315. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.data.json +0 -1
  316. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.meta.json +0 -1
  317. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.data.json +0 -1
  318. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.meta.json +0 -1
  319. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.data.json +0 -1
  320. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.meta.json +0 -1
  321. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.data.json +0 -1
  322. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.meta.json +0 -1
  323. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.data.json +0 -1
  324. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.meta.json +0 -1
  325. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.data.json +0 -1
  326. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.meta.json +0 -1
  327. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.data.json +0 -1
  328. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.meta.json +0 -1
  329. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.data.json +0 -1
  330. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.meta.json +0 -1
  331. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.data.json +0 -1
  332. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.meta.json +0 -1
  333. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.data.json +0 -1
  334. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.meta.json +0 -1
  335. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.data.json +0 -1
  336. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.meta.json +0 -1
  337. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.data.json +0 -1
  338. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.meta.json +0 -1
  339. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.data.json +0 -1
  340. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.meta.json +0 -1
  341. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.data.json +0 -1
  342. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.meta.json +0 -1
  343. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.data.json +0 -1
  344. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.meta.json +0 -1
  345. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.data.json +0 -1
  346. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.meta.json +0 -1
  347. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.data.json +0 -1
  348. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.meta.json +0 -1
  349. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.data.json +0 -1
  350. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.meta.json +0 -1
  351. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.data.json +0 -1
  352. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.meta.json +0 -1
  353. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.data.json +0 -1
  354. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.meta.json +0 -1
  355. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.data.json +0 -1
  356. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.meta.json +0 -1
  357. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.data.json +0 -1
  358. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.meta.json +0 -1
  359. machineconfig/scripts/python/.mypy_cache/3.11/git/types.data.json +0 -1
  360. machineconfig/scripts/python/.mypy_cache/3.11/git/types.meta.json +0 -1
  361. machineconfig/scripts/python/.mypy_cache/3.11/git/util.data.json +0 -1
  362. machineconfig/scripts/python/.mypy_cache/3.11/git/util.meta.json +0 -1
  363. machineconfig/scripts/python/.mypy_cache/3.11/glob.data.json +0 -1
  364. machineconfig/scripts/python/.mypy_cache/3.11/glob.meta.json +0 -1
  365. machineconfig/scripts/python/.mypy_cache/3.11/gzip.data.json +0 -1
  366. machineconfig/scripts/python/.mypy_cache/3.11/gzip.meta.json +0 -1
  367. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.data.json +0 -1
  368. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.meta.json +0 -1
  369. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.data.json +0 -1
  370. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.meta.json +0 -1
  371. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.data.json +0 -1
  372. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.meta.json +0 -1
  373. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.data.json +0 -1
  374. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.meta.json +0 -1
  375. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.data.json +0 -1
  376. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.meta.json +0 -1
  377. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.data.json +0 -1
  378. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.meta.json +0 -1
  379. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.data.json +0 -1
  380. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.meta.json +0 -1
  381. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.data.json +0 -1
  382. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.meta.json +0 -1
  383. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.data.json +0 -1
  384. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.meta.json +0 -1
  385. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.data.json +0 -1
  386. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.meta.json +0 -1
  387. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.data.json +0 -1
  388. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.meta.json +0 -1
  389. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.data.json +0 -1
  390. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.meta.json +0 -1
  391. machineconfig/scripts/python/.mypy_cache/3.11/inspect.data.json +0 -1
  392. machineconfig/scripts/python/.mypy_cache/3.11/inspect.meta.json +0 -1
  393. machineconfig/scripts/python/.mypy_cache/3.11/io.data.json +0 -1
  394. machineconfig/scripts/python/.mypy_cache/3.11/io.meta.json +0 -1
  395. machineconfig/scripts/python/.mypy_cache/3.11/itertools.data.json +0 -1
  396. machineconfig/scripts/python/.mypy_cache/3.11/itertools.meta.json +0 -1
  397. machineconfig/scripts/python/.mypy_cache/3.11/locale.data.json +0 -1
  398. machineconfig/scripts/python/.mypy_cache/3.11/locale.meta.json +0 -1
  399. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.data.json +0 -1
  400. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.meta.json +0 -1
  401. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.data.json +0 -1
  402. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.meta.json +0 -1
  403. machineconfig/scripts/python/.mypy_cache/3.11/mmap.data.json +0 -1
  404. machineconfig/scripts/python/.mypy_cache/3.11/mmap.meta.json +0 -1
  405. machineconfig/scripts/python/.mypy_cache/3.11/numbers.data.json +0 -1
  406. machineconfig/scripts/python/.mypy_cache/3.11/numbers.meta.json +0 -1
  407. machineconfig/scripts/python/.mypy_cache/3.11/opcode.data.json +0 -1
  408. machineconfig/scripts/python/.mypy_cache/3.11/opcode.meta.json +0 -1
  409. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.data.json +0 -1
  410. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.meta.json +0 -1
  411. machineconfig/scripts/python/.mypy_cache/3.11/os/path.data.json +0 -1
  412. machineconfig/scripts/python/.mypy_cache/3.11/os/path.meta.json +0 -1
  413. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.data.json +0 -1
  414. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.meta.json +0 -1
  415. machineconfig/scripts/python/.mypy_cache/3.11/platform.data.json +0 -1
  416. machineconfig/scripts/python/.mypy_cache/3.11/platform.meta.json +0 -1
  417. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.data.json +0 -1
  418. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.meta.json +0 -1
  419. machineconfig/scripts/python/.mypy_cache/3.11/re.data.json +0 -1
  420. machineconfig/scripts/python/.mypy_cache/3.11/re.meta.json +0 -1
  421. machineconfig/scripts/python/.mypy_cache/3.11/resource.data.json +0 -1
  422. machineconfig/scripts/python/.mypy_cache/3.11/resource.meta.json +0 -1
  423. machineconfig/scripts/python/.mypy_cache/3.11/shlex.data.json +0 -1
  424. machineconfig/scripts/python/.mypy_cache/3.11/shlex.meta.json +0 -1
  425. machineconfig/scripts/python/.mypy_cache/3.11/shutil.data.json +0 -1
  426. machineconfig/scripts/python/.mypy_cache/3.11/shutil.meta.json +0 -1
  427. machineconfig/scripts/python/.mypy_cache/3.11/signal.data.json +0 -1
  428. machineconfig/scripts/python/.mypy_cache/3.11/signal.meta.json +0 -1
  429. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.data.json +0 -1
  430. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.meta.json +0 -1
  431. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.data.json +0 -1
  432. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.meta.json +0 -1
  433. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.data.json +0 -1
  434. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.meta.json +0 -1
  435. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.data.json +0 -1
  436. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.meta.json +0 -1
  437. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.data.json +0 -1
  438. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.meta.json +0 -1
  439. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.data.json +0 -1
  440. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.meta.json +0 -1
  441. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.data.json +0 -1
  442. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.meta.json +0 -1
  443. machineconfig/scripts/python/.mypy_cache/3.11/stat.data.json +0 -1
  444. machineconfig/scripts/python/.mypy_cache/3.11/stat.meta.json +0 -1
  445. machineconfig/scripts/python/.mypy_cache/3.11/string.data.json +0 -1
  446. machineconfig/scripts/python/.mypy_cache/3.11/string.meta.json +0 -1
  447. machineconfig/scripts/python/.mypy_cache/3.11/struct.data.json +0 -1
  448. machineconfig/scripts/python/.mypy_cache/3.11/struct.meta.json +0 -1
  449. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.data.json +0 -1
  450. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.meta.json +0 -1
  451. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.data.json +0 -1
  452. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.meta.json +0 -1
  453. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.data.json +0 -1
  454. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.meta.json +0 -1
  455. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.data.json +0 -1
  456. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.meta.json +0 -1
  457. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.data.json +0 -1
  458. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.meta.json +0 -1
  459. machineconfig/scripts/python/.mypy_cache/3.11/threading.data.json +0 -1
  460. machineconfig/scripts/python/.mypy_cache/3.11/threading.meta.json +0 -1
  461. machineconfig/scripts/python/.mypy_cache/3.11/time.data.json +0 -1
  462. machineconfig/scripts/python/.mypy_cache/3.11/time.meta.json +0 -1
  463. machineconfig/scripts/python/.mypy_cache/3.11/types.data.json +0 -1
  464. machineconfig/scripts/python/.mypy_cache/3.11/types.meta.json +0 -1
  465. machineconfig/scripts/python/.mypy_cache/3.11/typing.data.json +0 -1
  466. machineconfig/scripts/python/.mypy_cache/3.11/typing.meta.json +0 -1
  467. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.data.json +0 -1
  468. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.meta.json +0 -1
  469. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.data.json +0 -1
  470. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.meta.json +0 -1
  471. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.data.json +0 -1
  472. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.meta.json +0 -1
  473. machineconfig/scripts/python/.mypy_cache/3.11/uuid.data.json +0 -1
  474. machineconfig/scripts/python/.mypy_cache/3.11/uuid.meta.json +0 -1
  475. machineconfig/scripts/python/.mypy_cache/3.11/warnings.data.json +0 -1
  476. machineconfig/scripts/python/.mypy_cache/3.11/warnings.meta.json +0 -1
  477. machineconfig/scripts/python/.mypy_cache/3.11/weakref.data.json +0 -1
  478. machineconfig/scripts/python/.mypy_cache/3.11/weakref.meta.json +0 -1
  479. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.data.json +0 -1
  480. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.meta.json +0 -1
  481. machineconfig/scripts/python/.mypy_cache/3.11/zlib.data.json +0 -1
  482. machineconfig/scripts/python/.mypy_cache/3.11/zlib.meta.json +0 -1
  483. machineconfig/scripts/python/.mypy_cache/CACHEDIR.TAG +0 -3
  484. machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-311.pyc +0 -0
  485. machineconfig/scripts/python/__pycache__/gh_models.cpython-311.pyc +0 -0
  486. machineconfig/scripts/python/__pycache__/url2md.cpython-311.pyc +0 -0
  487. machineconfig/scripts/python/__pycache__/viewer.cpython-311.pyc +0 -0
  488. machineconfig/scripts/python/__pycache__/vscode_api.cpython-311.pyc +0 -0
  489. machineconfig/settings/__pycache__/__init__.cpython-311.pyc +0 -0
  490. machineconfig/settings/linters/.ruff_cache/.gitignore +0 -2
  491. machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +0 -1
  492. machineconfig/settings/shells/ipy/profiles/default/__pycache__/__init__.cpython-311.pyc +0 -0
  493. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/__init__.cpython-311.pyc +0 -0
  494. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/playext.cpython-311.pyc +0 -0
  495. machineconfig/utils/ve_utils/ve1.py +0 -111
  496. machineconfig/utils/ve_utils/ve2.py +0 -155
  497. machineconfig-1.95.dist-info/RECORD +0 -712
  498. {machineconfig-1.95.dist-info → machineconfig-1.96.dist-info}/WHEEL +0 -0
  499. {machineconfig-1.95.dist-info → machineconfig-1.96.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,5 @@
1
- from crocodile.file_management import P, PLike
2
- from crocodile.core_modules.core_1 import randstr
1
+ from machineconfig.utils.path_reduced import P as PathExtended, PLike
2
+ from machineconfig.utils.utils2 import randstr
3
3
  from rich.console import Console
4
4
  from rich.panel import Panel
5
5
 
@@ -11,9 +11,9 @@ def build_links(target_paths: list[tuple[PLike, str]], repo_root: PLike):
11
11
  """Build symboic links from various relevant paths (e.g. data) to `repo_root/links/<name>` to facilitate easy access from
12
12
  tree explorer of the IDE.
13
13
  """
14
- target_dirs_filtered: list[tuple[P, str]] = []
14
+ target_dirs_filtered: list[tuple[PathExtended, str]] = []
15
15
  for a_dir, a_name in target_paths:
16
- a_dir_obj = P(a_dir).resolve()
16
+ a_dir_obj = PathExtended(a_dir).resolve()
17
17
  if not a_dir_obj.exists():
18
18
  a_dir_obj.mkdir(parents=True, exist_ok=True)
19
19
  target_dirs_filtered.append((a_dir_obj, a_name))
@@ -22,8 +22,8 @@ def build_links(target_paths: list[tuple[PLike, str]], repo_root: PLike):
22
22
  repo = git.Repo(repo_root, search_parent_directories=True)
23
23
  root_maybe = repo.working_tree_dir
24
24
  assert root_maybe is not None
25
- repo_root_obj = P(root_maybe)
26
- tmp_results_root = P.home().joinpath("tmp_results", "tmp_data", repo_root_obj.name)
25
+ repo_root_obj = PathExtended(root_maybe)
26
+ tmp_results_root = PathExtended.home().joinpath("tmp_results", "tmp_data", repo_root_obj.name)
27
27
  tmp_results_root.mkdir(parents=True, exist_ok=True)
28
28
  target_dirs_filtered.append((tmp_results_root, "tmp_results"))
29
29
 
@@ -31,14 +31,14 @@ def build_links(target_paths: list[tuple[PLike, str]], repo_root: PLike):
31
31
  links_path = repo_root_obj.joinpath("links", a_name)
32
32
  links_path.symlink_to(target=a_target_path)
33
33
 
34
- def symlink_func(this: P, to_this: P, prioritize_to_this: bool=True):
34
+ def symlink_func(this: PathExtended, to_this: PathExtended, prioritize_to_this: bool=True):
35
35
  """helper function. creates a symlink from `this` to `to_this`.
36
36
  What can go wrong?
37
37
  depending on this and to_this existence, one will be prioretized depending on overwrite value.
38
38
  True means this will potentially be overwritten (depending on whether to_this exists or not)
39
39
  False means to_this will potentially be overwittten."""
40
- this = P(this).expanduser().absolute()
41
- to_this = P(to_this).expanduser().absolute()
40
+ this = PathExtended(this).expanduser().absolute()
41
+ to_this = PathExtended(to_this).expanduser().absolute()
42
42
  if this.is_symlink(): this.delete(sure=True) # delete if it exists as symblic link, not a concrete path.
43
43
  if this.exists(): # this is a problem. It will be resolved via `overwrite`
44
44
  if prioritize_to_this is True: # it *can* be deleted, but let's look at target first.
@@ -49,16 +49,18 @@ def symlink_func(this: P, to_this: P, prioritize_to_this: bool=True):
49
49
  if to_this.exists(): this.move(path=to_this, overwrite=True) # this exists, to_this as well, this is prioritized. # now we are readly to make the link
50
50
  else: this.move(path=to_this) # this exists, to_this doesn't, this is prioritized.
51
51
  else: # this doesn't exist.
52
- if not to_this.exists(): to_this.touch() # we have to touch it (file) or create it (folder)
52
+ if not to_this.exists():
53
+ to_this.parent.mkdir(parents=True, exist_ok=True)
54
+ to_this.touch() # we have to touch it (file) or create it (folder)
53
55
  try:
54
56
  console.print(Panel(f"🔗 LINKING | Creating symlink from {this} ➡️ {to_this}", title="Linking", expand=False))
55
- P(this).symlink_to(target=to_this, verbose=True, overwrite=True)
57
+ PathExtended(this).symlink_to(target=to_this, verbose=True, overwrite=True)
56
58
  except Exception as ex:
57
59
  console.print(Panel(f"❌ ERROR | Failed at linking {this} ➡️ {to_this}. Reason: {ex}", title="Error", expand=False))
58
60
 
59
- def symlink_copy(this: P, to_this: P, prioritize_to_this: bool=True):
60
- this = P(this).expanduser().absolute()
61
- to_this = P(to_this).expanduser().absolute()
61
+ def symlink_copy(this: PathExtended, to_this: PathExtended, prioritize_to_this: bool=True):
62
+ this = PathExtended(this).expanduser().absolute()
63
+ to_this = PathExtended(to_this).expanduser().absolute()
62
64
  if this.is_symlink(): this.delete(sure=True) # delete if it exists as symblic link, not a concrete path.
63
65
  if this.exists(): # this is a problem. It will be resolved via `overwrite`
64
66
  if prioritize_to_this is True: # it *can* be deleted, but let's look at target first.
@@ -69,7 +71,9 @@ def symlink_copy(this: P, to_this: P, prioritize_to_this: bool=True):
69
71
  if to_this.exists(): this.move(path=to_this, overwrite=True) # this exists, to_this as well, this is prioritized. # now we are readly to make the link
70
72
  else: this.move(path=to_this) # this exists, to_this doesn't, this is prioritized.
71
73
  else: # this doesn't exist.
72
- if not to_this.exists(): to_this.touch() # we have to touch it (file) or create it (folder)
74
+ if not to_this.exists():
75
+ to_this.parent.mkdir(parents=True, exist_ok=True)
76
+ to_this.touch() # we have to touch it (file) or create it (folder)
73
77
  try:
74
78
  console.print(Panel(f"📋 COPYING | Copying {to_this} to {this}", title="Copying", expand=False))
75
79
  to_this.copy(path=this, overwrite=True, verbose=True)
@@ -1,8 +1,5 @@
1
- from crocodile.core import List as L
2
1
  from crocodile.meta import Terminal
3
- from crocodile.file_management import P
4
-
5
- # import crocodile.environment as env
2
+ from pathlib import Path
6
3
  from rich.text import Text
7
4
  from rich.panel import Panel
8
5
  from rich.console import Console
@@ -19,7 +16,7 @@ def check_tool_exists(tool_name: str, install_script: Optional[str] = None) -> b
19
16
  tool_name = tool_name.replace(".exe", "") + ".exe"
20
17
 
21
18
  if platform.system() == "Windows": cmd = "where.exe"
22
- elif platform.system() == "Linux": cmd = "which"
19
+ elif platform.system() in ["Linux", "Darwin"]: cmd = "which"
23
20
  else: raise NotImplementedError(f"platform {platform.system()} not implemented")
24
21
 
25
22
  try:
@@ -134,9 +131,8 @@ def choose_cloud_interactively() -> str:
134
131
  console = Console()
135
132
  console.print(Panel("🔍 LISTING CLOUD REMOTES | Fetching available cloud remotes...", border_style="bold blue", expand=False))
136
133
  tmp = Terminal().run("rclone listremotes").op_if_successfull_or_default(strict_returcode=False)
137
- # consider this: remotes = Read.ini(P.home().joinpath(".config/rclone/rclone.conf")).sections()
138
134
  if isinstance(tmp, str):
139
- remotes: list[str] = L(tmp.splitlines()).apply(lambda x: x.replace(":", "")).list
135
+ remotes: list[str] = [x.replace(":", "") for x in tmp.splitlines()]
140
136
 
141
137
  else: raise ValueError(f"Got {tmp} from rclone listremotes")
142
138
  if len(remotes) == 0:
@@ -148,6 +144,6 @@ def choose_cloud_interactively() -> str:
148
144
  def get_ssh_hosts() -> list[str]:
149
145
  from paramiko import SSHConfig
150
146
  c = SSHConfig()
151
- c.parse(open(P.home().joinpath(".ssh/config").to_str(), encoding="utf-8"))
147
+ c.parse(open(Path.home().joinpath(".ssh/config"), encoding="utf-8"))
152
148
  return list(c.get_hostnames())
153
149
  def choose_ssh_host(multi: bool=True): return display_options(msg="", options=get_ssh_hosts(), multi=multi, fzf=True)
@@ -1,99 +1,112 @@
1
- from crocodile.core import List as L
2
- from crocodile.file_management import P
3
- from machineconfig.utils.options import check_tool_exists, choose_one_option
1
+ from machineconfig.utils.path_reduced import P as PathExtended
2
+ from machineconfig.utils.options import choose_one_option
4
3
  from rich.console import Console
5
4
  from rich.panel import Panel
6
5
  import platform
7
6
  import subprocess
8
- from typing import Optional, TypeVar
7
+ from typing import TypeVar
8
+ from pathlib import Path
9
+
9
10
 
10
11
  T = TypeVar("T")
11
12
  console = Console()
12
13
 
13
- def sanitize_path(a_path: P) -> P:
14
- path = P(a_path)
15
- if path.as_posix().startswith("/home"):
16
- if platform.system() == "Windows": # path copied from Linux to Windows
17
- path = P.home().joinpath(*path.parts[3:]) # exclude /home/username
14
+ def sanitize_path(a_path: PathExtended) -> PathExtended:
15
+ path = PathExtended(a_path)
16
+ if path.as_posix().startswith("/home") or path.as_posix().startswith("/Users"):
17
+ if platform.system() == "Windows": # path copied from Linux/Mac to Windows
18
+ # For Linux: /home/username, for Mac: /Users/username
19
+ skip_parts = 3 if path.as_posix().startswith("/home") else 3 # Both have 3 parts to skip
20
+ path = PathExtended.home().joinpath(*path.parts[skip_parts:])
18
21
  assert path.exists(), f"File not found: {path}"
19
- console.print(Panel(f"🔗 PATH MAPPING | Linux Windows: `{a_path}` ➡️ `{path}`", title="Path Mapping", expand=False))
20
- elif platform.system() == "Linux" and P.home().as_posix() not in path.as_posix(): # copied from Linux to Linux with different username
21
- path = P.home().joinpath(*path.parts[3:]) # exclude /home/username (three parts: /, home, username)
22
+ source_os = "Linux" if a_path.as_posix().startswith("/home") else "macOS"
23
+ console.print(Panel(f"🔗 PATH MAPPING | {source_os} Windows: `{a_path}` ➡️ `{path}`", title="Path Mapping", expand=False))
24
+ elif platform.system() in ["Linux", "Darwin"] and PathExtended.home().as_posix() not in path.as_posix(): # copied between Unix-like systems with different username
25
+ skip_parts = 3 # Both /home/username and /Users/username have 3 parts to skip
26
+ path = PathExtended.home().joinpath(*path.parts[skip_parts:])
22
27
  assert path.exists(), f"File not found: {path}"
23
- console.print(Panel(f"🔗 PATH MAPPING | Linux Linux: `{a_path}` ➡️ `{path}`", title="Path Mapping", expand=False))
28
+ current_os = "Linux" if platform.system() == "Linux" else "macOS"
29
+ source_os = "Linux" if a_path.as_posix().startswith("/home") else "macOS"
30
+ console.print(Panel(f"🔗 PATH MAPPING | {source_os} → {current_os}: `{a_path}` ➡️ `{path}`", title="Path Mapping", expand=False))
24
31
  elif path.as_posix().startswith("C:"):
25
- if platform.system() == "Linux": # path copied from Windows to Linux
32
+ if platform.system() in ["Linux", "Darwin"]: # path copied from Windows to Linux/Mac
26
33
  xx = str(a_path).replace("\\\\", "/")
27
- path = P.home().joinpath(*P(xx).parts[3:]) # exclude C:\\Users\\username
34
+ path = PathExtended.home().joinpath(*PathExtended(xx).parts[3:]) # exclude C:\\Users\\username
28
35
  assert path.exists(), f"File not found: {path}"
29
- console.print(Panel(f"🔗 PATH MAPPING | Windows Linux: `{a_path}` ➡️ `{path}`", title="Path Mapping", expand=False))
30
- elif platform.system() == "Windows" and P.home().as_posix() not in path.as_posix(): # copied from Windows to Windows with different username
31
- path = P.home().joinpath(*path.parts[2:])
36
+ target_os = "Linux" if platform.system() == "Linux" else "macOS"
37
+ console.print(Panel(f"🔗 PATH MAPPING | Windows {target_os}: `{a_path}` ➡️ `{path}`", title="Path Mapping", expand=False))
38
+ elif platform.system() == "Windows" and PathExtended.home().as_posix() not in path.as_posix(): # copied from Windows to Windows with different username
39
+ path = PathExtended.home().joinpath(*path.parts[2:])
32
40
  assert path.exists(), f"File not found: {path}"
33
41
  console.print(Panel(f"🔗 PATH MAPPING | Windows → Windows: `{a_path}` ➡️ `{path}`", title="Path Mapping", expand=False))
34
42
  return path.expanduser().absolute()
35
43
 
36
- def match_file_name(sub_string: str, search_root: Optional[P] = None) -> P:
37
- """Look up current directory for file name that matches the passed substring."""
38
- search_root_obj = search_root if search_root is not None else P.cwd()
39
- search_root_obj = search_root_obj.absolute()
40
- console.print(Panel(f"🔍 SEARCH | Looking for '{sub_string}' in {search_root_obj}", title="Search", expand=False))
41
44
 
42
- search_root_objects = search_root_obj.search("*", not_in=["links", ".venv", ".git", ".idea", ".vscode", "node_modules", "__pycache__"])
43
- search_results: L[P] = L([a_search_root_obj.search(f"*{sub_string}*", r=True) for a_search_root_obj in search_root_objects])
44
- if len(search_results) > 0:
45
- search_results = search_results.reduce(lambda x, y: x + y) # type: ignore
46
- else:
47
- pass
48
- search_results = search_results.filter(lambda x: x.suffix in (".py", ".sh", ".ps1"))
49
- if len(search_results) == 1:
50
- path_obj = search_results.list[0]
51
- elif len(search_results) > 1:
52
- msg = "Search results are ambiguous or non-existent, choose manually:"
53
- console.print(Panel(f"⚠️ WARNING | {msg}", title="Warning", expand=False))
54
- choice = choose_one_option(msg=msg, options=search_results.list, fzf=True)
55
- path_obj = P(choice)
56
- else:
57
- # let's do a final retry with sub_string.small()
58
- sub_string_small = sub_string.lower()
59
- if sub_string_small != sub_string:
60
- console.print(Panel("🔄 RETRY | Searching with lowercase letters", title="Retry", expand=False))
61
- return match_file_name(sub_string=sub_string_small)
62
- from git.repo import Repo
63
- from git.exc import InvalidGitRepositoryError
64
- try:
65
- repo = Repo(search_root_obj, search_parent_directories=True)
66
- repo_root_dir = P(repo.working_dir)
67
- if repo_root_dir != search_root_obj: # may be user is in a subdirectory of the repo root, try with root dir.
68
- console.print(Panel("🔄 RETRY | Searching from repository root instead of current directory", title="Retry", expand=False))
69
- return match_file_name(sub_string=sub_string, search_root=repo_root_dir)
70
- else:
71
- search_root_obj = repo_root_dir
72
- except InvalidGitRepositoryError:
73
- pass
45
+ def find_scripts(root: Path, name_substring: str) -> tuple[list[Path], list[Path]]:
46
+ filename_matches = []
47
+ partial_path_matches = []
48
+ for entry in root.iterdir():
49
+ if entry.is_dir():
50
+ if entry.name in {".links", ".venv", ".git", ".idea", ".vscode", "node_modules", "__pycache__"}:
51
+ # prune this entire subtree
52
+ continue
53
+ tmp1, tmp2 = find_scripts(entry, name_substring)
54
+ filename_matches.extend(tmp1)
55
+ partial_path_matches.extend(tmp2)
56
+ elif entry.is_file() and entry.suffix in {".py", ".sh", ".ps1"}:
57
+ if name_substring.lower() in entry.name.lower():
58
+ filename_matches.append(entry)
59
+ elif name_substring.lower() in entry.as_posix().lower():
60
+ partial_path_matches.append(entry)
61
+ return filename_matches, partial_path_matches
62
+
74
63
 
75
- if check_tool_exists(tool_name="fzf"):
76
- try:
77
- console.print(Panel(f"🔍 SEARCH STRATEGY | Using fd to search for '{sub_string}' in '{search_root_obj}' ...", title="Search Strategy", expand=False))
78
- fzf_cmd = f"cd '{search_root_obj}'; fd --type f --strip-cwd-prefix | fzf --filter={sub_string}"
79
- search_res = subprocess.run(fzf_cmd, stdout=subprocess.PIPE, text=True, check=True, shell=True).stdout.split("\\n")[:-1]
80
- except subprocess.CalledProcessError as cpe:
81
- console.print(Panel(f"❌ ERROR | FZF search failed with '{sub_string}' in '{search_root_obj}'.\\n{cpe}", title="Error", expand=False))
82
- msg = Panel(f"💥 FILE NOT FOUND | Path {sub_string} does not exist. No search results", title="File Not Found", expand=False)
83
- raise FileNotFoundError(msg) from cpe
64
+ def match_file_name(sub_string: str, search_root: PathExtended) -> PathExtended:
65
+ search_root_obj = search_root.absolute()
66
+ # assume subscript is filename only, not a sub_path. There is no need to fzf over the paths.
67
+ filename_matches, partial_path_matches = find_scripts(search_root_obj, sub_string)
68
+ if len(filename_matches) == 1: return PathExtended(filename_matches[0])
69
+ console.print(Panel(f"Partial filename match with case-insensitivity failed. This generated #{len(filename_matches)} results.", title="Search", expand=False))
70
+ if len(filename_matches) < 10:
71
+ print("\n".join([a_potential_match.as_posix() for a_potential_match in filename_matches]))
72
+ if len(filename_matches) > 1:
73
+ print("Try to narrow down filename_matches search by case-sensitivity.")
74
+ # let's see if avoiding .lower() helps narrowing down to one result
75
+ reduced_scripts = [a_potential_match for a_potential_match in filename_matches if sub_string in a_potential_match.name]
76
+ if len(reduced_scripts) == 1: return PathExtended(reduced_scripts[0])
77
+ elif len(reduced_scripts) > 1:
78
+ choice = choose_one_option(msg="Multiple matches found", options=reduced_scripts, fzf=True)
79
+ return PathExtended(choice)
80
+ print(f"Result: This still generated {len(reduced_scripts)} results.")
81
+ if len(reduced_scripts) < 10:
82
+ print("\n".join([a_potential_match.as_posix() for a_potential_match in reduced_scripts]))
84
83
 
85
- if len(search_res) == 1: return search_root_obj.joinpath(search_res[0])
86
- else:
87
- console.print(Panel("🔍 SEARCH STRATEGY | Trying with raw fzf search ...", title="Search Strategy", expand=False))
88
- try:
89
- res = subprocess.run(f"cd '{search_root_obj}'; fd | fzf --query={sub_string}", check=True, stdout=subprocess.PIPE, text=True, shell=True).stdout.strip()
90
- except subprocess.CalledProcessError as cpe:
91
- console.print(Panel(f"❌ ERROR | FZF search failed with '{sub_string}' in '{search_root_obj}'. {cpe}", title="Error", expand=False))
92
- msg = Panel(f"💥 FILE NOT FOUND | Path {sub_string} does not exist. No search results", title="File Not Found", expand=False)
93
- raise FileNotFoundError(msg) from cpe
94
- return search_root_obj.joinpath(res)
84
+ console.print(Panel(f"Partial path match with case-insensitivity failed. This generated #{len(partial_path_matches)} results.", title="Search", expand=False))
85
+ if len(partial_path_matches) == 1:
86
+ return PathExtended(partial_path_matches[0])
87
+ elif len(partial_path_matches) > 1:
88
+ print("Try to narrow down partial_path_matches search by case-sensitivity.")
89
+ reduced_scripts = [a_potential_match for a_potential_match in partial_path_matches if sub_string in a_potential_match.as_posix()]
90
+ if len(reduced_scripts) == 1: return PathExtended(reduced_scripts[0])
91
+ print(f"Result: This still generated {len(reduced_scripts)} results.")
92
+ try:
93
+ fzf_cmd = f"cd '{search_root_obj}'; fd --type file --strip-cwd-prefix | fzf --ignore-case --exact --query={sub_string}"
94
+ console.print(Panel(f"🔍 Second attempt: SEARCH STRATEGY | Using fd to search for '{sub_string}' in '{search_root_obj}' ...\n{fzf_cmd}", title="Search Strategy", expand=False))
95
+ search_res_raw = subprocess.run(fzf_cmd, stdout=subprocess.PIPE, text=True, check=True, shell=True,).stdout
96
+ search_res = search_res_raw.strip().split("\\n")[:-1]
97
+ except subprocess.CalledProcessError as cpe:
98
+ console.print(Panel(f"❌ ERROR | FZF search failed with '{sub_string}' in '{search_root_obj}'.\n{cpe}", title="Error", expand=False))
99
+ import sys
100
+ sys.exit(f"💥 FILE NOT FOUND | Path {sub_string} does not exist @ root {search_root_obj}. No search results.")
101
+ if len(search_res) == 1: return search_root_obj.joinpath(search_res_raw)
95
102
 
96
- msg = Panel(f"💥 FILE NOT FOUND | Path {sub_string} does not exist. No search results", title="File Not Found", expand=False)
97
- raise FileNotFoundError(msg)
98
- console.print(Panel(f" MATCH FOUND | `{sub_string}` ➡️ `{path_obj}`", title="Match Found", expand=False))
99
- return path_obj
103
+ print(f"⚠️ WARNING | Multiple search results found for `{sub_string}`\n'{search_res_raw}'")
104
+ cmd = f"cd '{search_root_obj}'; fd --type file | fzf --select-1 --query={sub_string}"
105
+ console.print(Panel(f"🔍 SEARCH STRATEGY | Trying with raw fzf search ...\n{cmd}", title="Search Strategy", expand=False))
106
+ try:
107
+ res = subprocess.run(cmd, check=True, stdout=subprocess.PIPE, text=True, shell=True).stdout.strip()
108
+ except subprocess.CalledProcessError as cpe:
109
+ console.print(Panel(f"❌ ERROR | FZF search failed with '{sub_string}' in '{search_root_obj}'. {cpe}", title="Error", expand=False))
110
+ msg = Panel(f"💥 FILE NOT FOUND | Path {sub_string} does not exist @ root {search_root_obj}. No search results", title="File Not Found", expand=False)
111
+ raise FileNotFoundError(msg) from cpe
112
+ return search_root_obj.joinpath(res)