machineconfig 1.95__py3-none-any.whl → 1.97__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/cluster/cloud_manager.py +445 -343
- machineconfig/cluster/data_transfer.py +63 -57
- 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/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 +6 -6
- machineconfig/jobs/python/vscode/__pycache__/select_interpreter.cpython-311.pyc +0 -0
- machineconfig/jobs/python/vscode/api.py +1 -1
- machineconfig/jobs/python/vscode/link_ve.py +2 -2
- machineconfig/jobs/python/vscode/select_interpreter.py +9 -5
- machineconfig/jobs/python/vscode/sync_code.py +8 -5
- machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_custom_installers/archive/ngrok.py +1 -1
- machineconfig/jobs/python_custom_installers/dev/alacritty.py +3 -2
- machineconfig/jobs/python_custom_installers/dev/brave.py +7 -3
- machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +3 -4
- machineconfig/jobs/python_custom_installers/dev/code.py +3 -1
- machineconfig/jobs/python_custom_installers/dev/cursor.py +66 -5
- machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -1
- machineconfig/jobs/python_custom_installers/dev/espanso.py +13 -9
- machineconfig/jobs/python_custom_installers/dev/goes.py +2 -8
- machineconfig/jobs/python_custom_installers/dev/lvim.py +3 -2
- machineconfig/jobs/python_custom_installers/dev/nerdfont.py +1 -1
- machineconfig/jobs/python_custom_installers/dev/redis.py +7 -3
- machineconfig/jobs/python_custom_installers/dev/wezterm.py +8 -4
- machineconfig/jobs/python_custom_installers/dev/winget.py +194 -0
- machineconfig/jobs/python_custom_installers/{dev/docker.py → docker.py} +8 -3
- machineconfig/jobs/python_custom_installers/gh.py +4 -3
- machineconfig/jobs/python_custom_installers/hx.py +9 -8
- machineconfig/jobs/python_custom_installers/scripts/linux/vscode.sh +97 -30
- machineconfig/jobs/python_custom_installers/{dev/warp-cli.py → warp-cli.py} +1 -1
- 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 +44 -17
- machineconfig/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/linux/fire_agents +27 -0
- machineconfig/scripts/linux/mcinit +27 -0
- 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/ai/__pycache__/init.cpython-311.pyc +0 -0
- machineconfig/scripts/python/ai/init.py +56 -0
- machineconfig/scripts/python/ai/rules/python/dev.md +31 -0
- machineconfig/scripts/python/archive/im2text.py +1 -3
- machineconfig/scripts/python/choose_wezterm_theme.py +3 -3
- machineconfig/scripts/python/cloud_copy.py +10 -10
- machineconfig/scripts/python/cloud_manager.py +77 -99
- machineconfig/scripts/python/cloud_mount.py +13 -12
- machineconfig/scripts/python/cloud_repo_sync.py +14 -11
- machineconfig/scripts/python/croshell.py +24 -21
- machineconfig/scripts/python/devops.py +12 -17
- machineconfig/scripts/python/devops_add_identity.py +32 -10
- machineconfig/scripts/python/devops_add_ssh_key.py +10 -10
- machineconfig/scripts/python/devops_backup_retrieve.py +9 -8
- machineconfig/scripts/python/devops_devapps_install.py +6 -6
- machineconfig/scripts/python/devops_update_repos.py +4 -3
- machineconfig/scripts/python/dotfile.py +10 -7
- machineconfig/scripts/python/fire_agents.py +69 -0
- machineconfig/scripts/python/fire_jobs.py +62 -65
- 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 +12 -12
- machineconfig/scripts/python/helpers/helpers2.py +9 -8
- machineconfig/scripts/python/helpers/helpers4.py +23 -35
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +17 -16
- 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 +26 -18
- 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 +412 -60
- machineconfig/scripts/python/wsl_windows_transfer.py +18 -3
- machineconfig/scripts/windows/mcinit.ps1 +4 -0
- 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/web_shortcuts/interactive.sh +5 -2
- machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +3 -6
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +11 -9
- machineconfig/utils/ai/url2md.py +2 -2
- machineconfig/utils/cloud/onedrive/setup_oauth.py +59 -0
- machineconfig/utils/cloud/onedrive/transaction.py +796 -0
- machineconfig/utils/code.py +22 -13
- machineconfig/utils/installer.py +78 -35
- 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/links.py +19 -15
- machineconfig/utils/options.py +4 -8
- machineconfig/utils/path.py +91 -78
- machineconfig/utils/path_reduced.py +608 -0
- machineconfig/utils/procs.py +110 -45
- machineconfig/utils/scheduling.py +312 -222
- machineconfig/utils/utils.py +7 -7
- machineconfig/utils/utils2.py +42 -0
- machineconfig/utils/utils5.py +84 -0
- machineconfig/utils/ve.py +49 -87
- {machineconfig-1.95.dist-info → machineconfig-1.97.dist-info}/METADATA +2 -2
- machineconfig-1.97.dist-info/RECORD +442 -0
- 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/ve_utils/ve1.py +0 -111
- machineconfig/utils/ve_utils/ve2.py +0 -155
- machineconfig-1.95.dist-info/RECORD +0 -712
- {machineconfig-1.95.dist-info → machineconfig-1.97.dist-info}/WHEEL +0 -0
- {machineconfig-1.95.dist-info → machineconfig-1.97.dist-info}/top_level.txt +0 -0
|
@@ -12,11 +12,11 @@ from machineconfig.scripts.python.helpers.helpers4 import search_for_files_of_in
|
|
|
12
12
|
from machineconfig.scripts.python.helpers.helpers4 import convert_kwargs_to_fire_kwargs_str
|
|
13
13
|
from machineconfig.scripts.python.helpers.helpers4 import parse_pyfile
|
|
14
14
|
from machineconfig.scripts.python.helpers.helpers4 import get_import_module_code
|
|
15
|
-
from machineconfig.utils.
|
|
15
|
+
from machineconfig.utils.ve import get_repo_root, get_ve_activate_line, get_ve_path_and_ipython_profile
|
|
16
16
|
from machineconfig.utils.utils import display_options, choose_one_option, PROGRAM_PATH, match_file_name, sanitize_path
|
|
17
|
-
from machineconfig.utils.
|
|
18
|
-
from
|
|
19
|
-
from
|
|
17
|
+
from machineconfig.utils.path_reduced import P as PathExtended
|
|
18
|
+
from machineconfig.utils.io_save import save_toml
|
|
19
|
+
from machineconfig.utils.utils2 import randstr, read_toml
|
|
20
20
|
import platform
|
|
21
21
|
from typing import Optional
|
|
22
22
|
import argparse
|
|
@@ -30,7 +30,8 @@ def main() -> None:
|
|
|
30
30
|
parser = argparse.ArgumentParser()
|
|
31
31
|
parser.add_argument("path", nargs='?', type=str, help="The directory containing the jobs", default=".")
|
|
32
32
|
parser.add_argument("function", nargs='?', type=str, help="Fuction to run", default=None)
|
|
33
|
-
|
|
33
|
+
|
|
34
|
+
parser.add_argument("--init", "-I", type=str, help="init this repo", default="")
|
|
34
35
|
parser.add_argument("--ve", "-v", type=str, help="virtual enviroment name", default="")
|
|
35
36
|
parser.add_argument("--cmd", "-B", action="store_true", help="Create a cmd fire command to launch the the job asynchronously.")
|
|
36
37
|
parser.add_argument("--interactive", "-i", action="store_true", help="Whether to run the job interactively using IPython")
|
|
@@ -51,32 +52,34 @@ def main() -> None:
|
|
|
51
52
|
parser.add_argument("--zellij_tab", "-z", type=str, dest="zellij_tab", help="open in a new zellij tab")
|
|
52
53
|
parser.add_argument("--watch", "-w", action="store_true", help="watch the file for changes")
|
|
53
54
|
parser.add_argument("--kw", nargs="*", default=None, help="keyword arguments to pass to the function in the form of k1 v1 k2 v2 ... (meaning k1=v1, k2=v2, etc)")
|
|
54
|
-
|
|
55
55
|
try:
|
|
56
56
|
args = parser.parse_args()
|
|
57
57
|
except Exception as ex:
|
|
58
58
|
print(f"❌ Failed to parse arguments: {ex}")
|
|
59
59
|
parser.print_help()
|
|
60
60
|
raise ex
|
|
61
|
+
path_obj = sanitize_path(PathExtended.cwd())
|
|
62
|
+
|
|
63
|
+
if args.init != "":
|
|
64
|
+
from machineconfig.scripts.python.ai.init import add_ai_configs
|
|
65
|
+
add_ai_configs(repo_root=path_obj)
|
|
61
66
|
|
|
62
|
-
path_obj = sanitize_path(P(args.path))
|
|
63
67
|
if not path_obj.exists():
|
|
64
|
-
path_obj = match_file_name(sub_string=args.path)
|
|
68
|
+
path_obj = match_file_name(sub_string=args.path, search_root=PathExtended.cwd())
|
|
65
69
|
else: pass
|
|
66
|
-
|
|
67
70
|
if path_obj.is_dir():
|
|
68
71
|
print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
|
|
69
72
|
files = search_for_files_of_interest(path_obj)
|
|
70
73
|
choice_file = choose_one_option(options=files, fzf=True)
|
|
71
|
-
choice_file =
|
|
74
|
+
choice_file = PathExtended(choice_file)
|
|
72
75
|
else:
|
|
73
76
|
choice_file = path_obj
|
|
74
77
|
repo_root = get_repo_root(str(choice_file))
|
|
75
|
-
print(f"💾 Selected file: {choice_file}
|
|
78
|
+
print(f"💾 Selected file: {choice_file}.\nRepo root: {repo_root}")
|
|
76
79
|
|
|
77
|
-
|
|
80
|
+
ve_root_from_file, ipy_profile = get_ve_path_and_ipython_profile(choice_file)
|
|
78
81
|
if ipy_profile is None: ipy_profile = "default"
|
|
79
|
-
activate_ve_line = get_ve_activate_line(
|
|
82
|
+
activate_ve_line = get_ve_activate_line(ve_root=args.ve or ve_root_from_file or "$HOME/venvs/ve")
|
|
80
83
|
|
|
81
84
|
# Convert args.kw to dictionary
|
|
82
85
|
if choice_file.suffix == ".py":
|
|
@@ -94,13 +97,14 @@ def main() -> None:
|
|
|
94
97
|
kwargs = {}
|
|
95
98
|
|
|
96
99
|
# ========================= choosing function to run
|
|
100
|
+
choice_function: Optional[str] = None # Initialize to avoid unbound variable
|
|
97
101
|
if args.choose_function or args.submit_to_cloud:
|
|
98
102
|
if choice_file.suffix == ".py":
|
|
99
103
|
options, func_args = parse_pyfile(file_path=str(choice_file))
|
|
100
104
|
choice_function_tmp = display_options(msg="Choose a function to run", options=options, fzf=True, multi=False)
|
|
101
105
|
assert isinstance(choice_function_tmp, str), f"choice_function must be a string. Got {type(choice_function_tmp)}"
|
|
102
106
|
choice_index = options.index(choice_function_tmp)
|
|
103
|
-
choice_function
|
|
107
|
+
choice_function = choice_function_tmp.split(' -- ')[0]
|
|
104
108
|
choice_function_args = func_args[choice_index]
|
|
105
109
|
|
|
106
110
|
if choice_function == "RUN AS MAIN": choice_function = None
|
|
@@ -114,19 +118,26 @@ def main() -> None:
|
|
|
114
118
|
if line == "": continue
|
|
115
119
|
if line.startswith("echo"): continue
|
|
116
120
|
options.append(line)
|
|
117
|
-
|
|
118
|
-
choice_file =
|
|
121
|
+
chosen_lines = display_options(msg="Choose a line to run", options=options, fzf=True, multi=True)
|
|
122
|
+
choice_file = PathExtended.tmpfile(suffix=".sh").write_text("\n".join(chosen_lines))
|
|
119
123
|
choice_function = None
|
|
120
124
|
else:
|
|
121
125
|
choice_function = args.function
|
|
122
126
|
|
|
123
127
|
if choice_file.suffix == ".py":
|
|
124
128
|
if args.streamlit:
|
|
125
|
-
|
|
126
|
-
|
|
129
|
+
import socket
|
|
130
|
+
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
131
|
+
try:
|
|
132
|
+
s.connect(('8.8.8.8', 1))
|
|
133
|
+
local_ip_v4 = s.getsockname()[0]
|
|
134
|
+
except Exception:
|
|
135
|
+
local_ip_v4 = socket.gethostbyname(socket.gethostname())
|
|
136
|
+
finally:
|
|
137
|
+
s.close()
|
|
127
138
|
computer_name = platform.node()
|
|
128
139
|
port = 8501
|
|
129
|
-
toml_path: Optional[
|
|
140
|
+
toml_path: Optional[PathExtended] = None
|
|
130
141
|
toml_path_maybe = choice_file.parent.joinpath(".streamlit/config.toml")
|
|
131
142
|
if toml_path_maybe.exists():
|
|
132
143
|
toml_path = toml_path_maybe
|
|
@@ -135,15 +146,15 @@ def main() -> None:
|
|
|
135
146
|
if toml_path_maybe.exists(): toml_path = toml_path_maybe
|
|
136
147
|
if toml_path is not None:
|
|
137
148
|
print(f"📄 Reading config.toml @ {toml_path}")
|
|
138
|
-
config =
|
|
149
|
+
config = read_toml(toml_path)
|
|
139
150
|
if "server" in config:
|
|
140
151
|
if "port" in config["server"]:
|
|
141
152
|
port = config["server"]["port"]
|
|
142
153
|
secrets_path = toml_path.with_name("secrets.toml")
|
|
143
154
|
if repo_root is not None:
|
|
144
|
-
secrets_template_path =
|
|
155
|
+
secrets_template_path = PathExtended.home().joinpath(f"dotfiles/creds/streamlit/{PathExtended(repo_root).name}/{choice_file.name}/secrets.toml")
|
|
145
156
|
if args.environment != "" and not secrets_path.exists() and secrets_template_path.exists():
|
|
146
|
-
secrets_template =
|
|
157
|
+
secrets_template = read_toml(secrets_template_path)
|
|
147
158
|
if args.environment == "ip": host_url = f"http://{local_ip_v4}:{port}/oauth2callback"
|
|
148
159
|
elif args.environment == "localhost": host_url = f"http://localhost:{port}/oauth2callback"
|
|
149
160
|
elif args.environment == "hostname": host_url = f"http://{computer_name}:{port}/oauth2callback"
|
|
@@ -152,7 +163,7 @@ def main() -> None:
|
|
|
152
163
|
secrets_template["auth"]["redirect_uri"] = host_url
|
|
153
164
|
secrets_template["auth"]["cookie_secret"] = randstr(35)
|
|
154
165
|
secrets_template["auth"]["auth0"]["redirect_uri"] = host_url
|
|
155
|
-
|
|
166
|
+
save_toml(obj=secrets_template, path=secrets_path)
|
|
156
167
|
except Exception as ex:
|
|
157
168
|
print(ex)
|
|
158
169
|
raise ex
|
|
@@ -187,9 +198,9 @@ except (ImportError, ModuleNotFoundError) as ex:
|
|
|
187
198
|
print(fr"❌ Failed to import `{choice_file}` as a module: {{ex}} ")
|
|
188
199
|
print(fr"⚠️ Attempting import with ad-hoc `$PATH` manipulation. DO NOT pickle any objects in this session as correct deserialization cannot be guaranteed.")
|
|
189
200
|
import sys
|
|
190
|
-
sys.path.append(r'{
|
|
201
|
+
sys.path.append(r'{PathExtended(choice_file).parent}')
|
|
191
202
|
{repo_root_add}
|
|
192
|
-
from {
|
|
203
|
+
from {PathExtended(choice_file).stem} import *
|
|
193
204
|
print(fr"✅ Successfully imported `{choice_file}`")
|
|
194
205
|
"""
|
|
195
206
|
if choice_function is not None:
|
|
@@ -207,7 +218,9 @@ try:
|
|
|
207
218
|
except ImportError as _ex:
|
|
208
219
|
print(r'''{txt}''')
|
|
209
220
|
""" + txt
|
|
210
|
-
choice_file =
|
|
221
|
+
choice_file = PathExtended.tmp().joinpath(f'tmp_scripts/python/{PathExtended(choice_file).parent.name}_{PathExtended(choice_file).stem}_{randstr()}.py')
|
|
222
|
+
choice_file.parent.mkdir(parents=True, exist_ok=True)
|
|
223
|
+
choice_file.write_text(txt)
|
|
211
224
|
|
|
212
225
|
# ========================= determining basic command structure: putting together exe & choice_file & choice_function & pdb
|
|
213
226
|
if args.debug:
|
|
@@ -227,7 +240,7 @@ except ImportError as _ex:
|
|
|
227
240
|
if args.holdDirectory:
|
|
228
241
|
command = f"{exe} {choice_file}"
|
|
229
242
|
else:
|
|
230
|
-
command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {
|
|
243
|
+
command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {PathExtended.cwd()}"
|
|
231
244
|
|
|
232
245
|
elif args.cmd:
|
|
233
246
|
command = rf""" cd /d {choice_file.parent} & {exe} {choice_file.name} """
|
|
@@ -236,12 +249,8 @@ except ImportError as _ex:
|
|
|
236
249
|
kwargs_raw = " ".join(args.kw) if args.kw is not None else ""
|
|
237
250
|
command = f"{exe} {choice_file} {kwargs_raw}"
|
|
238
251
|
else:
|
|
239
|
-
# command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {
|
|
252
|
+
# command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {PathExtended.cwd()}"
|
|
240
253
|
command = f"{exe} {choice_file} "
|
|
241
|
-
# this installs in ve env, which is not execution env
|
|
242
|
-
# if "ipdb" in command: install_n_import("ipdb")
|
|
243
|
-
# if "pudb" in command: install_n_import("pudb")
|
|
244
|
-
|
|
245
254
|
if not args.cmd:
|
|
246
255
|
if "ipdb" in command: command = f"pip install ipdb\n{command}"
|
|
247
256
|
if "pudb" in command: command = f"pip install pudb\n{command}"
|
|
@@ -261,20 +270,23 @@ python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
|
|
|
261
270
|
if choice_function is not None:
|
|
262
271
|
command += f"--function {choice_function} "
|
|
263
272
|
|
|
264
|
-
# try: install_n_import("clipboard").copy(command)
|
|
265
|
-
# except Exception as ex: print(f"Failed to copy command to clipboard. {ex}")
|
|
266
|
-
|
|
267
273
|
if args.Nprocess > 1:
|
|
268
|
-
lines = [f""" zellij action new-tab --name nProcess{randstr(2)}"""]
|
|
269
|
-
command = command.replace(". activate_ve", ". $HOME/scripts/activate_ve")
|
|
274
|
+
# lines = [f""" zellij action new-tab --name nProcess{randstr(2)}"""]
|
|
275
|
+
# command = command.replace(". activate_ve", ". $HOME/scripts/activate_ve")
|
|
276
|
+
# for an_arg in range(args.Nprocess):
|
|
277
|
+
# sub_command = f"{command} --idx={an_arg} --idx_max={args.Nprocess}"
|
|
278
|
+
# if args.optimized:
|
|
279
|
+
# sub_command = sub_command.replace("python ", "python -OO ")
|
|
280
|
+
# sub_command_path = PathExtended.tmpfile(suffix=".sh").write_text(sub_command)
|
|
281
|
+
# lines.append(f"""zellij action new-pane -- bash {sub_command_path} """)
|
|
282
|
+
# lines.append("sleep 5") # python tends to freeze if you launch instances within 1 microsecond of each other
|
|
283
|
+
# command = "\n".join(lines)
|
|
284
|
+
tab_config = {}
|
|
270
285
|
for an_arg in range(args.Nprocess):
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
lines.append(f"""zellij action new-pane -- bash {sub_command_path} """)
|
|
276
|
-
lines.append("sleep 5") # python tends to freeze if you launch instances within 1 microsecond of each other
|
|
277
|
-
command = "\n".join(lines)
|
|
286
|
+
tab_config[f"tab{an_arg}"] = (str(PathExtended.cwd()), f"uv run python -m fire {choice_file} {choice_function} --idx={an_arg} --idx_max={args.Nprocess}")
|
|
287
|
+
from machineconfig.cluster.sessions_managers.zellij_local import run_zellij_layout
|
|
288
|
+
run_zellij_layout(tab_config=tab_config, session_name=None)
|
|
289
|
+
return None
|
|
278
290
|
|
|
279
291
|
if args.optimized:
|
|
280
292
|
# note that in ipython, optimization is meaningless.
|
|
@@ -288,7 +300,7 @@ python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
|
|
|
288
300
|
console = Console()
|
|
289
301
|
|
|
290
302
|
if args.zellij_tab is not None:
|
|
291
|
-
comman_path__ =
|
|
303
|
+
comman_path__ = PathExtended.tmpfile(suffix=".sh").write_text(command)
|
|
292
304
|
console.print(Panel(Syntax(command, lexer="shell"), title=f"🔥 fire command @ {comman_path__}: "), style="bold red")
|
|
293
305
|
import subprocess
|
|
294
306
|
existing_tab_names = subprocess.run(["zellij", "action", "query-tab-names"], capture_output=True, text=True, check=True).stdout.splitlines()
|
|
@@ -296,27 +308,12 @@ python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
|
|
|
296
308
|
print(f"⚠️ Tab name `{args.zellij_tab}` already exists. Please choose a different name.")
|
|
297
309
|
# args.zellij_tab = input("Please enter a new tab name: ")
|
|
298
310
|
args.zellij_tab += f"_{randstr(3)}"
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
sleep 1
|
|
302
|
-
zellij action new-tab --name {args.zellij_tab}
|
|
303
|
-
echo "Sleep 2 seconds to allow zellij to go to the new tab"
|
|
304
|
-
sleep 2
|
|
305
|
-
zellij action go-to-tab-name {args.zellij_tab}
|
|
306
|
-
echo "Sleep 2 seconds to allow zellij to start the new pane"
|
|
307
|
-
sleep 2
|
|
308
|
-
zellij action new-pane --direction down -- /bin/bash {comman_path__}
|
|
309
|
-
echo "Sleep 2 seconds to allow zellij to start the new pane"
|
|
310
|
-
sleep 1
|
|
311
|
-
zellij action move-focus up; sleep 2
|
|
312
|
-
echo "Sleep 2 seconds to allow zellij to close the pane"
|
|
313
|
-
sleep 1
|
|
314
|
-
zellij action close-pane; sleep 2
|
|
315
|
-
"""
|
|
311
|
+
from machineconfig.cluster.sessions_managers.zellij_local import run_command_in_zellij_tab
|
|
312
|
+
command = run_command_in_zellij_tab(command=str(comman_path__), tab_name=args.zellij_tab, cwd=None)
|
|
316
313
|
if args.watch: command = "watchexec --restart --exts py,sh,ps1 " + command
|
|
317
314
|
if args.git_pull: command = f"\ngit -C {choice_file.parent} pull\n" + command
|
|
318
315
|
if args.PathExport:
|
|
319
|
-
if platform.system()
|
|
316
|
+
if platform.system() in ["Linux", "Darwin"]: export_line = f"""export PYTHONPATH="{repo_root}""" + """:${PYTHONPATH}" """
|
|
320
317
|
elif platform.system() == "Windows":
|
|
321
318
|
# export_line = f"""set PYTHONPATH="{repo_root}""" + """:%PYTHONPATH%" """
|
|
322
319
|
# powershell equivalent
|
|
@@ -326,9 +323,9 @@ zellij action close-pane; sleep 2
|
|
|
326
323
|
command = export_line + "\n" + command
|
|
327
324
|
|
|
328
325
|
program_path = os.environ.get("op_script", None)
|
|
329
|
-
program_path =
|
|
326
|
+
program_path = PathExtended(program_path) if program_path is not None else PROGRAM_PATH
|
|
330
327
|
if args.loop:
|
|
331
|
-
if platform.system()
|
|
328
|
+
if platform.system() in ["Linux", "Darwin"]:
|
|
332
329
|
command = command + "\nsleep 0.5"
|
|
333
330
|
elif platform.system() == "Windows":
|
|
334
331
|
# command = command + "timeout 0.5\n"
|
|
@@ -7,9 +7,9 @@ Currently, the only way to work around this is to predifine the host in ~/.ssh/c
|
|
|
7
7
|
|
|
8
8
|
import argparse
|
|
9
9
|
from crocodile.meta import SSH
|
|
10
|
-
from
|
|
11
|
-
from crocodile.file_management import P
|
|
10
|
+
from machineconfig.utils.path_reduced import P as PathExtended
|
|
12
11
|
from machineconfig.scripts.python.helpers.helpers2 import ES
|
|
12
|
+
from machineconfig.utils.utils2 import pprint
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
def main():
|
|
@@ -43,12 +43,12 @@ def main():
|
|
|
43
43
|
┃ Cannot use expand symbol `{ES}` in both source and target
|
|
44
44
|
┃ This creates a cyclical inference dependency
|
|
45
45
|
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
|
|
46
|
-
else: target =
|
|
46
|
+
else: target = PathExtended(args.target).expanduser().absolute()
|
|
47
47
|
source = target.collapseuser().as_posix()
|
|
48
48
|
else:
|
|
49
49
|
source = ":".join(args.source.split(":")[1:])
|
|
50
50
|
if args.target == ES: target = None
|
|
51
|
-
else: target =
|
|
51
|
+
else: target = PathExtended(args.target).expanduser().absolute().as_posix()
|
|
52
52
|
|
|
53
53
|
elif ":" in args.target and (args.target[1] != ":" if len(args.target) > 1 else True): # avoid the case of "C:/":
|
|
54
54
|
source_is_remote = False
|
|
@@ -66,7 +66,7 @@ def main():
|
|
|
66
66
|
else:
|
|
67
67
|
target = ":".join(args.target.split(":")[1:])
|
|
68
68
|
if args.source == ES: source = None
|
|
69
|
-
else: source =
|
|
69
|
+
else: source = PathExtended(args.source).expanduser().absolute()
|
|
70
70
|
|
|
71
71
|
else:
|
|
72
72
|
raise ValueError("""
|
|
@@ -76,7 +76,7 @@ def main():
|
|
|
76
76
|
┃ Format should be: machine:path
|
|
77
77
|
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
pprint({"source": str(source), "target": str(target), "machine": machine}, "CLI Resolution")
|
|
80
80
|
|
|
81
81
|
from paramiko.ssh_exception import AuthenticationException # type: ignore
|
|
82
82
|
try:
|
|
@@ -107,7 +107,7 @@ def main():
|
|
|
107
107
|
│ Downloading from cloud to local...
|
|
108
108
|
└────────────────────────────────────────────────────────────────""")
|
|
109
109
|
ssh.run_locally(f"cloud_copy :^ {target}").print()
|
|
110
|
-
received_file =
|
|
110
|
+
received_file = PathExtended(target) # type: ignore
|
|
111
111
|
else:
|
|
112
112
|
if source_is_remote:
|
|
113
113
|
assert source is not None, """
|
|
@@ -132,7 +132,7 @@ def main():
|
|
|
132
132
|
└────────────────────────────────────────────────────────────────""")
|
|
133
133
|
received_file = ssh.copy_from_here(source=source, target=target, z=args.zipFirst, r=args.recursive)
|
|
134
134
|
|
|
135
|
-
if source_is_remote and isinstance(received_file,
|
|
135
|
+
if source_is_remote and isinstance(received_file, PathExtended):
|
|
136
136
|
print(f"""
|
|
137
137
|
┌────────────────────────────────────────────────────────────────
|
|
138
138
|
│ 📁 File Received
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
from
|
|
1
|
+
from pathlib import Path
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
def get_zellij_cmd(wd1:
|
|
4
|
+
def get_zellij_cmd(wd1: Path, wd2: Path) -> str:
|
|
5
5
|
_ = wd1, wd2
|
|
6
6
|
lines = [""" zellij action new-tab --name gitdiff""",
|
|
7
7
|
"""zellij action new-pane --direction down --name local --cwd ./data """,
|
|
@@ -11,4 +11,4 @@ def get_zellij_cmd(wd1: P, wd2: P) -> str:
|
|
|
11
11
|
"""zellij action write-chars "cd '{wd2}' """,
|
|
12
12
|
"""git status" """
|
|
13
13
|
]
|
|
14
|
-
return "; ".join(lines)
|
|
14
|
+
return "; ".join(lines)
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
# as per https://github.com/marketplace/models/azure-openai/o1-preview
|
|
2
2
|
from openai import OpenAI
|
|
3
|
-
from
|
|
3
|
+
from machineconfig.utils.path_reduced import P as PathExtended
|
|
4
|
+
from machineconfig.utils.utils2 import read_ini
|
|
4
5
|
from rich import print as rprint
|
|
5
6
|
from rich.panel import Panel
|
|
7
|
+
from typing import Any
|
|
6
8
|
|
|
7
9
|
|
|
8
|
-
gh_token =
|
|
10
|
+
gh_token = read_ini(PathExtended.home().joinpath("dotfiles/creds/git/git_host_tokens.ini"))['thisismygitrepo']['newLongterm']
|
|
9
11
|
endpoint = "https://models.inference.ai.azure.com"
|
|
10
12
|
model_name_preferences = ["o3-mini", "o1-preview", "o1-mini", "GPT-4o", "GPT-4-o-mini"]
|
|
11
13
|
client__ = OpenAI(
|
|
@@ -14,7 +16,7 @@ client__ = OpenAI(
|
|
|
14
16
|
)
|
|
15
17
|
|
|
16
18
|
|
|
17
|
-
def get_response(client, model_name: str, messages: list[dict[str, str]]):
|
|
19
|
+
def get_response(client: Any, model_name: str, messages: list[dict[str, str]]):
|
|
18
20
|
print(f"""
|
|
19
21
|
┌────────────────────────────────────────────────────────────────
|
|
20
22
|
│ 🤖 Querying Model: {model_name}
|
|
@@ -78,7 +80,7 @@ def interactive_chat():
|
|
|
78
80
|
title=f"🤖 AI ({model_name})",
|
|
79
81
|
border_style="blue"
|
|
80
82
|
))
|
|
81
|
-
except:
|
|
83
|
+
except Exception:
|
|
82
84
|
# Fallback if rich formatting fails
|
|
83
85
|
print(f"""
|
|
84
86
|
┌────────────────────────────────────────────────────────────────
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
from
|
|
2
|
-
from
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
from machineconfig.utils.utils2 import pprint, read_json, read_ini
|
|
3
3
|
from pydantic import ConfigDict
|
|
4
4
|
from pydantic.dataclasses import dataclass
|
|
5
5
|
from typing import Optional
|
|
@@ -46,18 +46,18 @@ class Args():
|
|
|
46
46
|
config: Optional[str] = None
|
|
47
47
|
|
|
48
48
|
@staticmethod
|
|
49
|
-
def from_config(config_path:
|
|
50
|
-
return Args(**
|
|
49
|
+
def from_config(config_path: Path):
|
|
50
|
+
return Args(**read_json(config_path))
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
def find_cloud_config(path:
|
|
53
|
+
def find_cloud_config(path: Path):
|
|
54
54
|
display_header(f"Searching for cloud configuration file @ {path}")
|
|
55
55
|
|
|
56
56
|
for _i in range(len(path.parts)):
|
|
57
57
|
if path.joinpath("cloud.json").exists():
|
|
58
58
|
res = Args.from_config(path.joinpath("cloud.json"))
|
|
59
59
|
display_success(f"Found cloud config at: {path.joinpath('cloud.json')}")
|
|
60
|
-
|
|
60
|
+
pprint(res.__dict__, "Cloud Config")
|
|
61
61
|
return res
|
|
62
62
|
path = path.parent
|
|
63
63
|
|
|
@@ -65,10 +65,10 @@ def find_cloud_config(path: P):
|
|
|
65
65
|
return None
|
|
66
66
|
|
|
67
67
|
|
|
68
|
-
def absolute(path: str) ->
|
|
69
|
-
obj =
|
|
68
|
+
def absolute(path: str) -> Path:
|
|
69
|
+
obj = Path(path).expanduser()
|
|
70
70
|
if not path.startswith(".") and obj.exists(): return obj
|
|
71
|
-
try_absing =
|
|
71
|
+
try_absing = Path.cwd().joinpath(path)
|
|
72
72
|
if try_absing.exists(): return try_absing
|
|
73
73
|
display_warning(f"Path {path} could not be resolved to absolute path.")
|
|
74
74
|
display_warning("Trying to resolve symlinks (this may result in unintended paths).")
|
|
@@ -88,7 +88,7 @@ def get_secure_share_cloud_config(interactive: bool, cloud: Optional[str]) -> Ar
|
|
|
88
88
|
console.print(f"☁️ Using cloud from environment: {cloud}")
|
|
89
89
|
else:
|
|
90
90
|
try:
|
|
91
|
-
default_cloud__ =
|
|
91
|
+
default_cloud__ = read_ini(DEFAULTS_PATH)['general']['rclone_config_name']
|
|
92
92
|
except Exception:
|
|
93
93
|
default_cloud__ = 'No default cloud found.'
|
|
94
94
|
if default_cloud__ == 'No default cloud found.' or interactive:
|
|
@@ -98,7 +98,7 @@ def get_secure_share_cloud_config(interactive: bool, cloud: Optional[str]) -> Ar
|
|
|
98
98
|
cloud = default_cloud__
|
|
99
99
|
console.print(f"☁️ Using default cloud: {cloud}")
|
|
100
100
|
|
|
101
|
-
default_password_path =
|
|
101
|
+
default_password_path = Path.home().joinpath("dotfiles/creds/passwords/quick_password")
|
|
102
102
|
if default_password_path.exists():
|
|
103
103
|
pwd = default_password_path.read_text().strip()
|
|
104
104
|
default_message = "defaults to quick_password"
|
|
@@ -112,7 +112,7 @@ def get_secure_share_cloud_config(interactive: bool, cloud: Optional[str]) -> Ar
|
|
|
112
112
|
rel2home=True, root="myshare", os_specific=False,)
|
|
113
113
|
|
|
114
114
|
display_success("Using SecureShare cloud config")
|
|
115
|
-
|
|
115
|
+
pprint(res.__dict__, "SecureShare Config")
|
|
116
116
|
return res
|
|
117
117
|
|
|
118
118
|
def display_header(title: str):
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
from crocodile.core import Struct
|
|
2
|
-
from crocodile.file_management import Read
|
|
3
1
|
from machineconfig.scripts.python.helpers.cloud_helpers import Args, ArgsDefaults, absolute, find_cloud_config, get_secure_share_cloud_config
|
|
4
2
|
from machineconfig.utils.utils import DEFAULTS_PATH
|
|
3
|
+
from machineconfig.utils.utils2 import read_ini, pprint
|
|
5
4
|
from typing import Optional
|
|
6
5
|
from rich.console import Console
|
|
7
6
|
from rich.panel import Panel
|
|
@@ -54,7 +53,7 @@ def parse_cloud_source_target(args: Args, source: str, target: str) -> tuple[str
|
|
|
54
53
|
maybe_config = tmp_maybe_config
|
|
55
54
|
|
|
56
55
|
if maybe_config is None:
|
|
57
|
-
default_cloud: str=
|
|
56
|
+
default_cloud: str=read_ini(DEFAULTS_PATH)['general']['rclone_config_name']
|
|
58
57
|
console.print(Panel(f"⚠️ No cloud config found. Using default cloud: {default_cloud}", width=150, border_style="yellow"))
|
|
59
58
|
source = default_cloud + ":" + source[1:]
|
|
60
59
|
else:
|
|
@@ -74,7 +73,7 @@ def parse_cloud_source_target(args: Args, source: str, target: str) -> tuple[str
|
|
|
74
73
|
maybe_config = find_cloud_config(path)
|
|
75
74
|
|
|
76
75
|
if maybe_config is None:
|
|
77
|
-
default_cloud =
|
|
76
|
+
default_cloud = read_ini(DEFAULTS_PATH)['general']['rclone_config_name']
|
|
78
77
|
console.print(Panel(f"⚠️ No cloud config found. Using default cloud: {default_cloud}", width=150, border_style="yellow"))
|
|
79
78
|
target = default_cloud + ":" + target[1:]
|
|
80
79
|
print("target mutated to:", target, f"because of default cloud being {default_cloud}")
|
|
@@ -97,7 +96,8 @@ def parse_cloud_source_target(args: Args, source: str, target: str) -> tuple[str
|
|
|
97
96
|
if len(source_parts) > 1 and source_parts[1] == ES: # the source path is to be inferred from target.
|
|
98
97
|
assert ES not in target, f"You can't use expand symbol `{ES}` in both source and target. Cyclical inference dependency arised."
|
|
99
98
|
target_obj = absolute(target)
|
|
100
|
-
|
|
99
|
+
from machineconfig.utils.path_reduced import P as PathExtended
|
|
100
|
+
remote_path = PathExtended(target_obj).get_remote_path(os_specific=os_specific, root=root, rel2home=rel2home, strict=False)
|
|
101
101
|
source = f"{cloud}:{remote_path.as_posix()}"
|
|
102
102
|
else: # source path is mentioned, target? maybe.
|
|
103
103
|
if target == ES: # target path is to be inferred from source.
|
|
@@ -115,7 +115,8 @@ def parse_cloud_source_target(args: Args, source: str, target: str) -> tuple[str
|
|
|
115
115
|
if len(target_parts) > 1 and target_parts[1] == ES: # the target path is to be inferred from source.
|
|
116
116
|
assert ES not in source, "You can't use $ in both source and target. Cyclical inference dependency arised."
|
|
117
117
|
source_obj = absolute(source)
|
|
118
|
-
|
|
118
|
+
from machineconfig.utils.path_reduced import P as PathExtended
|
|
119
|
+
remote_path = PathExtended(source_obj).get_remote_path(os_specific=os_specific, root=root, rel2home=rel2home, strict=False)
|
|
119
120
|
target = f"{cloud}:{remote_path.as_posix()}"
|
|
120
121
|
else: # target path is mentioned, source? maybe.
|
|
121
122
|
target = str(target)
|
|
@@ -130,6 +131,6 @@ def parse_cloud_source_target(args: Args, source: str, target: str) -> tuple[str
|
|
|
130
131
|
raise ValueError(f"Either source or target must be a remote path (i.e. machine:path)\nGot: source: `{source}`, target: `{target}`")
|
|
131
132
|
|
|
132
133
|
console.print(Panel("🔍 Path resolution complete", title="[bold blue]Resolution[/bold blue]", border_style="blue"))
|
|
133
|
-
|
|
134
|
+
pprint({"cloud": cloud, "source": str(source), "target": str(target)}, "CLI Resolution")
|
|
134
135
|
_ = pwd, encrypt, zip_arg, share
|
|
135
|
-
return cloud, str(source), str(target)
|
|
136
|
+
return cloud, str(source), str(target)
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
from typing import Any, Callable, Optional
|
|
3
3
|
import inspect
|
|
4
4
|
import os
|
|
5
|
-
import argparse
|
|
5
|
+
# import argparse
|
|
6
6
|
from crocodile.core import Display
|
|
7
|
-
from
|
|
8
|
-
from machineconfig.utils.utils import choose_ssh_host
|
|
7
|
+
from machineconfig.utils.path_reduced import P as PathExtended
|
|
8
|
+
# from machineconfig.utils.utils import choose_ssh_host
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
def search_for_files_of_interest(path_obj:
|
|
11
|
+
def search_for_files_of_interest(path_obj: PathExtended):
|
|
12
12
|
if path_obj.joinpath(".venv").exists():
|
|
13
13
|
path_objects = path_obj.search("*", not_in=[".venv"]).list
|
|
14
|
-
files: list[
|
|
14
|
+
files: list[PathExtended] = []
|
|
15
15
|
for a_path_obj in path_objects:
|
|
16
16
|
files += search_for_files_of_interest(path_obj=a_path_obj)
|
|
17
17
|
return files
|
|
@@ -28,19 +28,11 @@ def convert_kwargs_to_fire_kwargs_str(kwargs: dict[str, Any]) -> str:
|
|
|
28
28
|
if not kwargs: # empty dict
|
|
29
29
|
kwargs_str = ''
|
|
30
30
|
else:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
for k, v in kwargs.items():
|
|
37
|
-
if v is not None:
|
|
38
|
-
item = f'"{k}": "{v}"'
|
|
39
|
-
else:
|
|
40
|
-
item = f'"{k}": None'
|
|
41
|
-
tmp_list.append(item)
|
|
42
|
-
tmp__ = ", ".join(tmp_list)
|
|
43
|
-
kwargs_str = "'{" + tmp__ + "}'"
|
|
31
|
+
# For fire module, all keyword arguments should be passed as --key value pairs
|
|
32
|
+
tmp_list: list[str] = []
|
|
33
|
+
for k, v in kwargs.items():
|
|
34
|
+
tmp_list.append(f"--{k} {v}")
|
|
35
|
+
kwargs_str = " " + " ".join(tmp_list) + " "
|
|
44
36
|
return kwargs_str
|
|
45
37
|
|
|
46
38
|
|
|
@@ -51,7 +43,7 @@ def parse_pyfile(file_path: str):
|
|
|
51
43
|
func_args: list[list[args_spec]] = [[]] # this firt prepopulated dict is for the option 'RUN AS MAIN' which has no args
|
|
52
44
|
|
|
53
45
|
import ast
|
|
54
|
-
parsed_ast = ast.parse(
|
|
46
|
+
parsed_ast = ast.parse(PathExtended(file_path).read_text(encoding='utf-8'))
|
|
55
47
|
functions = [
|
|
56
48
|
node
|
|
57
49
|
for node in ast.walk(parsed_ast)
|
|
@@ -73,12 +65,8 @@ def parse_pyfile(file_path: str):
|
|
|
73
65
|
if arg.annotation is not None:
|
|
74
66
|
try: type_ = arg.annotation.__dict__['id']
|
|
75
67
|
except KeyError as ke:
|
|
76
|
-
# type_ = arg.annotation.__name__
|
|
77
|
-
# print(f"Failed to get type for {arg.annotation}. {ke}")
|
|
78
|
-
# Struct(get_attrs(arg.annotation)).print(as_yaml=True)
|
|
79
68
|
type_ = "Any" # e.g. a callable object
|
|
80
69
|
_ = ke
|
|
81
|
-
# raise ke
|
|
82
70
|
else: type_ = "Any"
|
|
83
71
|
default_tmp = function.args.defaults[idx] if idx < len(function.args.defaults) else None
|
|
84
72
|
if default_tmp is None: default = None
|
|
@@ -123,18 +111,18 @@ def get_attrs_recursively(obj: Any):
|
|
|
123
111
|
return obj
|
|
124
112
|
|
|
125
113
|
|
|
126
|
-
def run_on_remote(func_file: str, args: argparse.Namespace):
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
114
|
+
# def run_on_remote(func_file: str, args: argparse.Namespace):
|
|
115
|
+
# host = choose_ssh_host(multi=False)
|
|
116
|
+
# assert isinstance(host, str), f"host must be a string. Got {type(host)}"
|
|
117
|
+
# from machineconfig.cluster.remote_machine import RemoteMachine, RemoteMachineConfig
|
|
118
|
+
# config = RemoteMachineConfig(copy_repo=True, update_repo=False, update_essential_repos=True,
|
|
119
|
+
# notify_upon_completion=True, ssh_params=dict(host=host),
|
|
120
|
+
# # to_email=None, email_config_name='enaut',
|
|
121
|
+
# data=[],
|
|
122
|
+
# ipython=False, interactive=args.interactive, pdb=False, pudb=args.debug, wrap_in_try_except=False,
|
|
123
|
+
# transfer_method="sftp")
|
|
124
|
+
# m = RemoteMachine(func=func_file, func_kwargs=None, config=config)
|
|
125
|
+
# m.run()
|
|
138
126
|
|
|
139
127
|
|
|
140
128
|
def find_repo_root_path(start_path: str) -> Optional[str]:
|