machineconfig 1.94__py3-none-any.whl → 1.96__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/cluster/cloud_manager.py +445 -343
- machineconfig/cluster/data_transfer.py +63 -56
- machineconfig/cluster/distribute.py +284 -280
- machineconfig/cluster/file_manager.py +234 -237
- machineconfig/cluster/job_params.py +133 -133
- machineconfig/cluster/loader_runner.py +183 -149
- machineconfig/cluster/remote_machine.py +269 -252
- machineconfig/cluster/script_execution.py +215 -209
- machineconfig/cluster/script_notify_upon_completion.py +50 -43
- machineconfig/cluster/self_ssh.py +52 -54
- machineconfig/cluster/sessions_managers/__init__.py +0 -0
- machineconfig/cluster/sessions_managers/archive/__init__.py +0 -0
- machineconfig/{jobs/python → cluster/sessions_managers/archive}/create_zellij_template.py +5 -3
- machineconfig/cluster/sessions_managers/archive/session_managers.py +184 -0
- machineconfig/cluster/sessions_managers/demo_rich_zellij.py +0 -0
- machineconfig/cluster/sessions_managers/enhanced_command_runner.py +160 -0
- machineconfig/cluster/sessions_managers/wt_local.py +494 -0
- machineconfig/cluster/sessions_managers/wt_local_manager.py +577 -0
- machineconfig/cluster/sessions_managers/wt_remote.py +288 -0
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +483 -0
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +196 -0
- machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +418 -0
- machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +175 -0
- machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +300 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +228 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +418 -0
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +533 -0
- machineconfig/cluster/sessions_managers/zellij_remote.py +229 -0
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +188 -0
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +64 -0
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +126 -0
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +334 -0
- machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +68 -0
- machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +119 -0
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +85 -0
- machineconfig/cluster/templates/cli_click.py +0 -1
- machineconfig/cluster/templates/cli_gooey.py +102 -104
- machineconfig/cluster/templates/run_cloud.py +51 -51
- machineconfig/cluster/templates/run_cluster.py +103 -59
- machineconfig/cluster/templates/run_remote.py +57 -58
- machineconfig/cluster/templates/utils.py +69 -36
- machineconfig/jobs/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/linux/msc/lid.sh +2 -4
- machineconfig/jobs/linux/msc/network.sh +3 -6
- machineconfig/jobs/python/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python/check_installations.py +258 -190
- machineconfig/jobs/python/create_bootable_media.py +7 -3
- machineconfig/jobs/python/python_cargo_build_share.py +50 -50
- machineconfig/jobs/python/python_ve_symlink.py +10 -10
- machineconfig/jobs/python/vscode/__pycache__/select_interpreter.cpython-311.pyc +0 -0
- machineconfig/jobs/python/vscode/api.py +3 -3
- machineconfig/jobs/python/vscode/link_ve.py +6 -6
- machineconfig/jobs/python/vscode/select_interpreter.py +13 -9
- machineconfig/jobs/python/vscode/sync_code.py +14 -11
- machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_custom_installers/archive/ngrok.py +5 -5
- machineconfig/jobs/python_custom_installers/dev/aider.py +4 -4
- machineconfig/jobs/python_custom_installers/dev/alacritty.py +7 -6
- machineconfig/jobs/python_custom_installers/dev/brave.py +11 -7
- machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +7 -8
- machineconfig/jobs/python_custom_installers/dev/code.py +7 -5
- machineconfig/jobs/python_custom_installers/dev/cursor.py +66 -5
- machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +4 -5
- machineconfig/jobs/python_custom_installers/dev/espanso.py +21 -17
- machineconfig/jobs/python_custom_installers/dev/goes.py +6 -12
- machineconfig/jobs/python_custom_installers/dev/lvim.py +7 -6
- machineconfig/jobs/python_custom_installers/dev/nerdfont.py +5 -5
- machineconfig/jobs/python_custom_installers/dev/redis.py +11 -7
- machineconfig/jobs/python_custom_installers/dev/wezterm.py +12 -8
- machineconfig/jobs/python_custom_installers/dev/winget.py +194 -0
- machineconfig/jobs/python_custom_installers/{dev/docker.py → docker.py} +12 -7
- machineconfig/jobs/python_custom_installers/gh.py +10 -9
- machineconfig/jobs/python_custom_installers/hx.py +36 -65
- machineconfig/jobs/python_custom_installers/scripts/linux/brave.sh +4 -8
- machineconfig/jobs/python_custom_installers/scripts/linux/docker.sh +5 -10
- machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +3 -6
- machineconfig/jobs/python_custom_installers/scripts/linux/edge.sh +3 -6
- machineconfig/jobs/python_custom_installers/scripts/linux/nerdfont.sh +5 -10
- machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +4 -8
- machineconfig/jobs/python_custom_installers/scripts/linux/redis.sh +5 -10
- machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +6 -12
- machineconfig/jobs/python_custom_installers/scripts/linux/vscode.sh +101 -33
- machineconfig/jobs/python_custom_installers/scripts/linux/warp-cli.sh +5 -10
- machineconfig/jobs/python_custom_installers/scripts/linux/wezterm.sh +3 -6
- machineconfig/jobs/python_custom_installers/{dev/warp-cli.py → warp-cli.py} +5 -5
- machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_generic_installers/config.json +133 -9
- machineconfig/jobs/python_generic_installers/dev/config.json +208 -37
- machineconfig/jobs/python_generic_installers/update.py +3 -0
- machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_linux_installers/config.json +42 -6
- machineconfig/jobs/python_linux_installers/dev/config.json +79 -11
- machineconfig/jobs/python_windows_installers/config.json +6 -0
- machineconfig/profile/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/profile/__pycache__/create.cpython-311.pyc +0 -0
- machineconfig/profile/__pycache__/shell.cpython-311.pyc +0 -0
- machineconfig/profile/create.py +5 -5
- machineconfig/profile/create_hardlinks.py +5 -5
- machineconfig/profile/shell.py +69 -63
- machineconfig/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/cloud/init.sh +9 -18
- machineconfig/scripts/linux/fire +5 -24
- machineconfig/scripts/linux/fire_agents +27 -0
- machineconfig/scripts/linux/share_cloud.sh +6 -12
- machineconfig/scripts/linux/wifi_conn +24 -0
- machineconfig/scripts/python/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/cloud_copy.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/cloud_mount.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/cloud_sync.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/croshell.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_backup_retrieve.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_agents.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_jobs.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_jobs.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
- machineconfig/scripts/python/archive/im2text.py +28 -30
- machineconfig/scripts/python/archive/tmate_conn.py +10 -13
- machineconfig/scripts/python/archive/tmate_start.py +12 -16
- machineconfig/scripts/python/choose_wezterm_theme.py +12 -21
- machineconfig/scripts/python/cloud_copy.py +49 -104
- machineconfig/scripts/python/cloud_manager.py +77 -91
- machineconfig/scripts/python/cloud_mount.py +36 -46
- machineconfig/scripts/python/cloud_repo_sync.py +33 -79
- machineconfig/scripts/python/cloud_sync.py +35 -45
- machineconfig/scripts/python/croshell.py +70 -92
- machineconfig/scripts/python/devops.py +54 -113
- machineconfig/scripts/python/devops_add_identity.py +71 -109
- machineconfig/scripts/python/devops_add_ssh_key.py +42 -149
- machineconfig/scripts/python/devops_backup_retrieve.py +31 -119
- machineconfig/scripts/python/devops_devapps_install.py +6 -10
- machineconfig/scripts/python/devops_update_repos.py +5 -4
- machineconfig/scripts/python/dotfile.py +10 -7
- machineconfig/scripts/python/fire_agents.py +69 -0
- machineconfig/scripts/python/fire_jobs.py +117 -78
- machineconfig/scripts/python/ftpx.py +8 -8
- machineconfig/scripts/python/get_zellij_cmd.py +3 -3
- machineconfig/scripts/python/gh_models.py +6 -4
- machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/cloud_helpers.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers2.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-313.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/cloud_helpers.py +49 -46
- machineconfig/scripts/python/helpers/helpers2.py +26 -39
- machineconfig/scripts/python/helpers/helpers4.py +23 -35
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +33 -67
- machineconfig/scripts/python/mount_nfs.py +8 -11
- machineconfig/scripts/python/mount_nw_drive.py +4 -4
- machineconfig/scripts/python/mount_ssh.py +2 -2
- machineconfig/scripts/python/onetimeshare.py +56 -57
- machineconfig/scripts/python/pomodoro.py +55 -55
- machineconfig/scripts/python/repos.py +72 -49
- machineconfig/scripts/python/scheduler.py +70 -53
- machineconfig/scripts/python/snapshot.py +21 -24
- machineconfig/scripts/python/start_slidev.py +6 -5
- machineconfig/scripts/python/start_terminals.py +3 -1
- machineconfig/scripts/python/viewer.py +5 -4
- machineconfig/scripts/python/viewer_template.py +138 -140
- machineconfig/scripts/python/wifi_conn.py +416 -62
- machineconfig/scripts/python/wsl_windows_transfer.py +18 -3
- machineconfig/scripts/windows/fire.ps1 +27 -15
- machineconfig/settings/linters/.pylintrc +6 -7
- machineconfig/settings/lvim/windows/config.lua +0 -0
- machineconfig/settings/shells/bash/init.sh +6 -0
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +7 -6
- machineconfig/settings/shells/pwsh/init.ps1 +6 -6
- machineconfig/settings/shells/wt/settings.json +51 -266
- machineconfig/setup_linux/nix/cli_installation.sh +9 -18
- machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +3 -6
- machineconfig/setup_linux/web_shortcuts/all.sh +5 -10
- machineconfig/setup_linux/web_shortcuts/ascii_art.sh +7 -14
- machineconfig/setup_linux/web_shortcuts/croshell.sh +6 -12
- machineconfig/setup_linux/web_shortcuts/interactive.sh +39 -70
- machineconfig/setup_linux/web_shortcuts/ssh.sh +8 -16
- machineconfig/setup_linux/web_shortcuts/update_system.sh +7 -14
- machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +3 -6
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +27 -21
- machineconfig/utils/ai/browser_user_wrapper.py +60 -45
- machineconfig/utils/ai/generate_file_checklist.py +4 -7
- machineconfig/utils/ai/url2md.py +15 -7
- machineconfig/utils/cloud/onedrive/setup_oauth.py +59 -0
- machineconfig/utils/cloud/onedrive/transaction.py +796 -0
- machineconfig/utils/{utils_code.py → code.py} +25 -22
- machineconfig/utils/installer.py +81 -44
- machineconfig/utils/installer_utils/installer_abc.py +7 -6
- machineconfig/utils/installer_utils/installer_class.py +44 -25
- machineconfig/utils/io_save.py +107 -0
- machineconfig/utils/{utils_links.py → links.py} +28 -35
- machineconfig/utils/{utils_options.py → options.py} +14 -28
- machineconfig/utils/path.py +112 -0
- machineconfig/utils/path_reduced.py +608 -0
- machineconfig/utils/procs.py +134 -73
- machineconfig/utils/scheduling.py +312 -222
- machineconfig/utils/utils.py +19 -26
- machineconfig/utils/utils2.py +42 -0
- machineconfig/utils/utils5.py +84 -0
- machineconfig/utils/ve.py +49 -103
- {machineconfig-1.94.dist-info → machineconfig-1.96.dist-info}/METADATA +5 -3
- machineconfig-1.96.dist-info/RECORD +437 -0
- {machineconfig-1.94.dist-info → machineconfig-1.96.dist-info}/WHEEL +1 -1
- machineconfig/cluster/session_managers.py +0 -183
- machineconfig/cluster/templates/f.py +0 -4
- machineconfig/jobs/python/__pycache__/check_installations.cpython-311.pyc +0 -0
- machineconfig/jobs/python/__pycache__/checkout_version.cpython-311.pyc +0 -0
- machineconfig/jobs/python/__pycache__/python_ve_symlink.cpython-311.pyc +0 -0
- machineconfig/jobs/python/checkout_version.py +0 -123
- machineconfig/jobs/python/vscode/__pycache__/api.cpython-311.pyc +0 -0
- machineconfig/jobs/python/vscode/__pycache__/link_ve.cpython-311.pyc +0 -0
- machineconfig/jobs/python_custom_installers/__pycache__/hx.cpython-311.pyc +0 -0
- machineconfig/jobs/python_windows_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/python/.mypy_cache/.gitignore +0 -2
- machineconfig/scripts/python/.mypy_cache/3.11/@plugins_snapshot.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/__future__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/__future__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_ast.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_ast.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_bz2.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_bz2.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_codecs.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_codecs.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_compression.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_compression.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_decimal.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_decimal.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_io.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_io.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_locale.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_locale.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_stat.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_stat.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_struct.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_struct.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_thread.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_thread.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_warnings.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_warnings.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_weakref.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_weakref.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/argparse.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/argparse.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/ast.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/ast.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/binascii.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/binascii.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/builtins.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/builtins.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/bz2.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/bz2.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/calendar.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/calendar.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/codecs.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/codecs.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/configparser.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/configparser.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/contextlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/contextlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/datetime.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/datetime.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/decimal.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/decimal.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/dis.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/dis.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/charset.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/charset.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/errors.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/errors.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/header.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/header.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/message.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/message.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/policy.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/policy.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/enum.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/enum.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/functools.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/functools.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/gc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/gc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/genericpath.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/genericpath.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/getpass.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/getpass.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/compat.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/compat.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/config.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/config.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/db.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/db.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/diff.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/diff.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/exc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/exc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/remote.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/remote.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/types.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/types.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/util.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/util.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/glob.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/glob.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/gzip.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/gzip.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/inspect.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/inspect.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/io.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/io.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/itertools.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/itertools.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/locale.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/locale.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/mmap.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/mmap.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/numbers.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/numbers.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/opcode.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/opcode.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/os/path.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/os/path.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/pathlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/pathlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/platform.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/platform.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/posixpath.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/posixpath.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/re.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/re.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/resource.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/resource.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/shlex.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/shlex.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/shutil.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/shutil.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/signal.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/signal.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/stat.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/stat.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/string.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/string.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/struct.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/struct.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/subprocess.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/subprocess.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/tarfile.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/tarfile.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/tempfile.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/tempfile.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/textwrap.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/textwrap.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/threading.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/threading.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/time.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/time.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/types.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/types.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/typing.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/typing.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/uuid.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/uuid.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/warnings.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/warnings.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/weakref.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/weakref.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/zlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/zlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/CACHEDIR.TAG +0 -3
- machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/gh_models.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/url2md.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/viewer.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/vscode_api.cpython-311.pyc +0 -0
- machineconfig/settings/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/settings/linters/.ruff_cache/.gitignore +0 -2
- machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +0 -1
- machineconfig/settings/shells/ipy/profiles/default/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/playext.cpython-311.pyc +0 -0
- machineconfig/utils/utils_path.py +0 -151
- machineconfig/utils/ve_utils/ve1.py +0 -111
- machineconfig/utils/ve_utils/ve2.py +0 -142
- machineconfig-1.94.dist-info/RECORD +0 -710
- {machineconfig-1.94.dist-info → machineconfig-1.96.dist-info}/top_level.txt +0 -0
|
@@ -1,281 +1,298 @@
|
|
|
1
|
-
"""RM
|
|
2
|
-
"""
|
|
1
|
+
# """RM
|
|
2
|
+
# """
|
|
3
3
|
|
|
4
|
-
from typing import Optional, Any, Union, Callable
|
|
5
|
-
import time
|
|
6
|
-
import platform
|
|
7
|
-
import getpass
|
|
4
|
+
# from typing import Optional, Any, Union, Callable
|
|
5
|
+
# import time
|
|
6
|
+
# import platform
|
|
7
|
+
# import getpass
|
|
8
8
|
|
|
9
|
-
from
|
|
10
|
-
from crocodile.file_management import P, Save
|
|
11
|
-
from crocodile.meta import SSH
|
|
12
|
-
from machineconfig.cluster.session_managers import Zellij, WindowsTerminal
|
|
13
|
-
from machineconfig.cluster.self_ssh import SelfSSH
|
|
14
|
-
from machineconfig.cluster.loader_runner import EmailParams, WorkloadParams, LAUNCH_METHOD, JOB_STATUS, LogEntry, RemoteMachineConfig
|
|
15
|
-
from machineconfig.cluster.file_manager import FileManager
|
|
16
|
-
from machineconfig.cluster.cloud_manager import CloudManager
|
|
17
|
-
from machineconfig.cluster.job_params import JobParams
|
|
18
|
-
import machineconfig.cluster as cluster
|
|
9
|
+
# from machineconfig.utils.utils2 import randstr
|
|
19
10
|
|
|
20
|
-
from
|
|
21
|
-
from rich.syntax import Syntax
|
|
22
|
-
from rich import inspect
|
|
23
|
-
# from rich.text import Text
|
|
24
|
-
from rich.console import Console
|
|
25
|
-
import pandas as pd
|
|
11
|
+
# from machineconfig.utils.io_save import save_pickle
|
|
26
12
|
|
|
13
|
+
# from src.machineconfig.cluster.sessions_managers.archive.session_managers import Zellij, WindowsTerminal
|
|
14
|
+
# from machineconfig.cluster.self_ssh import SelfSSH
|
|
15
|
+
# from machineconfig.cluster.loader_runner import EmailParams, WorkloadParams, LAUNCH_METHOD, JOB_STATUS, LogEntry, RemoteMachineConfig
|
|
16
|
+
# from machineconfig.cluster.file_manager import FileManager
|
|
17
|
+
# from machineconfig.cluster.cloud_manager import CloudManager
|
|
18
|
+
# from machineconfig.cluster.job_params import JobParams
|
|
19
|
+
# import machineconfig.cluster as cluster
|
|
27
20
|
|
|
28
|
-
|
|
21
|
+
# from rich.panel import Panel
|
|
22
|
+
# from rich.syntax import Syntax
|
|
23
|
+
# from rich import inspect
|
|
24
|
+
# # from rich.text import Text
|
|
25
|
+
# from rich.console import Console
|
|
26
|
+
# from datetime import datetime
|
|
29
27
|
|
|
30
28
|
|
|
31
|
-
|
|
32
|
-
def __getstate__(self) -> dict[str, Any]: return self.__dict__
|
|
33
|
-
def __setstate__(self, state: dict[str, Any]): self.__dict__ = state
|
|
34
|
-
def __repr__(self): return f"Compute Machine {self.ssh.get_remote_repr(add_machine=True)}"
|
|
35
|
-
def __init__(self, func: Union[str, Callable[..., Any]], config: RemoteMachineConfig, func_kwargs: Optional[dict[str, Any]] = None, data: Optional[list[P]] = None):
|
|
36
|
-
self.config: RemoteMachineConfig = config
|
|
37
|
-
self.job_params: JobParams = JobParams.from_func(func=func)
|
|
38
|
-
if self.config.install_repo is True: assert self.job_params.is_installabe()
|
|
29
|
+
# console = Console()
|
|
39
30
|
|
|
40
|
-
if self.config.workload_params is not None and func_kwargs is not None: assert "workload_params" not in func_kwargs, "workload_params provided twice, once in config and once in func_kwargs. 🤷♂️"
|
|
41
|
-
self.kwargs = func_kwargs or {}
|
|
42
|
-
self.data = data if data is not None else []
|
|
43
|
-
# conn
|
|
44
|
-
self.ssh = self.config.ssh_obj if self.config.ssh_obj is not None else SSH(**self.config.ssh_params) # type: ignore
|
|
45
|
-
# scripts
|
|
46
|
-
self.file_manager = FileManager(job_id=self.config.job_id, remote_machine_type=self.ssh.get_remote_machine(), base=self.config.base_dir, max_simulataneous_jobs=self.config.max_simulataneous_jobs, lock_resources=self.config.lock_resources)
|
|
47
|
-
# flags
|
|
48
|
-
# self.execution_command: Optional[str] = None
|
|
49
|
-
self.submitted: bool = False
|
|
50
|
-
self.scipts_generated: bool = False
|
|
51
|
-
self.results_downloaded: bool = False
|
|
52
|
-
self.results_path: Optional[P] = None
|
|
53
31
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if isinstance(session_manager, Zellij):
|
|
63
|
-
sess_name = session_manager.get_current_zellij_session()
|
|
64
|
-
# This is a workaround that uses the same existing session and make special tab for new jobs, until zellij implements detached session capability.
|
|
65
|
-
# no need to assert session started, as it is already started. Plus, The lack of suffix `sess_name (current)` creates problems.
|
|
66
|
-
self.job_params.session_name = sess_name
|
|
67
|
-
Save.pickle(obj=self, path=self.file_manager.remote_machine_path.expanduser(), verbose=False)
|
|
68
|
-
else:
|
|
69
|
-
# As for Windows Terminal, there is another problem preventing us from using the same window; there is no kill-pane or kill-tab or even kill-window, the only way is to kill process (kills window).
|
|
70
|
-
# Thus, we can't terminate a job unless it has a window of its own. So we follow that apporach here.
|
|
71
|
-
session_manager.open_console(sess_name=sess_name, ssh=self.ssh)
|
|
72
|
-
session_manager.asssert_session_started(ssh=ssh, sess_name=sess_name)
|
|
73
|
-
cmd = self.file_manager.get_fire_command(launch_method=launch_method)
|
|
74
|
-
session_manager.setup_layout(ssh=ssh, sess_name=self.job_params.session_name, cmd=cmd, run=run, job_wd=self.file_manager.job_root.expanduser().absolute().as_posix(), tab_name=self.job_params.tab_name, compact=True).print()
|
|
75
|
-
if isinstance(ssh, SelfSSH):
|
|
76
|
-
pid_path = self.file_manager.execution_log_dir.expanduser().joinpath("pid.txt")
|
|
77
|
-
while True:
|
|
78
|
-
print(f"🧑💻 Waiting for Python process to start and declare its pid @ `{pid_path}` as dictated in python script ... ")
|
|
79
|
-
time.sleep(3)
|
|
80
|
-
try:
|
|
81
|
-
pid = int(pid_path.read_text())
|
|
82
|
-
import psutil
|
|
83
|
-
process_command = " ".join(psutil.Process(pid).cmdline())
|
|
84
|
-
print(f"🎉 Python process started running @ {pid=} & {process_command=}")
|
|
85
|
-
break
|
|
86
|
-
except Exception: pass
|
|
87
|
-
else:
|
|
88
|
-
pid = 0
|
|
89
|
-
process_command = "haha"
|
|
90
|
-
print("\n")
|
|
91
|
-
time.sleep(5) # allow time for job to write essential log files to define itself (see execution header and repo updates lines prior to py file).
|
|
92
|
-
return pid, process_command
|
|
32
|
+
# class RemoteMachine:
|
|
33
|
+
# def __getstate__(self) -> dict[str, Any]: return self.__dict__
|
|
34
|
+
# def __setstate__(self, state: dict[str, Any]): self.__dict__ = state
|
|
35
|
+
# def __repr__(self): return f"Compute Machine {self.ssh.get_remote_repr(add_machine=True)}"
|
|
36
|
+
# def __init__(self, func: Union[str, Callable[..., Any]], config: RemoteMachineConfig, func_kwargs: Optional[dict[str, Any]] = None, data: Optional[list[PathExtended]] = None):
|
|
37
|
+
# self.config: RemoteMachineConfig = config
|
|
38
|
+
# self.job_params: JobParams = JobParams.from_func(func=func)
|
|
39
|
+
# if self.config.install_repo is True: assert self.job_params.is_installabe()
|
|
93
40
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
41
|
+
# if self.config.workload_params is not None and func_kwargs is not None: assert "workload_params" not in func_kwargs, "workload_params provided twice, once in config and once in func_kwargs. 🤷♂️"
|
|
42
|
+
# self.kwargs = func_kwargs or {}
|
|
43
|
+
# self.data = data if data is not None else []
|
|
44
|
+
# # conn
|
|
45
|
+
# self.ssh = self.config.ssh_obj if self.config.ssh_obj is not None else SSH(**self.config.ssh_params) # type: ignore
|
|
46
|
+
# # scripts
|
|
47
|
+
# self.file_manager = FileManager(job_id=self.config.job_id, remote_machine_type=self.ssh.get_remote_machine(), base=self.config.base_dir, max_simulataneous_jobs=self.config.max_simulataneous_jobs, lock_resources=self.config.lock_resources)
|
|
48
|
+
# # flags
|
|
49
|
+
# # self.execution_command: Optional[str] = None
|
|
50
|
+
# self.submitted: bool = False
|
|
51
|
+
# self.scipts_generated: bool = False
|
|
52
|
+
# self.results_downloaded: bool = False
|
|
53
|
+
# self.results_path: Optional[PathExtended] = None
|
|
100
54
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
55
|
+
# def get_session_manager(self): return Zellij() if self.ssh.get_remote_machine() != "Windows" else WindowsTerminal()
|
|
56
|
+
# def fire(self, run: bool = False, open_console: bool = True, launch_method: LAUNCH_METHOD = "remotely") -> tuple[int, str]:
|
|
57
|
+
# assert self.submitted, "Job even not submitted yet. 🤔"
|
|
58
|
+
# console.rule(f"Firing job `{self.config.job_id}` @ remote machine {self.ssh}")
|
|
59
|
+
# session_manager = self.get_session_manager()
|
|
60
|
+
# ssh = self.ssh
|
|
61
|
+
# sess_name = self.job_params.session_name
|
|
62
|
+
# if open_console and self.config.open_console:
|
|
63
|
+
# if isinstance(session_manager, Zellij):
|
|
64
|
+
# sess_name = session_manager.get_current_zellij_session()
|
|
65
|
+
# # This is a workaround that uses the same existing session and make special tab for new jobs, until zellij implements detached session capability.
|
|
66
|
+
# # no need to assert session started, as it is already started. Plus, The lack of suffix `sess_name (current)` creates problems.
|
|
67
|
+
# self.job_params.session_name = sess_name
|
|
68
|
+
# save_pickle(obj=self, path=self.file_manager.remote_machine_path.expanduser(), verbose=False)
|
|
69
|
+
# else:
|
|
70
|
+
# # As for Windows Terminal, there is another problem preventing us from using the same window; there is no kill-pane or kill-tab or even kill-window, the only way is to kill process (kills window).
|
|
71
|
+
# # Thus, we can't terminate a job unless it has a window of its own. So we follow that apporach here.
|
|
72
|
+
# session_manager.open_console(sess_name=sess_name, ssh=self.ssh)
|
|
73
|
+
# session_manager.asssert_session_started(ssh=ssh, sess_name=sess_name)
|
|
74
|
+
# cmd = self.file_manager.get_fire_command(launch_method=launch_method)
|
|
75
|
+
# session_manager.setup_layout(ssh=ssh, sess_name=self.job_params.session_name, cmd=cmd, run=run, job_wd=self.file_manager.job_root.expanduser().absolute().as_posix(), tab_name=self.job_params.tab_name, compact=True).print()
|
|
76
|
+
# if isinstance(ssh, SelfSSH):
|
|
77
|
+
# pid_path = self.file_manager.execution_log_dir.expanduser().joinpath("pid.txt")
|
|
78
|
+
# while True:
|
|
79
|
+
# print(f"🧑💻 Waiting for Python process to start and declare its pid @ `{pid_path}` as dictated in python script ... ")
|
|
80
|
+
# time.sleep(3)
|
|
81
|
+
# try:
|
|
82
|
+
# pid = int(pid_path.read_text())
|
|
83
|
+
# import psutil
|
|
84
|
+
# process_command = " ".join(psutil.Process(pid).cmdline())
|
|
85
|
+
# print(f"🎉 Python process started running @ {pid=} & {process_command=}")
|
|
86
|
+
# break
|
|
87
|
+
# except Exception: pass
|
|
88
|
+
# else:
|
|
89
|
+
# pid = 0
|
|
90
|
+
# process_command = "haha"
|
|
91
|
+
# print("\n")
|
|
92
|
+
# time.sleep(5) # allow time for job to write essential log files to define itself (see execution header and repo updates lines prior to py file).
|
|
93
|
+
# return pid, process_command
|
|
111
94
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
self.job_params.session_name = "TS-" + randstr(noun=True) # TS: TerminalSession-CloudManager, to distinguish from other sessions created manually.
|
|
119
|
-
self.job_params.tab_name = f'🏃♂️{self.file_manager.job_id}' # randstr(noun=True)
|
|
120
|
-
execution_line = self.job_params.get_execution_line(parallelize=self.config.parallelize, workload_params=self.config.workload_params, wrap_in_try_except=self.config.wrap_in_try_except)
|
|
121
|
-
py_script = P(cluster.__file__).parent.joinpath("script_execution.py").read_text(encoding="utf-8").replace("params = JobParams.from_empty()", f"params = {self.job_params}").replace("# execution_line", execution_line)
|
|
122
|
-
if self.config.notify_upon_completion:
|
|
123
|
-
executed_obj = f"""File *{P(self.job_params.repo_path_rh).joinpath(self.job_params.file_path_r).collapseuser().as_posix()}*""" # for email.
|
|
124
|
-
assert self.config.email_config_name is not None, "Email config name is not provided. 🤷♂️"
|
|
125
|
-
assert self.config.to_email is not None, "Email address is not provided. 🤷♂️"
|
|
126
|
-
email_params = EmailParams(addressee=self.ssh.get_local_repr(add_machine=True),
|
|
127
|
-
speaker=self.ssh.get_remote_repr(add_machine=True),
|
|
128
|
-
ssh_conn_str=self.ssh.get_remote_repr(add_machine=False),
|
|
129
|
-
executed_obj=executed_obj,
|
|
130
|
-
file_manager_path=self.file_manager.file_manager_path.collapseuser().as_posix(),
|
|
131
|
-
to_email=self.config.to_email, email_config_name=self.config.email_config_name)
|
|
132
|
-
email_script = P(cluster.__file__).parent.joinpath("script_notify_upon_completion.py").read_text(encoding="utf-8").replace("email_params = EmailParams.from_empty()", f"email_params = {email_params}").replace('manager = FileManager.from_pickle(params.file_manager_path)', '')
|
|
133
|
-
py_script = py_script.replace("# NOTIFICATION-CODE-PLACEHOLDER", email_script)
|
|
134
|
-
ve_path = P(self.job_params.repo_path_rh).expanduser().joinpath(".ve_path")
|
|
135
|
-
if ve_path.exists(): ve_name = P(ve_path.read_text()).expanduser().name
|
|
136
|
-
else:
|
|
137
|
-
import sys
|
|
138
|
-
ve_name = P(sys.executable).parent.parent.name
|
|
139
|
-
shell_script = f"""
|
|
95
|
+
# def run(self, run: bool = True, open_console: bool = True, show_scripts: bool = True):
|
|
96
|
+
# self.generate_scripts()
|
|
97
|
+
# if show_scripts: self.show_scripts()
|
|
98
|
+
# self.submit()
|
|
99
|
+
# self.fire(run=run, open_console=open_console)
|
|
100
|
+
# return self
|
|
140
101
|
|
|
141
|
-
#
|
|
102
|
+
# def submit(self) -> None:
|
|
103
|
+
# console.rule(title="🚀 Submitting job")
|
|
104
|
+
# if type(self.ssh) is SelfSSH: pass
|
|
105
|
+
# else:
|
|
106
|
+
# from machineconfig.cluster.data_transfer import Submission # import here to avoid circular import.
|
|
107
|
+
# if self.config.transfer_method == "transfer_sh": Submission.transfer_sh(rm=self)
|
|
108
|
+
# elif self.config.transfer_method == "cloud": Submission.cloud(rm=self)
|
|
109
|
+
# elif self.config.transfer_method == "sftp": Submission.sftp(self)
|
|
110
|
+
# else: raise ValueError(f"Transfer method {self.config.transfer_method} not recognized. 🤷")
|
|
111
|
+
# self.submitted = True # before sending `self` to the remote.
|
|
142
112
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
113
|
+
# def generate_scripts(self):
|
|
114
|
+
# console.rule(f"📝 Generating scripts for job `{self.file_manager.job_id}` @ Machine `{self.__repr__()}`")
|
|
115
|
+
# self.job_params.ssh_repr = repr(self.ssh)
|
|
116
|
+
# self.job_params.ssh_repr_remote = self.ssh.get_remote_repr()
|
|
117
|
+
# self.job_params.description = self.config.description
|
|
118
|
+
# self.job_params.file_manager_path = self.file_manager.file_manager_path.collapseuser().as_posix()
|
|
119
|
+
# self.job_params.session_name = "TS-" + randstr(noun=True) # TS: TerminalSession-CloudManager, to distinguish from other sessions created manually.
|
|
120
|
+
# self.job_params.tab_name = f'🏃♂️{self.file_manager.job_id}' # randstr(noun=True)
|
|
121
|
+
# execution_line = self.job_params.get_execution_line(parallelize=self.config.parallelize, workload_params=self.config.workload_params, wrap_in_try_except=self.config.wrap_in_try_except)
|
|
122
|
+
# py_script = PathExtended(cluster.__file__).parent.joinpath("script_execution.py").read_text(encoding="utf-8").replace("params = JobParams.from_empty()", f"params = {self.job_params}").replace("# execution_line", execution_line)
|
|
123
|
+
# if self.config.notify_upon_completion:
|
|
124
|
+
# executed_obj = f"""File *{P(self.job_params.repo_path_rh).joinpath(self.job_params.file_path_r).collapseuser().as_posix()}*""" # for email.
|
|
125
|
+
# assert self.config.email_config_name is not None, "Email config name is not provided. 🤷♂️"
|
|
126
|
+
# assert self.config.to_email is not None, "Email address is not provided. 🤷♂️"
|
|
127
|
+
# email_params = EmailParams(addressee=self.ssh.get_local_repr(add_machine=True),
|
|
128
|
+
# speaker=self.ssh.get_remote_repr(add_machine=True),
|
|
129
|
+
# ssh_conn_str=self.ssh.get_remote_repr(add_machine=False),
|
|
130
|
+
# executed_obj=executed_obj,
|
|
131
|
+
# file_manager_path=self.file_manager.file_manager_path.collapseuser().as_posix(),
|
|
132
|
+
# to_email=self.config.to_email, email_config_name=self.config.email_config_name)
|
|
133
|
+
# email_script = PathExtended(cluster.__file__).parent.joinpath("script_notify_upon_completion.py").read_text(encoding="utf-8").replace("email_params = EmailParams.from_empty()", f"email_params = {email_params}").replace('manager = FileManager.from_pickle(params.file_manager_path)', '')
|
|
134
|
+
# py_script = py_script.replace("# NOTIFICATION-CODE-PLACEHOLDER", email_script)
|
|
135
|
+
# ve_path = PathExtended(self.job_params.repo_path_rh).expanduser().joinpath(".ve_path")
|
|
136
|
+
# if ve_path.exists(): ve_name = PathExtended(ve_path.read_text()).expanduser().name
|
|
137
|
+
# else:
|
|
138
|
+
# import sys
|
|
139
|
+
# ve_name = PathExtended(sys.executable).parent.parent.name
|
|
140
|
+
# shell_script = f"""
|
|
150
141
|
|
|
151
|
-
|
|
152
|
-
echo "Starting job {self.config.job_id} 🚀"
|
|
153
|
-
echo "Executing Python wrapper script: {self.file_manager.py_script_path.as_posix()}"
|
|
142
|
+
# # EXTRA-PLACEHOLDER-PRE
|
|
154
143
|
|
|
155
|
-
#
|
|
144
|
+
# echo "~~~~~~~~~~~~~~~~SHELL START~~~~~~~~~~~~~~~"
|
|
145
|
+
# {'~/scripts/devops -w update' if self.config.update_essential_repos else ''}
|
|
146
|
+
# {f'cd {P(self.job_params.repo_path_rh).collapseuser().as_posix()}'}
|
|
147
|
+
# . activate_ve {ve_name}
|
|
148
|
+
# {'git pull' if self.config.update_repo else ''}
|
|
149
|
+
# {'pip install -e .' if self.config.install_repo else ''}
|
|
150
|
+
# echo "~~~~~~~~~~~~~~~~SHELL END ~~~~~~~~~~~~~~~"
|
|
156
151
|
|
|
157
|
-
|
|
158
|
-
|
|
152
|
+
# echo ""
|
|
153
|
+
# echo "Starting job {self.config.job_id} 🚀"
|
|
154
|
+
# echo "Executing Python wrapper script: {self.file_manager.py_script_path.as_posix()}"
|
|
159
155
|
|
|
160
|
-
|
|
156
|
+
# # EXTRA-PLACEHOLDER-POST
|
|
161
157
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
with open(file=self.file_manager.shell_script_path.expanduser().create(parents_only=True), mode='w', encoding="utf-8", newline={"Windows": None, "Linux": "\n"}[self.ssh.get_remote_machine()]) as file: file.write(shell_script)
|
|
165
|
-
self.file_manager.py_script_path.expanduser().create(parents_only=True).write_text(py_script, encoding='utf-8') # py_version = sys.version.split(".")[1]
|
|
166
|
-
Save.pickle(obj=self.kwargs, path=self.file_manager.kwargs_path.expanduser(), verbose=False)
|
|
167
|
-
Save.pickle(obj=self.file_manager.__getstate__(), path=self.file_manager.file_manager_path.expanduser(), verbose=False)
|
|
168
|
-
Save.pickle(obj=self.config, path=self.file_manager.remote_machine_config_path.expanduser(), verbose=False)
|
|
169
|
-
Save.pickle(obj=self, path=self.file_manager.remote_machine_path.expanduser(), verbose=False)
|
|
170
|
-
job_status: JOB_STATUS = "queued"
|
|
171
|
-
self.file_manager.execution_log_dir.expanduser().create().joinpath("status.txt").write_text(job_status)
|
|
172
|
-
print("\n")
|
|
158
|
+
# cd ~
|
|
159
|
+
# {'python' if (not self.config.ipython and not self.config.pdb) else 'ipython'} {'-i' if self.config.interactive else ''} {'--pdb' if self.config.pdb else ''} {' -m pudb ' if self.config.pudb else ''} ./{self.file_manager.py_script_path.rel2home().as_posix()}
|
|
173
160
|
|
|
174
|
-
|
|
175
|
-
Console().print(Panel(Syntax(self.file_manager.shell_script_path.expanduser().read_text(encoding='utf-8'), lexer="ps1" if self.ssh.get_remote_machine() == "Windows" else "sh", theme="monokai", line_numbers=True), title="prepared shell script"))
|
|
176
|
-
Console().print(Panel(Syntax(self.file_manager.py_script_path.expanduser().read_text(encoding='utf-8'), lexer="ps1" if self.ssh.get_remote_machine() == "Windows" else "sh", theme="monokai", line_numbers=True), title="prepared python script"))
|
|
177
|
-
inspect(S(shell_script=repr(P(self.file_manager.shell_script_path).expanduser()), python_script=repr(P(self.file_manager.py_script_path).expanduser()), kwargs_file=repr(P(self.file_manager.kwargs_path).expanduser())), title="Prepared scripts and files.", value=False, docs=False, sort=False)
|
|
161
|
+
# deactivate
|
|
178
162
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
163
|
+
# """ # EVERYTHING in the script above is shell-agnostic. Ensure this is the case when adding new lines.
|
|
164
|
+
# # shell_script_path.write_text(shell_script, encoding='utf-8', newline={"Windows": None, "Linux": "\n"}[ssh.get_remote_machine()]) # LF vs CRLF requires py3.10
|
|
165
|
+
# shell_script_path = self.file_manager.shell_script_path.expanduser()
|
|
166
|
+
# shell_script_path.parent.mkdir(parents=True, exist_ok=True)
|
|
167
|
+
# with open(file=shell_script_path, mode='w', encoding="utf-8", newline={"Windows": None, "Linux": "\n"}[self.ssh.get_remote_machine()]) as file: file.write(shell_script)
|
|
168
|
+
# py_script_path = self.file_manager.py_script_path.expanduser()
|
|
169
|
+
# py_script_path.parent.mkdir(parents=True, exist_ok=True)
|
|
170
|
+
# py_script_path.write_text(py_script, encoding='utf-8') # py_version = sys.version.split(".")[1]
|
|
171
|
+
# save_pickle(obj=self.kwargs, path=self.file_manager.kwargs_path.expanduser(), verbose=False)
|
|
172
|
+
# save_pickle(obj=self.file_manager.__getstate__(), path=self.file_manager.file_manager_path.expanduser(), verbose=False)
|
|
173
|
+
# save_pickle(obj=self.config, path=self.file_manager.remote_machine_config_path.expanduser(), verbose=False)
|
|
174
|
+
# save_pickle(obj=self, path=self.file_manager.remote_machine_path.expanduser(), verbose=False)
|
|
175
|
+
# job_status: JOB_STATUS = "queued"
|
|
176
|
+
# execution_log_dir = self.file_manager.execution_log_dir.expanduser()
|
|
177
|
+
# execution_log_dir.mkdir(parents=True, exist_ok=True)
|
|
178
|
+
# execution_log_dir.joinpath("status.txt").write_text(job_status)
|
|
179
|
+
# print("\n")
|
|
188
180
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
181
|
+
# def show_scripts(self) -> None:
|
|
182
|
+
# Console().print(Panel(Syntax(self.file_manager.shell_script_path.expanduser().read_text(encoding='utf-8'), lexer="ps1" if self.ssh.get_remote_machine() == "Windows" else "sh", theme="monokai", line_numbers=True), title="prepared shell script"))
|
|
183
|
+
# Console().print(Panel(Syntax(self.file_manager.py_script_path.expanduser().read_text(encoding='utf-8'), lexer="ps1" if self.ssh.get_remote_machine() == "Windows" else "sh", theme="monokai", line_numbers=True), title="prepared python script"))
|
|
184
|
+
# inspect({
|
|
185
|
+
# "shell_script": repr(PathExtended(self.file_manager.shell_script_path).expanduser()),
|
|
186
|
+
# "python_script": repr(PathExtended(self.file_manager.py_script_path).expanduser()),
|
|
187
|
+
# "kwargs_file": repr(PathExtended(self.file_manager.kwargs_path).expanduser())
|
|
188
|
+
# }, title="Prepared scripts and files.", value=False, docs=False, sort=False)
|
|
196
189
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
190
|
+
# def wait_for_results(self, sleep_minutes: int = 10) -> None:
|
|
191
|
+
# assert self.submitted, "Job even not submitted yet. 🤔"
|
|
192
|
+
# assert not self.results_downloaded, "Job already completed. 🤔"
|
|
193
|
+
# while True:
|
|
194
|
+
# tmp = self.check_job_status()
|
|
195
|
+
# if tmp is not None: break
|
|
196
|
+
# time.sleep(60 * sleep_minutes)
|
|
197
|
+
# self.download_results()
|
|
198
|
+
# if self.config.notify_upon_completion: pass
|
|
201
199
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
txt += f"\nIt started at {start_time}. 🕒, and is still running. 🏃♂️"
|
|
210
|
-
txt += f"\nExecution time so far: {pd.Timestamp.now() - pd.to_datetime(start_time)}. 🕒"
|
|
211
|
-
console.print(Panel(txt, title=f"Job `{self.config.job_id}` Status", subtitle=self.ssh.get_remote_repr(), highlight=True, border_style="bold red", style="bold"))
|
|
212
|
-
print("\n")
|
|
213
|
-
else:
|
|
214
|
-
results_folder_file = base.joinpath("results_folder_path.txt") # it could be one returned by function executed or one made up by the running context.
|
|
215
|
-
results_folder = results_folder_file.read_text()
|
|
216
|
-
print("\n" * 2)
|
|
217
|
-
console.rule("Job Completed 🎉🥳🎆🥂🍾🎊🪅")
|
|
218
|
-
print(f"""Machine {self.ssh.get_remote_repr(add_machine=True)} has finished job `{self.config.job_id}`. 😁
|
|
219
|
-
📁 results_folder_path: {results_folder} """)
|
|
220
|
-
try:
|
|
221
|
-
inspect(base.joinpath("execution_times.Struct.pkl").readit(), value=False, title="Execution Times", docs=False, sort=False)
|
|
222
|
-
except Exception as err: print(f"Could not read execution times files. 🤷♂️, here is the error:\n {err}️")
|
|
223
|
-
print("\n")
|
|
200
|
+
# def check_job_status(self) -> Optional[PathExtended]:
|
|
201
|
+
# if not self.submitted:
|
|
202
|
+
# print("Job even not submitted yet. 🤔")
|
|
203
|
+
# return None
|
|
204
|
+
# elif self.results_downloaded:
|
|
205
|
+
# print("Job already completed. 🤔")
|
|
206
|
+
# return None
|
|
224
207
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
208
|
+
# base = self.file_manager.execution_log_dir.expanduser()
|
|
209
|
+
# base.mkdir(parents=True, exist_ok=True)
|
|
210
|
+
# try: self.ssh.copy_to_here(self.file_manager.execution_log_dir.as_posix(), z=True)
|
|
211
|
+
# except Exception: pass # type: ignore # the directory doesn't exist yet at the remote.
|
|
212
|
+
# end_time_file = base.joinpath("end_time.txt")
|
|
228
213
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
214
|
+
# if not end_time_file.exists():
|
|
215
|
+
# start_time_file = base.joinpath("start_time.txt")
|
|
216
|
+
# if not start_time_file.exists():
|
|
217
|
+
# print(f"Job {self.config.job_id} is still in the queue. 😯")
|
|
218
|
+
# else:
|
|
219
|
+
# start_time = start_time_file.read_text()
|
|
220
|
+
# txt = f"Machine {self.ssh.get_remote_repr(add_machine=True)} has not yet finished job `{self.config.job_id}`. 😟"
|
|
221
|
+
# txt += f"\nIt started at {start_time}. 🕒, and is still running. 🏃♂️"
|
|
222
|
+
# try:
|
|
223
|
+
# start_dt = datetime.fromisoformat(start_time.strip())
|
|
224
|
+
# execution_time = datetime.now() - start_dt
|
|
225
|
+
# txt += f"\nExecution time so far: {execution_time}. 🕒"
|
|
226
|
+
# except ValueError:
|
|
227
|
+
# txt += "\nExecution time: Could not parse start time. 🕒"
|
|
228
|
+
# console.print(Panel(txt, title=f"Job `{self.config.job_id}` Status", subtitle=self.ssh.get_remote_repr(), highlight=True, border_style="bold red", style="bold"))
|
|
229
|
+
# print("\n")
|
|
230
|
+
# else:
|
|
231
|
+
# results_folder_file = base.joinpath("results_folder_path.txt") # it could be one returned by function executed or one made up by the running context.
|
|
232
|
+
# results_folder = results_folder_file.read_text()
|
|
233
|
+
# print("\n" * 2)
|
|
234
|
+
# console.rule("Job Completed 🎉🥳🎆🥂🍾🎊🪅")
|
|
235
|
+
# print(f"""Machine {self.ssh.get_remote_repr(add_machine=True)} has finished job `{self.config.job_id}`. 😁
|
|
236
|
+
# 📁 results_folder_path: {results_folder} """)
|
|
237
|
+
# try:
|
|
238
|
+
# inspect(base.joinpath("execution_times.Struct.pkl").readit(), value=False, title="Execution Times", docs=False, sort=False)
|
|
239
|
+
# except Exception as err: print(f"Could not read execution times files. 🤷♂️, here is the error:\n {err}️")
|
|
240
|
+
# print("\n")
|
|
242
241
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
assert self.config.launch_method == "cloud_manager", "CloudManager only works with `launch_method` set to `cloud_manager`."
|
|
247
|
-
assert isinstance(self.ssh, SelfSSH), "CloudManager only works with `SelfSSH` objects."
|
|
248
|
-
assert self.config.workload_params is None, "CloudManager only works with `workload_params` set to `None`."
|
|
249
|
-
self.job_params.auto_commit()
|
|
250
|
-
if reset_cloud: cm.reset_cloud()
|
|
251
|
-
cm.claim_lock() # before adding any new jobs, make sure the global jobs folder is mirrored locally.
|
|
252
|
-
from copy import deepcopy
|
|
253
|
-
self.config.base_dir = CloudManager.base_path.joinpath("jobs").collapseuser().as_posix()
|
|
254
|
-
self.file_manager.base_dir = P(self.config.base_dir).collapseuser()
|
|
255
|
-
wl = WorkloadParams().split_to_jobs(jobs=split)
|
|
256
|
-
rms: list[RemoteMachine] = []
|
|
257
|
-
new_log_entries: list[LogEntry] = []
|
|
258
|
-
for idx, a_workload_params in enumerate(wl):
|
|
259
|
-
rm = deepcopy(self)
|
|
260
|
-
rm.config.job_id = f"{rm.config.job_id}-{idx + 1}-{split}"
|
|
261
|
-
if len(wl) == 1: rm.config.workload_params = None
|
|
262
|
-
else: rm.config.workload_params = a_workload_params
|
|
263
|
-
rm.file_manager.job_root = self.file_manager.base_dir.joinpath(f"{rm.config.job_id}").collapseuser()
|
|
264
|
-
rm.file_manager.job_id = rm.config.job_id
|
|
265
|
-
rm.submitted = True # must be done before generate_script which performs the pickling.
|
|
266
|
-
rm.generate_scripts()
|
|
267
|
-
rms.append(rm)
|
|
268
|
-
new_log_entries.append(LogEntry(name=rm.config.job_id, submission_time=pd.Timestamp.now().strftime("%Y-%m-%d %H:%M:%S"), start_time=None, end_time=None, run_machine=None,
|
|
269
|
-
source_machine=f"{getpass.getuser()}@{platform.node()}", note="", pid=None, cmd="", session_name=""))
|
|
270
|
-
log = cm.read_log() # this claims lock internally.
|
|
271
|
-
new_queued_df: 'pd.DataFrame' = pd.DataFrame([item.__dict__ for item in new_log_entries])
|
|
272
|
-
total_queued_df = pd.concat([log["queued"], new_queued_df], ignore_index=True, sort=False)
|
|
273
|
-
log["queued"] = total_queued_df
|
|
274
|
-
cm.write_log(log=log)
|
|
275
|
-
cm.release_lock() # all base_dir is synced anyway: self.resources.base_dir.joinpath(status_init).to_cloud(cloud=cm.cloud, rel2home=True)
|
|
276
|
-
return rms
|
|
242
|
+
# self.results_path = PathExtended(results_folder)
|
|
243
|
+
# return self.results_path
|
|
244
|
+
# return None
|
|
277
245
|
|
|
246
|
+
# def download_results(self, target: Optional[str] = None, r: bool = True, zip_first: bool = False):
|
|
247
|
+
# assert self.results_path is not None, "Results path is unknown until job execution is finalized. 🤔\nTry checking the job status first."
|
|
248
|
+
# if self.results_downloaded: print(f"Results already downloaded. 🤔\nSee `{self.results_path.expanduser().absolute()}`"); return
|
|
249
|
+
# self.ssh.copy_to_here(source=self.results_path.collapseuser().as_posix(), target=target, r=r, z=zip_first)
|
|
250
|
+
# self.results_downloaded = True
|
|
251
|
+
# return self
|
|
252
|
+
# def delete_remote_results(self):
|
|
253
|
+
# if self.results_path is not None:
|
|
254
|
+
# self.ssh.run_py(cmd=f"P(r'{self.results_path.as_posix()}').delete(sure=True)", verbose=False)
|
|
255
|
+
# return self
|
|
256
|
+
# else:
|
|
257
|
+
# print("Results path is unknown until job execution is finalized. 🤔\nTry checking the job status first.")
|
|
258
|
+
# return self
|
|
278
259
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
260
|
+
# def submit_to_cloud(self, cm: CloudManager, split: int = 5, reset_cloud: bool = False) -> list['RemoteMachine']:
|
|
261
|
+
# """The only authority responsible for adding entries to queue df."""
|
|
262
|
+
# assert self.config.transfer_method == "cloud", "CloudManager only works with `transfer_method` set to `cloud`."
|
|
263
|
+
# assert self.config.launch_method == "cloud_manager", "CloudManager only works with `launch_method` set to `cloud_manager`."
|
|
264
|
+
# assert isinstance(self.ssh, SelfSSH), "CloudManager only works with `SelfSSH` objects."
|
|
265
|
+
# assert self.config.workload_params is None, "CloudManager only works with `workload_params` set to `None`."
|
|
266
|
+
# self.job_params.auto_commit()
|
|
267
|
+
# if reset_cloud: cm.reset_cloud()
|
|
268
|
+
# cm.claim_lock() # before adding any new jobs, make sure the global jobs folder is mirrored locally.
|
|
269
|
+
# from copy import deepcopy
|
|
270
|
+
# self.config.base_dir = CloudManager.base_path.joinpath("jobs").collapseuser().as_posix()
|
|
271
|
+
# self.file_manager.base_dir = PathExtended(self.config.base_dir).collapseuser()
|
|
272
|
+
# wl = WorkloadParams().split_to_jobs(jobs=split)
|
|
273
|
+
# rms: list[RemoteMachine] = []
|
|
274
|
+
# new_log_entries: list[LogEntry] = []
|
|
275
|
+
# for idx, a_workload_params in enumerate(wl):
|
|
276
|
+
# rm = deepcopy(self)
|
|
277
|
+
# rm.config.job_id = f"{rm.config.job_id}-{idx + 1}-{split}"
|
|
278
|
+
# if len(wl) == 1: rm.config.workload_params = None
|
|
279
|
+
# else: rm.config.workload_params = a_workload_params
|
|
280
|
+
# rm.file_manager.job_root = self.file_manager.base_dir.joinpath(f"{rm.config.job_id}").collapseuser()
|
|
281
|
+
# rm.file_manager.job_id = rm.config.job_id
|
|
282
|
+
# rm.submitted = True # must be done before generate_script which performs the pickling.
|
|
283
|
+
# rm.generate_scripts()
|
|
284
|
+
# rms.append(rm)
|
|
285
|
+
# new_log_entries.append(LogEntry(name=rm.config.job_id, submission_time=datetime.now().strftime("%Y-%m-%d %H:%M:%S"), start_time=None, end_time=None, run_machine=None,
|
|
286
|
+
# source_machine=f"{getpass.getuser()}@{platform.node()}", note="", pid=None, cmd="", session_name=""))
|
|
287
|
+
# log = cm.read_log() # this claims lock internally.
|
|
288
|
+
# # Add new entries to queued list
|
|
289
|
+
# for entry in new_log_entries:
|
|
290
|
+
# log["queued"].append(entry.__dict__)
|
|
291
|
+
# cm.write_log(log=log)
|
|
292
|
+
# cm.release_lock() # all base_dir is synced anyway: self.resources.base_dir.joinpath(status_init).to_cloud(cloud=cm.cloud, rel2home=True)
|
|
293
|
+
# return rms
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
# if __name__ == '__main__':
|
|
297
|
+
# # try_main()
|
|
298
|
+
# pass
|