machineconfig 6.82__py3-none-any.whl → 8.51__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.
- machineconfig/cluster/remote/cloud_manager.py +1 -1
- machineconfig/cluster/remote/run_cluster.py +1 -1
- machineconfig/cluster/remote/run_remote.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +29 -15
- machineconfig/cluster/sessions_managers/wt_local.py +17 -222
- machineconfig/cluster/sessions_managers/wt_local_manager.py +56 -194
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +4 -2
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
- machineconfig/jobs/installer/checks/check_installations.py +133 -0
- machineconfig/jobs/installer/checks/install_utils.py +132 -0
- machineconfig/jobs/installer/checks/report_utils.py +39 -0
- machineconfig/jobs/installer/checks/vt_utils.py +89 -0
- machineconfig/jobs/installer/installer_data.json +1500 -310
- machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +62 -91
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +2 -3
- machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
- machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +14 -9
- machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/python_scripts/hx.py +214 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +32 -26
- machineconfig/jobs/installer/python_scripts/sysabc.py +145 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
- machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
- machineconfig/jobs/installer/python_scripts/yazi.py +139 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
- machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
- machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
- machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
- machineconfig/jobs/scripts_dynamic/a.py +428 -0
- machineconfig/logger.py +1 -2
- machineconfig/profile/create_helper.py +56 -18
- machineconfig/profile/create_links.py +79 -21
- machineconfig/profile/create_links_export.py +87 -36
- machineconfig/profile/create_shell_profile.py +92 -127
- machineconfig/profile/mapper_data.toml +45 -0
- machineconfig/profile/mapper_dotfiles.toml +249 -0
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/wrap_mcfg +46 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +85 -165
- machineconfig/scripts/python/ai/initai.py +4 -2
- machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
- machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
- machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +8 -6
- machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
- machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
- machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +6 -6
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +33 -0
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
- machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
- machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
- machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
- machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +13 -5
- machineconfig/scripts/python/cloud.py +58 -11
- machineconfig/scripts/python/croshell.py +10 -162
- machineconfig/scripts/python/devops.py +73 -36
- machineconfig/scripts/python/devops_navigator.py +16 -6
- machineconfig/scripts/python/fire_jobs.py +8 -222
- machineconfig/scripts/python/ftpx.py +7 -200
- machineconfig/scripts/python/graph/cli_graph.json +8743 -0
- machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
- machineconfig/scripts/python/helpers/helper_env/env_manager_tui.py +204 -0
- machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_launch.py +38 -16
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_helper_types.py +11 -14
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +1 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +10 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/gemini/settings.json +12 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/privacy.py +109 -0
- machineconfig/scripts/python/helpers/helpers_agents/templates/prompt.txt +10 -0
- machineconfig/scripts/python/helpers/helpers_agents/templates/template.sh +34 -0
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +32 -25
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +29 -22
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +9 -8
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +3 -3
- machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +12 -12
- machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +262 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +67 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_nw.py +201 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_self.py +197 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_share_file.py +151 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_share_server.py +125 -0
- machineconfig/scripts/python/{helpers_devops/cli_terminal.py → helpers/helpers_devops/cli_share_terminal.py} +26 -22
- machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +17 -23
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
- machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +78 -71
- machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +4 -4
- machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers/helpers_fire_command/file_wrangler.py} +57 -20
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +1 -0
- machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +26 -16
- machineconfig/scripts/python/helpers/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
- machineconfig/scripts/{linux → python/helpers/helpers_msearch/scripts_linux}/fzfg +6 -5
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
- machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
- machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
- machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
- machineconfig/scripts/python/helpers/helpers_network/address.py +174 -0
- machineconfig/scripts/python/helpers/helpers_network/address_switch.py +78 -0
- machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
- machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nfs.py +2 -2
- machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_ssh.py +3 -3
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
- machineconfig/scripts/python/{nw → helpers/helpers_network}/wifi_conn.py +1 -53
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -1
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +159 -48
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +4 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -12
- machineconfig/scripts/python/helpers/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/{helpers_repos/count_lines.py → helpers/helpers_repos/repo_analyzer_2.py} +156 -191
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
- machineconfig/scripts/python/helpers/helpers_search/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/helpers_search/qr_code.py +166 -0
- machineconfig/scripts/python/helpers/helpers_search/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
- machineconfig/scripts/python/helpers/helpers_search/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
- machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +20 -14
- machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
- machineconfig/scripts/python/helpers/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers/helpers_utils/pdf.py +96 -0
- machineconfig/scripts/python/helpers/helpers_utils/python.py +210 -0
- machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
- machineconfig/scripts/python/mcfg_entry.py +143 -0
- machineconfig/scripts/python/msearch.py +26 -0
- machineconfig/scripts/python/sessions.py +69 -135
- machineconfig/scripts/python/terminal.py +58 -0
- machineconfig/scripts/python/utils.py +115 -38
- machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
- machineconfig/settings/atuin/config.toml +294 -0
- machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +14 -16
- machineconfig/settings/linters/.ruff.toml +2 -1
- machineconfig/settings/marimo/marimo.toml +1 -1
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
- machineconfig/settings/shells/bash/init.sh +47 -12
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +25 -33
- machineconfig/settings/shells/nushell/env.nu +21 -8
- machineconfig/settings/shells/nushell/init.nu +138 -0
- machineconfig/settings/shells/pwsh/init.ps1 +111 -17
- machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +6 -1
- machineconfig/settings/shells/wt/settings.json +27 -18
- machineconfig/settings/shells/zsh/init.sh +42 -23
- machineconfig/settings/television/cable_unix/alias.toml +8 -0
- machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
- machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
- machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
- machineconfig/settings/television/cable_unix/channels.toml +19 -0
- machineconfig/settings/television/cable_unix/dirs.toml +13 -0
- machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
- machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
- machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_unix/env.toml +17 -0
- machineconfig/settings/television/cable_unix/files.toml +11 -0
- machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
- machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
- machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
- machineconfig/settings/television/cable_unix/git-log.toml +12 -0
- machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
- machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
- machineconfig/settings/television/cable_unix/guix.toml +20 -0
- machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
- machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
- machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
- machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
- machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
- machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
- machineconfig/settings/television/cable_unix/procs.toml +20 -0
- machineconfig/settings/television/cable_unix/text.toml +17 -0
- machineconfig/settings/television/cable_unix/tldr.toml +18 -0
- machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
- machineconfig/settings/television/cable_windows/alias.toml +7 -0
- machineconfig/settings/television/cable_windows/dirs.toml +13 -0
- machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
- machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_windows/env.toml +17 -0
- machineconfig/settings/television/cable_windows/files.toml +14 -0
- machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
- machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
- machineconfig/settings/television/cable_windows/git-log.toml +11 -0
- machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
- machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
- machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
- machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
- machineconfig/settings/television/cable_windows/text.toml +17 -0
- machineconfig/settings/tv/config.toml +234 -0
- machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
- machineconfig/settings/wsl/.wslconfig +5 -30
- machineconfig/settings/wt/__init__.py +0 -0
- machineconfig/settings/yazi/init.lua +61 -0
- machineconfig/settings/yazi/keymap_linux.toml +94 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/theme.toml +4 -0
- machineconfig/settings/yazi/yazi_linux.toml +94 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/settings/zellij/layouts/st.kdl +40 -9
- machineconfig/settings/zellij/layouts/st2.kdl +1 -1
- machineconfig/setup_linux/__init__.py +2 -2
- machineconfig/setup_linux/apps_desktop.sh +8 -27
- machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -12
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +34 -0
- machineconfig/setup_mac/__init__.py +1 -4
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_windows/__init__.py +2 -5
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -12
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +31 -0
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/type_hinting/sql/__init__.py +1 -0
- machineconfig/type_hinting/sql/base.py +216 -0
- machineconfig/type_hinting/sql/core_schema.py +64 -0
- machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
- machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
- machineconfig/type_hinting/typedict/__init__.py +1 -0
- machineconfig/type_hinting/typedict/ast_utils.py +130 -0
- machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
- machineconfig/type_hinting/typedict/generators.py +231 -0
- machineconfig/type_hinting/typedict/polars_schema.py +24 -0
- machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
- machineconfig/utils/accessories.py +31 -4
- machineconfig/utils/code.py +163 -51
- machineconfig/utils/files/ascii_art.py +11 -15
- machineconfig/utils/files/headers.py +6 -7
- machineconfig/utils/files/read.py +8 -1
- machineconfig/utils/installer_utils/github_release_bulk.py +95 -138
- machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +53 -102
- machineconfig/utils/installer_utils/installer_cli.py +161 -0
- machineconfig/utils/installer_utils/installer_helper.py +129 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +42 -91
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +20 -65
- machineconfig/utils/io.py +94 -9
- machineconfig/utils/links.py +56 -38
- machineconfig/utils/meta.py +38 -21
- machineconfig/utils/options.py +81 -23
- machineconfig/utils/options_utils/__init__.py +0 -0
- machineconfig/utils/options_utils/options_tv_linux.py +211 -0
- machineconfig/utils/options_utils/options_tv_windows.py +88 -0
- machineconfig/utils/options_utils/tv_options.py +37 -0
- machineconfig/utils/path_extended.py +52 -102
- machineconfig/utils/path_helper.py +76 -23
- machineconfig/utils/procs.py +1 -1
- machineconfig/utils/scheduler.py +26 -53
- machineconfig/utils/scheduling.py +0 -2
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/schemas/layouts/layout_types.py +1 -1
- machineconfig/utils/source_of_truth.py +6 -1
- machineconfig/utils/ssh.py +216 -419
- machineconfig/utils/ssh_utils/abc.py +5 -0
- machineconfig/utils/ssh_utils/copy_from_here.py +116 -0
- machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
- machineconfig/utils/ssh_utils/utils.py +158 -0
- machineconfig/utils/ssh_utils/wsl.py +147 -0
- machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
- machineconfig/utils/terminal.py +1 -0
- machineconfig/utils/upgrade_packages.py +107 -35
- machineconfig/utils/ve.py +12 -4
- machineconfig-8.51.dist-info/METADATA +140 -0
- machineconfig-8.51.dist-info/RECORD +543 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/entry_points.txt +4 -1
- machineconfig/jobs/installer/check_installations.py +0 -248
- machineconfig/jobs/installer/custom/hx.py +0 -140
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
- machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
- machineconfig/jobs/installer/powershell_scripts/openssh-server_add_key.ps1 +0 -7
- machineconfig/jobs/installer/powershell_scripts/openssh-server_copy-ssh-id.ps1 +0 -14
- machineconfig/profile/backup.toml +0 -49
- machineconfig/profile/mapper.toml +0 -256
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzfag +0 -17
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/fzfrga +0 -21
- machineconfig/scripts/linux/mcfgs +0 -38
- machineconfig/scripts/linux/other/share_smb +0 -1
- machineconfig/scripts/linux/other/switch_ip +0 -20
- machineconfig/scripts/linux/skrg +0 -4
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
- machineconfig/scripts/python/helpers_devops/cli_config.py +0 -120
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -77
- machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
- machineconfig/scripts/python/helpers_devops/cli_nw.py +0 -73
- machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -181
- machineconfig/scripts/python/helpers_devops/cli_self.py +0 -122
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +0 -104
- machineconfig/scripts/python/helpers_devops/cli_utils.py +0 -221
- machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
- machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
- machineconfig/scripts/python/helpers_fire/template.sh +0 -15
- machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
- machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
- machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -588
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
- machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -76
- machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
- machineconfig/scripts/python/mcfg.py +0 -48
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/python/nw/devops_add_identity.py +0 -82
- machineconfig/scripts/python/nw/devops_add_ssh_key.py +0 -134
- machineconfig/scripts/python/nw/ssh_debug_linux.py +0 -391
- machineconfig/scripts/python/nw/ssh_debug_windows.py +0 -338
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
- machineconfig/scripts/windows/fzfb.ps1 +0 -3
- machineconfig/scripts/windows/fzfg.ps1 +0 -2
- machineconfig/scripts/windows/fzfrga.bat +0 -20
- machineconfig/scripts/windows/mcfgs.ps1 +0 -17
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
- machineconfig/settings/lf/windows/tst.ps1 +0 -1
- machineconfig/settings/yazi/yazi.toml +0 -4
- machineconfig/setup_linux/apps.sh +0 -66
- machineconfig/setup_linux/others/cli_installation.sh +0 -137
- machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -30
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_mac/apps.sh +0 -73
- machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/setup_windows/others/obs.ps1 +0 -4
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
- machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
- machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
- machineconfig/utils/installer_utils/installer.py +0 -225
- machineconfig/utils/tst.py +0 -20
- machineconfig-6.82.dist-info/METADATA +0 -82
- machineconfig-6.82.dist-info/RECORD +0 -441
- machineconfig/jobs/installer/{custom_dev → checks}/__init__.py +0 -0
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- machineconfig/{scripts/python/helpers_cloud → jobs/installer/python_scripts}/__init__.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
- machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
- machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/android.sh +0 -0
- machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
- machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
- machineconfig/scripts/python/{helpers_croshell → ai/utils}/__init__.py +0 -0
- machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
- machineconfig/scripts/python/{helpers_devops → graph}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_devops/themes → helpers}/__init__.py +0 -0
- machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
- machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents/templates}/template.ps1 +0 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_devops}/__init__.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers/helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
- /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command/fire_jobs_streamlit_helper.py → helpers/helpers_fire_command/f.py} +0 -0
- /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers/helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
- /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers/helpers_network/__init__.py} +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/WHEEL +0 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/top_level.txt +0 -0
|
@@ -1,220 +1,9 @@
|
|
|
1
|
-
"""
|
|
2
|
-
fire
|
|
1
|
+
"""fire - Fire and manage jobs."""
|
|
3
2
|
|
|
4
|
-
# https://github.com/pallets/click combine with fire. Consider
|
|
5
|
-
# https://github.com/ceccopierangiolieugenio/pyTermTk for choose_from_options build TUI
|
|
6
|
-
# https://github.com/chriskiehl/Gooey build commandline interface
|
|
7
|
-
|
|
8
|
-
"""
|
|
9
|
-
|
|
10
|
-
from machineconfig.utils.ve import get_ve_activate_line, get_ve_path_and_ipython_profile
|
|
11
|
-
from machineconfig.utils.options import choose_from_options
|
|
12
|
-
from machineconfig.utils.path_helper import match_file_name, sanitize_path
|
|
13
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
14
|
-
from machineconfig.utils.accessories import get_repo_root, randstr
|
|
15
|
-
from machineconfig.scripts.python.helpers_fire_command.fire_jobs_args_helper import FireJobArgs, extract_kwargs, parse_fire_args_from_context
|
|
16
|
-
|
|
17
|
-
import platform
|
|
18
3
|
from typing import Optional, Annotated
|
|
19
|
-
from pathlib import Path
|
|
20
4
|
import typer
|
|
21
5
|
|
|
22
6
|
|
|
23
|
-
def route(args: FireJobArgs, fire_args: str = "") -> None:
|
|
24
|
-
path_obj = sanitize_path(args.path)
|
|
25
|
-
if not path_obj.exists():
|
|
26
|
-
suffixes = {".py", ".sh", ".ps1"}
|
|
27
|
-
choice_file = match_file_name(sub_string=args.path, search_root=PathExtended.cwd(), suffixes=suffixes)
|
|
28
|
-
elif path_obj.is_dir():
|
|
29
|
-
from machineconfig.scripts.python.helpers_fire.helpers4 import search_for_files_of_interest
|
|
30
|
-
print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
|
|
31
|
-
files = search_for_files_of_interest(path_obj)
|
|
32
|
-
print(f"🔍 Got #{len(files)} results.")
|
|
33
|
-
choice_file = choose_from_options(multi=False, options=files, fzf=True, msg="Choose one option")
|
|
34
|
-
choice_file = PathExtended(choice_file)
|
|
35
|
-
else:
|
|
36
|
-
choice_file = path_obj
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
repo_root = get_repo_root(Path(choice_file))
|
|
40
|
-
print(f"💾 Selected file: {choice_file}.\nRepo root: {repo_root}")
|
|
41
|
-
ve_root_from_file, ipy_profile = get_ve_path_and_ipython_profile(choice_file)
|
|
42
|
-
if ipy_profile is None:
|
|
43
|
-
ipy_profile = "default"
|
|
44
|
-
|
|
45
|
-
if args.marimo:
|
|
46
|
-
tmp_dir = PathExtended.tmp().joinpath(f"tmp_scripts/marimo/{choice_file.stem}_{randstr()}")
|
|
47
|
-
tmp_dir.mkdir(parents=True, exist_ok=True)
|
|
48
|
-
script = f"""
|
|
49
|
-
cd {tmp_dir}
|
|
50
|
-
uv run --python 3.14 --with marimo marimo convert {choice_file} -o marimo_nb.py
|
|
51
|
-
uv run --project {repo_root} --with marimo marimo edit --host 0.0.0.0 marimo_nb.py
|
|
52
|
-
"""
|
|
53
|
-
from machineconfig.utils.code import exit_then_run_shell_script
|
|
54
|
-
print(f"🚀 Launching Marimo notebook for `{choice_file}`...")
|
|
55
|
-
exit_then_run_shell_script(script)
|
|
56
|
-
return
|
|
57
|
-
|
|
58
|
-
# ========================= preparing kwargs_dict
|
|
59
|
-
if choice_file.suffix == ".py":
|
|
60
|
-
kwargs_dict = extract_kwargs(args) # This now returns empty dict, but kept for compatibility
|
|
61
|
-
ve_root = args.ve or ve_root_from_file
|
|
62
|
-
if ve_root is None:
|
|
63
|
-
raise ValueError(f"Could not determine virtual environment for file {choice_file}. Please ensure it is within a recognized project structure or specify the `--ve` option.")
|
|
64
|
-
activate_ve_line = get_ve_activate_line(ve_root=ve_root)
|
|
65
|
-
else:
|
|
66
|
-
activate_ve_line = ""
|
|
67
|
-
kwargs_dict = {}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
# ========================= choosing function to run
|
|
71
|
-
choice_function: Optional[str] = None # Initialize to avoid unbound variable
|
|
72
|
-
if args.choose_function:
|
|
73
|
-
from machineconfig.scripts.python.helpers_fire_command.fire_jobs_route_helper import choose_function_or_lines
|
|
74
|
-
choice_function, choice_file, kwargs_dict = choose_function_or_lines(choice_file, kwargs_dict)
|
|
75
|
-
else:
|
|
76
|
-
choice_function = args.function
|
|
77
|
-
|
|
78
|
-
if choice_file.suffix == ".py":
|
|
79
|
-
from machineconfig.scripts.python.helpers_fire_command.fire_jobs_route_helper import get_command_streamlit
|
|
80
|
-
if args.streamlit: exe = get_command_streamlit(choice_file, args.environment, repo_root)
|
|
81
|
-
elif args.interactive is False: exe = "python"
|
|
82
|
-
elif args.jupyter: exe = "jupyter-lab"
|
|
83
|
-
else: exe = f"ipython -i --no-banner --profile {ipy_profile} "
|
|
84
|
-
elif choice_file.suffix == ".ps1" or choice_file.suffix == ".sh": exe = "."
|
|
85
|
-
elif choice_file.suffix == "": exe = ""
|
|
86
|
-
else: raise NotImplementedError(f"File type {choice_file.suffix} not supported, in the sense that I don't know how to fire it.")
|
|
87
|
-
|
|
88
|
-
if args.module or (args.debug and args.choose_function): # because debugging tools do not support choosing functions and don't interplay with fire module. So the only way to have debugging and choose function options is to import the file as a module into a new script and run the function of interest there and debug the new script.
|
|
89
|
-
assert choice_file.suffix == ".py", f"File must be a python file to be imported as a module. Got {choice_file}"
|
|
90
|
-
from machineconfig.scripts.python.helpers_fire.helpers4 import get_import_module_code
|
|
91
|
-
import_line = get_import_module_code(str(choice_file))
|
|
92
|
-
if repo_root is not None:
|
|
93
|
-
repo_root_add = f"""sys.path.append(r'{repo_root}')"""
|
|
94
|
-
else:
|
|
95
|
-
repo_root_add = ""
|
|
96
|
-
txt: str = f"""
|
|
97
|
-
try:
|
|
98
|
-
{import_line}
|
|
99
|
-
except (ImportError, ModuleNotFoundError) as ex:
|
|
100
|
-
print(fr"❌ Failed to import `{choice_file}` as a module: {{ex}} ")
|
|
101
|
-
print(fr"⚠️ Attempting import with ad-hoc `$PATH` manipulation. DO NOT pickle any objects in this session as correct deserialization cannot be guaranteed.")
|
|
102
|
-
import sys
|
|
103
|
-
sys.path.append(r'{PathExtended(choice_file).parent}')
|
|
104
|
-
{repo_root_add}
|
|
105
|
-
from {PathExtended(choice_file).stem} import *
|
|
106
|
-
print(fr"✅ Successfully imported `{choice_file}`")
|
|
107
|
-
"""
|
|
108
|
-
if choice_function is not None:
|
|
109
|
-
txt = (
|
|
110
|
-
txt
|
|
111
|
-
+ f"""
|
|
112
|
-
res = {choice_function}({("**" + str(kwargs_dict)) if kwargs_dict else ""})
|
|
113
|
-
"""
|
|
114
|
-
)
|
|
115
|
-
|
|
116
|
-
txt = (
|
|
117
|
-
f"""
|
|
118
|
-
try:
|
|
119
|
-
from rich.panel import Panel
|
|
120
|
-
from rich.console import Console
|
|
121
|
-
from rich.syntax import Syntax
|
|
122
|
-
console = Console()
|
|
123
|
-
console.print(Panel(Syntax(code=r'''{txt}''', lexer='python'), title='Import Script'), style="bold red")
|
|
124
|
-
except ImportError as _ex:
|
|
125
|
-
print(r'''{txt}''')
|
|
126
|
-
"""
|
|
127
|
-
+ txt
|
|
128
|
-
)
|
|
129
|
-
choice_file = PathExtended.tmp().joinpath(f"tmp_scripts/python/{PathExtended(choice_file).parent.name}_{PathExtended(choice_file).stem}_{randstr()}.py")
|
|
130
|
-
choice_file.parent.mkdir(parents=True, exist_ok=True)
|
|
131
|
-
choice_file.write_text(txt, encoding="utf-8")
|
|
132
|
-
|
|
133
|
-
# ========================= determining basic command structure: putting together exe & choice_file & choice_function & pdb
|
|
134
|
-
if args.debug:
|
|
135
|
-
if platform.system() == "Windows":
|
|
136
|
-
command = f"{exe} -m ipdb {choice_file} " # pudb is not available on windows machines, use poor man's debugger instead.
|
|
137
|
-
elif platform.system() in ["Linux", "Darwin"]:
|
|
138
|
-
command = f"{exe} -m pudb {choice_file} " # TODO: functions not supported yet in debug mode.
|
|
139
|
-
else:
|
|
140
|
-
raise NotImplementedError(f"Platform {platform.system()} not supported.")
|
|
141
|
-
elif args.module:
|
|
142
|
-
# both selected function and kwargs are mentioned in the made up script, therefore no need for fire module.
|
|
143
|
-
command = f"{exe} {choice_file} "
|
|
144
|
-
elif choice_function is not None and choice_file.suffix == ".py":
|
|
145
|
-
command = f"{exe} -m fire {choice_file} {choice_function} {fire_args}"
|
|
146
|
-
elif args.streamlit:
|
|
147
|
-
# for .streamlit config to work, it needs to be in the current directory.
|
|
148
|
-
if args.holdDirectory:
|
|
149
|
-
command = f"{exe} {choice_file}"
|
|
150
|
-
else:
|
|
151
|
-
command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {PathExtended.cwd()}"
|
|
152
|
-
|
|
153
|
-
elif args.cmd:
|
|
154
|
-
command = rf""" cd /d {choice_file.parent} & {exe} {choice_file.name} """
|
|
155
|
-
else:
|
|
156
|
-
if choice_file.suffix == "": command = f"{exe} {choice_file} {fire_args}"
|
|
157
|
-
else: command = f"{exe} {choice_file} "
|
|
158
|
-
|
|
159
|
-
if not args.cmd: command = f"{activate_ve_line}\n{command}"
|
|
160
|
-
else:
|
|
161
|
-
new_line = "\n"
|
|
162
|
-
command = rf"""start cmd -Argument "/k {activate_ve_line.replace(".ps1", ".bat").replace(". ", "")} & {command.replace(new_line, " & ")} " """ # this works from powershell
|
|
163
|
-
if args.submit_to_cloud:
|
|
164
|
-
command = f"""
|
|
165
|
-
{activate_ve_line}
|
|
166
|
-
python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
|
|
167
|
-
if choice_function is not None:
|
|
168
|
-
command += f"--function {choice_function} "
|
|
169
|
-
|
|
170
|
-
if args.optimized:
|
|
171
|
-
command = command.replace("python ", "python -OO ")
|
|
172
|
-
from rich.panel import Panel
|
|
173
|
-
from rich.console import Console
|
|
174
|
-
from rich.syntax import Syntax
|
|
175
|
-
console = Console()
|
|
176
|
-
if args.zellij_tab is not None:
|
|
177
|
-
comman_path__ = PathExtended.tmpfile(suffix=".sh")
|
|
178
|
-
comman_path__.parent.mkdir(parents=True, exist_ok=True)
|
|
179
|
-
comman_path__.write_text(command, encoding="utf-8")
|
|
180
|
-
console.print(Panel(Syntax(command, lexer="shell"), title=f"🔥 fire command @ {comman_path__}: "), style="bold red")
|
|
181
|
-
import subprocess
|
|
182
|
-
existing_tab_names = subprocess.run(["zellij", "action", "query-tab-names"], capture_output=True, text=True, check=True).stdout.splitlines()
|
|
183
|
-
if args.zellij_tab in existing_tab_names:
|
|
184
|
-
print(f"⚠️ Tab name `{args.zellij_tab}` already exists. Please choose a different name.")
|
|
185
|
-
args.zellij_tab += f"_{randstr(3)}"
|
|
186
|
-
from machineconfig.cluster.sessions_managers.zellij_local import run_command_in_zellij_tab
|
|
187
|
-
command = run_command_in_zellij_tab(command=str(comman_path__), tab_name=args.zellij_tab, cwd=None)
|
|
188
|
-
if args.watch:
|
|
189
|
-
command = "watchexec --restart --exts py,sh,ps1 " + command
|
|
190
|
-
if args.git_pull:
|
|
191
|
-
command = f"\ngit -C {choice_file.parent} pull\n" + command
|
|
192
|
-
if args.PathExport:
|
|
193
|
-
if platform.system() in ["Linux", "Darwin"]:
|
|
194
|
-
export_line = f"""export PYTHONPATH="{repo_root}""" + """:${PYTHONPATH}" """
|
|
195
|
-
elif platform.system() == "Windows":
|
|
196
|
-
export_line = f"""$env:PYTHONPATH="{repo_root}""" + """:$env:PYTHONPATH" """
|
|
197
|
-
else:
|
|
198
|
-
raise NotImplementedError(f"Platform {platform.system()} not supported.")
|
|
199
|
-
command = export_line + "\n" + command
|
|
200
|
-
if args.loop:
|
|
201
|
-
if platform.system() in ["Linux", "Darwin"]:
|
|
202
|
-
command = command + "\nsleep 0.5"
|
|
203
|
-
elif platform.system() == "Windows":
|
|
204
|
-
command = "$ErrorActionPreference = 'SilentlyContinue';\n" + command + "\nStart-Sleep -Seconds 0.5"
|
|
205
|
-
else:
|
|
206
|
-
raise NotImplementedError(f"Platform {platform.system()} not supported.")
|
|
207
|
-
import os
|
|
208
|
-
op_program_path = os.environ.get("OP_PROGRAM_PATH", None)
|
|
209
|
-
if op_program_path is not None:
|
|
210
|
-
op_program_path = PathExtended(op_program_path)
|
|
211
|
-
op_program_path.parent.mkdir(parents=True, exist_ok=True)
|
|
212
|
-
op_program_path.write_text(command, encoding="utf-8")
|
|
213
|
-
else:
|
|
214
|
-
from machineconfig.utils.code import run_shell_script
|
|
215
|
-
run_shell_script(command)
|
|
216
|
-
|
|
217
|
-
|
|
218
7
|
def fire(
|
|
219
8
|
ctx: typer.Context,
|
|
220
9
|
path: Annotated[str, typer.Argument(help="Path to the Python file to run")] = ".",
|
|
@@ -228,23 +17,22 @@ def fire(
|
|
|
228
17
|
jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="Open in a jupyter notebook")] = False,
|
|
229
18
|
marimo: Annotated[bool, typer.Option("--marimo", "-M", help="Open in a marimo notebook")] = False,
|
|
230
19
|
module: Annotated[bool, typer.Option("--module", "-m", help="Launch the main file")] = False,
|
|
20
|
+
script: Annotated[bool, typer.Option("--script", "-s", help="Launch as a script without fire")] = False,
|
|
231
21
|
optimized: Annotated[bool, typer.Option("--optimized", "-O", help="Run the optimized version of the function")] = False,
|
|
232
22
|
zellij_tab: Annotated[Optional[str], typer.Option("--zellij-tab", "-z", help="Open in a new zellij tab")] = None,
|
|
233
|
-
|
|
234
23
|
submit_to_cloud: Annotated[bool, typer.Option("--submit-to-cloud", "-C", help="Submit to cloud compute")] = False,
|
|
235
24
|
remote: Annotated[bool, typer.Option("--remote", "-r", help="Launch on a remote machine")] = False,
|
|
236
|
-
|
|
237
25
|
streamlit: Annotated[bool, typer.Option("--streamlit", "-S", help="Run as streamlit app")] = False,
|
|
238
26
|
environment: Annotated[str, typer.Option("--environment", "-E", help="Choose ip, localhost, hostname or arbitrary url")] = "",
|
|
239
27
|
holdDirectory: Annotated[bool, typer.Option("--holdDirectory", "-D", help="Hold current directory and avoid cd'ing to the script directory")] = False,
|
|
240
28
|
PathExport: Annotated[bool, typer.Option("--PathExport", "-P", help="Augment the PYTHONPATH with repo root")] = False,
|
|
241
|
-
|
|
242
29
|
git_pull: Annotated[bool, typer.Option("--git-pull", "-g", help="Start by pulling the git repo")] = False,
|
|
243
30
|
watch: Annotated[bool, typer.Option("--watch", "-w", help="Watch the file for changes")] = False,
|
|
244
31
|
) -> None:
|
|
245
32
|
"""Main function to process fire jobs arguments."""
|
|
33
|
+
from machineconfig.scripts.python.helpers.helpers_fire_command.fire_jobs_args_helper import FireJobArgs, parse_fire_args_from_context
|
|
34
|
+
from machineconfig.scripts.python.helpers.helpers_fire_command.fire_jobs_impl import route
|
|
246
35
|
|
|
247
|
-
# Get Fire arguments from context
|
|
248
36
|
fire_args = parse_fire_args_from_context(ctx)
|
|
249
37
|
|
|
250
38
|
args = FireJobArgs(
|
|
@@ -261,6 +49,7 @@ def fire(
|
|
|
261
49
|
submit_to_cloud=submit_to_cloud,
|
|
262
50
|
remote=remote,
|
|
263
51
|
module=module,
|
|
52
|
+
script=script,
|
|
264
53
|
streamlit=streamlit,
|
|
265
54
|
environment=environment,
|
|
266
55
|
holdDirectory=holdDirectory,
|
|
@@ -273,23 +62,20 @@ def fire(
|
|
|
273
62
|
try:
|
|
274
63
|
route(args, fire_args)
|
|
275
64
|
except SystemExit:
|
|
276
|
-
# Re-raise SystemExit to preserve exit codes and allow clean exits
|
|
277
65
|
raise
|
|
278
66
|
except Exception as e:
|
|
279
|
-
# For other exceptions, print clean error message and exit
|
|
280
67
|
import sys
|
|
281
68
|
print(f"❌ Error: {e}", file=sys.stderr)
|
|
282
69
|
sys.exit(1)
|
|
283
70
|
|
|
284
71
|
|
|
285
|
-
def get_app():
|
|
286
|
-
|
|
287
|
-
app = Typer(add_completion=False)
|
|
72
|
+
def get_app() -> typer.Typer:
|
|
73
|
+
app = typer.Typer(add_completion=False)
|
|
288
74
|
app.command(context_settings={"allow_extra_args": True, "allow_interspersed_args": False})(fire)
|
|
289
75
|
return app
|
|
290
76
|
|
|
291
77
|
|
|
292
|
-
def main():
|
|
78
|
+
def main() -> None:
|
|
293
79
|
app = get_app()
|
|
294
80
|
app()
|
|
295
81
|
|
|
@@ -1,22 +1,7 @@
|
|
|
1
|
-
"""
|
|
2
|
-
|
|
3
|
-
TODO: add support for cases in which source or target has non 22 default port number and is defineda as user@host:port:path which makes 2 colons in the string.
|
|
4
|
-
Currently, the only way to work around this is to predifine the host in ~/.ssh/config and use the alias in the source or target which is inconvenient when dealing with newly setup machines.
|
|
5
|
-
|
|
6
|
-
"""
|
|
1
|
+
"""ftpx - File transfer utility through SSH."""
|
|
7
2
|
|
|
8
3
|
import typer
|
|
9
|
-
from
|
|
10
|
-
from rich.console import Console
|
|
11
|
-
from rich.panel import Panel
|
|
12
|
-
|
|
13
|
-
from machineconfig.utils.ssh import SSH
|
|
14
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
15
|
-
from machineconfig.scripts.python.helpers_cloud.helpers2 import ES
|
|
16
|
-
from machineconfig.utils.accessories import pprint
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
console = Console()
|
|
4
|
+
from typing import Annotated
|
|
20
5
|
|
|
21
6
|
|
|
22
7
|
def ftpx(
|
|
@@ -25,195 +10,17 @@ def ftpx(
|
|
|
25
10
|
recursive: Annotated[bool, typer.Option("--recursive", "-r", help="Send recursively.")] = False,
|
|
26
11
|
zipFirst: Annotated[bool, typer.Option("--zipFirst", "-z", help="Zip before sending.")] = False,
|
|
27
12
|
cloud: Annotated[bool, typer.Option("--cloud", "-c", help="Transfer through the cloud.")] = False,
|
|
13
|
+
overwrite_existing: Annotated[bool, typer.Option("--overwrite-existing", "-o", help="Overwrite existing files on remote when sending from local to remote.")] = False,
|
|
28
14
|
) -> None:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
[
|
|
33
|
-
"🚀 FTP File Transfer",
|
|
34
|
-
"📋 Starting transfer process...",
|
|
35
|
-
]
|
|
36
|
-
),
|
|
37
|
-
title="Transfer Initialisation",
|
|
38
|
-
border_style="blue",
|
|
39
|
-
padding=(1, 2),
|
|
40
|
-
)
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
# Initialize variables
|
|
44
|
-
resolved_source: str | None = None
|
|
45
|
-
resolved_target: str | None = None
|
|
46
|
-
machine: str = ""
|
|
47
|
-
|
|
48
|
-
if ":" in source and (source[1] != ":" if len(source) > 1 else True): # avoid the case of "C:/":
|
|
49
|
-
source_is_remote = True
|
|
50
|
-
|
|
51
|
-
# calculating source:
|
|
52
|
-
source_parts = source.split(":")
|
|
53
|
-
machine = source_parts[0]
|
|
54
|
-
if len(source_parts) > 1 and source_parts[1] == ES: # the source path is to be inferred from target.
|
|
55
|
-
if target == ES:
|
|
56
|
-
raise ValueError(f"""
|
|
57
|
-
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
58
|
-
┃ ❌ Configuration Error
|
|
59
|
-
┃ Cannot use expand symbol `{ES}` in both source and target
|
|
60
|
-
┃ This creates a cyclical inference dependency
|
|
61
|
-
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
|
|
62
|
-
else:
|
|
63
|
-
target_path_obj = PathExtended(target).expanduser().absolute()
|
|
64
|
-
resolved_source = target_path_obj.collapseuser().as_posix()
|
|
65
|
-
resolved_target = target
|
|
66
|
-
else:
|
|
67
|
-
resolved_source = ":".join(source.split(":")[1:])
|
|
68
|
-
if target == ES:
|
|
69
|
-
resolved_target = None
|
|
70
|
-
else:
|
|
71
|
-
resolved_target = PathExtended(target).expanduser().absolute().as_posix()
|
|
72
|
-
|
|
73
|
-
elif ":" in target and (target[1] != ":" if len(target) > 1 else True): # avoid the case of "C:/":
|
|
74
|
-
source_is_remote = False
|
|
75
|
-
target_parts = target.split(":")
|
|
76
|
-
machine = target_parts[0]
|
|
77
|
-
if len(target_parts) > 1 and target_parts[1] == ES:
|
|
78
|
-
if source == ES:
|
|
79
|
-
raise ValueError(f"""
|
|
80
|
-
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
81
|
-
┃ ❌ Configuration Error
|
|
82
|
-
┃ Cannot use expand symbol `{ES}` in both source and target
|
|
83
|
-
┃ This creates a cyclical inference dependency
|
|
84
|
-
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
|
|
85
|
-
else:
|
|
86
|
-
resolved_source = source
|
|
87
|
-
resolved_target = None
|
|
88
|
-
else:
|
|
89
|
-
resolved_target = ":".join(target.split(":")[1:])
|
|
90
|
-
if source == ES:
|
|
91
|
-
resolved_source = None
|
|
92
|
-
else:
|
|
93
|
-
resolved_source = PathExtended(source).expanduser().absolute().as_posix()
|
|
94
|
-
|
|
95
|
-
else:
|
|
96
|
-
raise ValueError("""
|
|
97
|
-
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
98
|
-
┃ ❌ Path Error
|
|
99
|
-
┃ Either source or target must be a remote path
|
|
100
|
-
┃ Format should be: machine:path
|
|
101
|
-
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
|
|
102
|
-
|
|
103
|
-
pprint({"source": str(resolved_source), "target": str(resolved_target), "machine": machine}, "CLI Resolution")
|
|
104
|
-
|
|
105
|
-
from paramiko.ssh_exception import AuthenticationException # type: ignore
|
|
106
|
-
|
|
107
|
-
try:
|
|
108
|
-
ssh = SSH(host=rf"{machine}", username=None, hostname=None, ssh_key_path=None, password=None, port=22, enable_compression=True)
|
|
109
|
-
except AuthenticationException:
|
|
110
|
-
console.print(
|
|
111
|
-
Panel(
|
|
112
|
-
"\n".join(
|
|
113
|
-
[
|
|
114
|
-
"🔑 Authentication failed. Trying manual authentication...",
|
|
115
|
-
"⚠️ Ensure that the username is provided correctly; only password prompts are handled here.",
|
|
116
|
-
]
|
|
117
|
-
),
|
|
118
|
-
title="Authentication Required",
|
|
119
|
-
border_style="yellow",
|
|
120
|
-
padding=(1, 2),
|
|
121
|
-
)
|
|
122
|
-
)
|
|
123
|
-
import getpass
|
|
124
|
-
|
|
125
|
-
pwd = getpass.getpass()
|
|
126
|
-
ssh = SSH(host=rf"{machine}", username=None, hostname=None, ssh_key_path=None, password=pwd, port=22, enable_compression=True)
|
|
127
|
-
|
|
128
|
-
if cloud:
|
|
129
|
-
console.print(
|
|
130
|
-
Panel.fit(
|
|
131
|
-
"☁️ Cloud transfer mode — uploading from remote to cloud...",
|
|
132
|
-
title="Cloud Upload",
|
|
133
|
-
border_style="cyan",
|
|
134
|
-
)
|
|
135
|
-
)
|
|
136
|
-
ssh.run_shell(command=f"cloud_copy {resolved_source} :^", verbose_output=True, description="Uploading from remote to the cloud.", strict_stderr=False, strict_return_code=False)
|
|
137
|
-
console.print(
|
|
138
|
-
Panel.fit(
|
|
139
|
-
"⬇️ Cloud transfer mode — downloading from cloud to local...",
|
|
140
|
-
title="Cloud Download",
|
|
141
|
-
border_style="cyan",
|
|
142
|
-
)
|
|
143
|
-
)
|
|
144
|
-
ssh.run_locally(command=f"cloud_copy :^ {resolved_target}")
|
|
145
|
-
received_file = PathExtended(resolved_target) # type: ignore
|
|
146
|
-
else:
|
|
147
|
-
if source_is_remote:
|
|
148
|
-
assert resolved_source is not None, """
|
|
149
|
-
❌ Path Error: Source must be a remote path (machine:path)"""
|
|
150
|
-
target_display = resolved_target or "<auto>"
|
|
151
|
-
console.print(
|
|
152
|
-
Panel(
|
|
153
|
-
"\n".join(
|
|
154
|
-
[
|
|
155
|
-
"📥 Transfer Mode: Remote → Local",
|
|
156
|
-
f"Source: [cyan]{resolved_source}[/cyan]",
|
|
157
|
-
f"Target: [cyan]{target_display}[/cyan]",
|
|
158
|
-
f"Options: {'ZIP compression' if zipFirst else 'No compression'}, {'Recursive' if recursive else 'Non-recursive'}",
|
|
159
|
-
]
|
|
160
|
-
),
|
|
161
|
-
title="Transfer Details",
|
|
162
|
-
border_style="cyan",
|
|
163
|
-
padding=(1, 2),
|
|
164
|
-
)
|
|
165
|
-
)
|
|
166
|
-
received_file = ssh.copy_to_here(source=resolved_source, target=resolved_target, compress_with_zip=zipFirst, recursive=recursive)
|
|
167
|
-
else:
|
|
168
|
-
assert resolved_source is not None, """
|
|
169
|
-
❌ Path Error: Target must be a remote path (machine:path)"""
|
|
170
|
-
target_display = resolved_target or "<auto>"
|
|
171
|
-
console.print(
|
|
172
|
-
Panel(
|
|
173
|
-
"\n".join(
|
|
174
|
-
[
|
|
175
|
-
"📤 Transfer Mode: Local → Remote",
|
|
176
|
-
f"Source: [cyan]{resolved_source}[/cyan]",
|
|
177
|
-
f"Target: [cyan]{target_display}[/cyan]",
|
|
178
|
-
f"Options: {'ZIP compression' if zipFirst else 'No compression'}, {'Recursive' if recursive else 'Non-recursive'}",
|
|
179
|
-
]
|
|
180
|
-
),
|
|
181
|
-
title="Transfer Details",
|
|
182
|
-
border_style="cyan",
|
|
183
|
-
padding=(1, 2),
|
|
184
|
-
)
|
|
185
|
-
)
|
|
186
|
-
received_file = ssh.copy_from_here(source_path=resolved_source, target_rel2home=resolved_target, compress_with_zip=zipFirst, recursive=recursive, overwrite_existing=False)
|
|
187
|
-
|
|
188
|
-
if source_is_remote and isinstance(received_file, PathExtended):
|
|
189
|
-
console.print(
|
|
190
|
-
Panel(
|
|
191
|
-
"\n".join(
|
|
192
|
-
[
|
|
193
|
-
"📁 File Received",
|
|
194
|
-
f"Parent: [cyan]{repr(received_file.parent)}[/cyan]",
|
|
195
|
-
f"File: [cyan]{repr(received_file)}[/cyan]",
|
|
196
|
-
]
|
|
197
|
-
),
|
|
198
|
-
title="Transfer Result",
|
|
199
|
-
border_style="green",
|
|
200
|
-
padding=(1, 2),
|
|
201
|
-
)
|
|
202
|
-
)
|
|
203
|
-
console.print(
|
|
204
|
-
Panel(
|
|
205
|
-
"File transfer process finished successfully",
|
|
206
|
-
title="✅ Transfer Complete",
|
|
207
|
-
border_style="green",
|
|
208
|
-
padding=(1, 2),
|
|
209
|
-
)
|
|
210
|
-
)
|
|
15
|
+
"""File transfer utility through SSH."""
|
|
16
|
+
from machineconfig.scripts.python.helpers.helpers_network.ftpx_impl import ftpx as impl
|
|
17
|
+
impl(source=source, target=target, recursive=recursive, zipFirst=zipFirst, cloud=cloud, overwrite_existing=overwrite_existing)
|
|
211
18
|
|
|
212
19
|
|
|
213
20
|
def main() -> None:
|
|
214
21
|
"""Entry point function that uses typer to parse arguments and call main."""
|
|
215
22
|
app = typer.Typer()
|
|
216
|
-
app.command(no_args_is_help=True, help="File transfer utility
|
|
23
|
+
app.command(no_args_is_help=True, help=ftpx.__doc__, short_help="File transfer utility through SSH.")(ftpx)
|
|
217
24
|
app()
|
|
218
25
|
|
|
219
26
|
|