machineconfig 8.12__py3-none-any.whl → 8.45__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/remote/run_cluster.py +1 -1
- machineconfig/cluster/remote/run_remote.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +10 -8
- machineconfig/cluster/sessions_managers/wt_local.py +1 -1
- machineconfig/cluster/sessions_managers/wt_local_manager.py +1 -1
- machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +1 -1
- 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 +225 -140
- machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
- machineconfig/jobs/installer/package_groups.py +10 -9
- machineconfig/jobs/installer/python_scripts/boxes.py +1 -2
- machineconfig/jobs/installer/python_scripts/code.py +10 -8
- machineconfig/jobs/installer/python_scripts/hx.py +30 -13
- machineconfig/jobs/installer/python_scripts/nerfont_windows_helper.py +6 -5
- machineconfig/jobs/installer/python_scripts/sysabc.py +25 -19
- machineconfig/jobs/installer/python_scripts/yazi.py +33 -17
- machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
- machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +1 -1
- machineconfig/jobs/scripts_dynamic/a.py +413 -10
- machineconfig/profile/create_links.py +77 -20
- machineconfig/profile/create_links_export.py +40 -51
- machineconfig/profile/mapper_data.toml +30 -0
- machineconfig/profile/mapper_dotfiles.toml +253 -0
- machineconfig/scripts/python/agents.py +70 -172
- machineconfig/scripts/python/ai/initai.py +3 -1
- machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +7 -5
- 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/github_copilot.py +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +29 -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/{solutions → utils}/generic.py +2 -15
- machineconfig/scripts/python/ai/utils/vscode_tasks.py +6 -3
- machineconfig/scripts/python/cloud.py +58 -11
- machineconfig/scripts/python/croshell.py +4 -156
- machineconfig/scripts/python/devops.py +57 -40
- machineconfig/scripts/python/devops_navigator.py +17 -3
- machineconfig/scripts/python/fire_jobs.py +8 -207
- machineconfig/scripts/python/ftpx.py +5 -225
- 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/{env_manager → helpers/helper_env}/env_manager_tui.py +1 -1
- machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.py +1 -1
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +1 -1
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_gemini.py +1 -1
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_qwen.py +1 -1
- machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_launch.py +5 -5
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +6 -6
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +10 -5
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +3 -3
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
- 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 +7 -6
- machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +267 -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 +76 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_nw.py +52 -72
- machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +265 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +45 -21
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_file.py +44 -30
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_server.py +26 -43
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_terminal.py +12 -6
- machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +12 -6
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
- machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +69 -45
- 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 +3 -3
- 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 +3 -3
- machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
- machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_linux/fzfg +4 -3
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
- machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_windows/fzfg.ps1 +1 -1
- 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/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address.py +15 -17
- machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address_switch.py +1 -1
- machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
- machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_ssh.py +2 -2
- 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/{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}/cloud_repo_sync.py +116 -33
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +3 -2
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -13
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_2.py +63 -19
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
- machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
- machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +177 -0
- machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +1 -1
- 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_utils → helpers/helpers_utils}/download.py +1 -1
- machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/python.py +49 -29
- machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
- machineconfig/scripts/python/mcfg_entry.py +133 -48
- machineconfig/scripts/python/msearch.py +15 -61
- machineconfig/scripts/python/sessions.py +59 -194
- machineconfig/scripts/python/terminal.py +18 -96
- machineconfig/scripts/python/utils.py +101 -20
- machineconfig/settings/atuin/config.toml +294 -0
- machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
- machineconfig/settings/linters/.ruff.toml +1 -0
- machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
- machineconfig/settings/shells/bash/init.sh +6 -3
- machineconfig/settings/shells/pwsh/init.ps1 +69 -1
- machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +4 -1
- machineconfig/settings/shells/wt/settings.json +20 -7
- machineconfig/settings/shells/zsh/init.sh +34 -4
- machineconfig/settings/television/cable_unix/bash-history.toml +1 -1
- machineconfig/settings/television/cable_windows/pwsh-history.toml +1 -1
- 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/yazi/yazi_linux.toml +18 -8
- machineconfig/settings/zellij/layouts/st.kdl +2 -2
- machineconfig/settings/zellij/layouts/st2.kdl +1 -1
- machineconfig/setup_linux/web_shortcuts/interactive.sh +10 -10
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +3 -0
- machineconfig/setup_mac/__init__.py +0 -2
- machineconfig/setup_windows/__init__.py +0 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +14 -13
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +4 -3
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +3 -3
- 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 +24 -0
- machineconfig/utils/code.py +79 -37
- machineconfig/utils/files/ascii_art.py +10 -14
- machineconfig/utils/files/headers.py +3 -5
- machineconfig/utils/files/read.py +8 -1
- machineconfig/utils/installer_utils/github_release_bulk.py +1 -0
- machineconfig/utils/installer_utils/install_from_url.py +1 -1
- machineconfig/utils/installer_utils/installer_class.py +12 -4
- machineconfig/utils/installer_utils/installer_cli.py +1 -15
- machineconfig/utils/installer_utils/installer_helper.py +2 -2
- machineconfig/utils/installer_utils/installer_locator_utils.py +13 -13
- machineconfig/utils/installer_utils/installer_runner.py +4 -4
- machineconfig/utils/meta.py +6 -4
- machineconfig/utils/options.py +49 -19
- 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 +6 -6
- machineconfig/utils/scheduler.py +8 -2
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/source_of_truth.py +6 -1
- machineconfig/utils/ssh.py +73 -22
- machineconfig/utils/ssh_utils/abc.py +1 -1
- machineconfig/utils/ssh_utils/copy_from_here.py +2 -2
- machineconfig/utils/ssh_utils/utils.py +2 -2
- machineconfig/utils/ssh_utils/wsl.py +107 -170
- machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
- machineconfig/utils/upgrade_packages.py +4 -8
- {machineconfig-8.12.dist-info → machineconfig-8.45.dist-info}/METADATA +29 -22
- {machineconfig-8.12.dist-info → machineconfig-8.45.dist-info}/RECORD +249 -211
- machineconfig/jobs/installer/check_installations.py +0 -248
- machineconfig/jobs/scripts/bash_scripts/mint_keyboard_shortcuts.sh +0 -30
- machineconfig/profile/backup.toml +0 -49
- machineconfig/profile/mapper.toml +0 -263
- machineconfig/scripts/python/helpers_devops/cli_config.py +0 -105
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -89
- machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
- machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -208
- machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
- machineconfig/scripts/python/helpers_devops/run_script.py +0 -168
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
- 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 -620
- machineconfig/scripts/python/helpers_network/ssh_add_identity.py +0 -116
- machineconfig/scripts/python/helpers_network/ssh_add_ssh_key.py +0 -153
- machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +0 -391
- machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +0 -338
- machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -77
- machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
- machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
- machineconfig/utils/options_tv.py +0 -119
- machineconfig/utils/tst.py +0 -20
- /machineconfig/{scripts/python/helpers_agents → jobs/installer/checks}/__init__.py +0 -0
- /machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
- /machineconfig/scripts/python/{helpers_agents/agentic_frameworks → graph}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_cloud → 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_croshell → helpers/helpers_agents}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_devops → helpers/helpers_agents/agentic_frameworks}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_helper_types.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aichat/config.yaml +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aider/.aider.conf.yml +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/copilot/config.yml +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/crush/crush.json +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/gemini/settings.json +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/privacy.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/prompt.txt +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.ps1 +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.sh +0 -0
- /machineconfig/scripts/python/{helpers_devops/themes → helpers/helpers_cloud}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +0 -0
- /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.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/{helpers_network → helpers/helpers_devops}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_sessions → 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 → helpers/helpers_fire_command}/f.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/file_wrangler.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_streamlit_helper.py +0 -0
- /machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nfs.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/wifi_conn.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_1.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
- /machineconfig/scripts/python/helpers/{ast_search.py → helpers_search/ast_search.py} +0 -0
- /machineconfig/scripts/python/helpers/{qr_code.py → helpers_search/qr_code.py} +0 -0
- /machineconfig/scripts/python/helpers/{repo_rag.py → helpers_search/repo_rag.py} +0 -0
- /machineconfig/scripts/python/helpers/{symantic_search.py → helpers_search/symantic_search.py} +0 -0
- /machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/pdf.py +0 -0
- {machineconfig-8.12.dist-info → machineconfig-8.45.dist-info}/WHEEL +0 -0
- {machineconfig-8.12.dist-info → machineconfig-8.45.dist-info}/entry_points.txt +0 -0
- {machineconfig-8.12.dist-info → machineconfig-8.45.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"""Pure Python implementations for sessions commands - no typer dependencies."""
|
|
2
|
+
|
|
3
|
+
from typing import Optional, Literal
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def balance_load(
|
|
8
|
+
layout_path: str,
|
|
9
|
+
max_thresh: int,
|
|
10
|
+
thresh_type: Literal["number", "n", "weight", "w"],
|
|
11
|
+
breaking_method: Literal["moreLayouts", "ml", "combineTabs", "ct"],
|
|
12
|
+
output_path: Optional[str],
|
|
13
|
+
) -> None:
|
|
14
|
+
"""Adjust layout file to limit max tabs per layout, etc."""
|
|
15
|
+
thresh_type_resolved: dict[str, Literal["number", "weight"]] = {"number": "number", "n": "number", "weight": "weight", "w": "weight"}
|
|
16
|
+
breaking_method_resolved: dict[str, Literal["moreLayouts", "combineTabs"]] = {"moreLayouts": "moreLayouts", "ml": "moreLayouts", "combineTabs": "combineTabs", "ct": "combineTabs"}
|
|
17
|
+
|
|
18
|
+
layout_path_obj = Path(layout_path).expanduser().absolute()
|
|
19
|
+
|
|
20
|
+
from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile
|
|
21
|
+
import json
|
|
22
|
+
layoutfile: LayoutsFile = json.loads(layout_path_obj.read_text())
|
|
23
|
+
layout_configs = layoutfile["layouts"]
|
|
24
|
+
from machineconfig.cluster.sessions_managers.utils.load_balancer import limit_tab_num
|
|
25
|
+
new_layouts = limit_tab_num(layout_configs=layout_configs, max_thresh=max_thresh, threshold_type=thresh_type_resolved[thresh_type], breaking_method=breaking_method_resolved[breaking_method])
|
|
26
|
+
layoutfile["layouts"] = new_layouts
|
|
27
|
+
target_file = Path(output_path) if output_path is not None else layout_path_obj.parent / f"{layout_path_obj.stem}_adjusted_{max_thresh}_{thresh_type}_{breaking_method}.json"
|
|
28
|
+
target_file.parent.mkdir(parents=True, exist_ok=True)
|
|
29
|
+
target_file.write_text(data=json.dumps(layoutfile, indent=4), encoding="utf-8")
|
|
30
|
+
print(f"Adjusted layout saved to {target_file}")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def select_layout(layouts_json_file: str, selected_layouts_names: Optional[list[str]], select_interactively: bool, subsitute_home: bool) -> list["LayoutConfig"]: # type: ignore[name-defined]
|
|
34
|
+
"""Select layout(s) from a layout file."""
|
|
35
|
+
import json
|
|
36
|
+
from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile, LayoutConfig
|
|
37
|
+
json_str = Path(layouts_json_file).read_text(encoding="utf-8")
|
|
38
|
+
if subsitute_home:
|
|
39
|
+
json_str = json_str.replace("~", str(Path.home())).replace("$HOME", str(Path.home()))
|
|
40
|
+
json_str = json_str.replace("""Command": "f """, """Command": "~/.config/machineconfig/scripts/wrap_mcfg fire """)
|
|
41
|
+
json_str = json_str.replace("""Command": "s """, """Command": "~/.config/machineconfig/scripts/wrap_mcfg sessions """)
|
|
42
|
+
|
|
43
|
+
layout_file: LayoutsFile = json.loads(json_str)
|
|
44
|
+
if len(layout_file["layouts"]) == 0:
|
|
45
|
+
raise ValueError(f"No layouts found in {layouts_json_file}")
|
|
46
|
+
if selected_layouts_names is None:
|
|
47
|
+
if not select_interactively:
|
|
48
|
+
return layout_file["layouts"]
|
|
49
|
+
options = [layout["layoutName"] for layout in layout_file["layouts"]]
|
|
50
|
+
from machineconfig.utils.options import choose_from_options
|
|
51
|
+
selected_layouts_names = choose_from_options(multi=True, options=options, prompt="Choose a layout configuration:", tv=True, msg="Choose one option")
|
|
52
|
+
print(f"Selected layout(s): {selected_layouts_names}")
|
|
53
|
+
layouts_chosen: list[LayoutConfig] = []
|
|
54
|
+
for name in selected_layouts_names:
|
|
55
|
+
layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"] == name), None)
|
|
56
|
+
if layout_chosen is None:
|
|
57
|
+
layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"].lower() == name.lower()), None)
|
|
58
|
+
if layout_chosen is None:
|
|
59
|
+
available_layouts = [layout["layoutName"] for layout in layout_file["layouts"]]
|
|
60
|
+
raise ValueError(f"Layout '{name}' not found. Available layouts: {available_layouts}")
|
|
61
|
+
layouts_chosen.append(layout_chosen)
|
|
62
|
+
return layouts_chosen
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def find_layout_file(layout_path: str) -> str:
|
|
66
|
+
"""Find layout file from a path."""
|
|
67
|
+
from machineconfig.utils.path_helper import search_for_files_of_interest, match_file_name, sanitize_path
|
|
68
|
+
from machineconfig.utils.options import choose_from_options
|
|
69
|
+
path_obj = sanitize_path(layout_path)
|
|
70
|
+
if not path_obj.exists():
|
|
71
|
+
choice_file = match_file_name(sub_string=layout_path, search_root=Path.cwd(), suffixes={".json"})
|
|
72
|
+
elif path_obj.is_dir():
|
|
73
|
+
print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
|
|
74
|
+
files = search_for_files_of_interest(path_obj, suffixes={".py", ".sh", ".ps1"})
|
|
75
|
+
print(f"🔍 Got #{len(files)} results.")
|
|
76
|
+
choice_file = choose_from_options(multi=False, options=files, tv=True, msg="Choose one option")
|
|
77
|
+
choice_file = Path(choice_file).expanduser().absolute()
|
|
78
|
+
else:
|
|
79
|
+
choice_file = path_obj
|
|
80
|
+
return str(choice_file)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def run_layouts(
|
|
84
|
+
layout_path: Optional[str],
|
|
85
|
+
max_tabs: int,
|
|
86
|
+
max_layouts: int,
|
|
87
|
+
sleep_inbetween: float,
|
|
88
|
+
monitor: bool,
|
|
89
|
+
parallel: bool,
|
|
90
|
+
kill_upon_completion: bool,
|
|
91
|
+
choose: Optional[str],
|
|
92
|
+
choose_interactively: bool,
|
|
93
|
+
subsitute_home: bool,
|
|
94
|
+
) -> None:
|
|
95
|
+
"""Launch terminal sessions based on a layout configuration file."""
|
|
96
|
+
if layout_path is None:
|
|
97
|
+
raise ValueError("layout_path is required")
|
|
98
|
+
|
|
99
|
+
layout_path_resolved = find_layout_file(layout_path=layout_path)
|
|
100
|
+
layouts_selected = select_layout(layouts_json_file=layout_path_resolved, selected_layouts_names=choose.split(",") if choose else None, select_interactively=choose_interactively, subsitute_home=subsitute_home)
|
|
101
|
+
|
|
102
|
+
if parallel and len(layouts_selected) > max_layouts:
|
|
103
|
+
raise ValueError(f"Number of layouts {len(layouts_selected)} exceeds the maximum allowed {max_layouts}. Please adjust your layout file.")
|
|
104
|
+
for a_layout in layouts_selected:
|
|
105
|
+
if len(a_layout["layoutTabs"]) > max_tabs:
|
|
106
|
+
raise ValueError(f"Layout '{a_layout.get('layoutName', 'Unnamed')}' has {len(a_layout['layoutTabs'])} tabs which exceeds the max of {max_tabs}.")
|
|
107
|
+
|
|
108
|
+
import time
|
|
109
|
+
import platform
|
|
110
|
+
if platform.system() == "Linux" or platform.system() == "Darwin":
|
|
111
|
+
from machineconfig.cluster.sessions_managers.zellij_local_manager import ZellijLocalManager
|
|
112
|
+
if not parallel:
|
|
113
|
+
iterable = [[item] for item in layouts_selected]
|
|
114
|
+
else:
|
|
115
|
+
iterable = [layouts_selected]
|
|
116
|
+
for i, a_layouts in enumerate(iterable):
|
|
117
|
+
manager = ZellijLocalManager(session_layouts=a_layouts)
|
|
118
|
+
manager.start_all_sessions(poll_interval=2, poll_seconds=2)
|
|
119
|
+
if monitor:
|
|
120
|
+
manager.run_monitoring_routine(wait_ms=2000)
|
|
121
|
+
if kill_upon_completion:
|
|
122
|
+
manager.kill_all_sessions()
|
|
123
|
+
if i < len(layouts_selected) - 1:
|
|
124
|
+
time.sleep(sleep_inbetween)
|
|
125
|
+
elif platform.system() == "Windows":
|
|
126
|
+
from machineconfig.cluster.sessions_managers.wt_local_manager import WTLocalManager
|
|
127
|
+
if not parallel:
|
|
128
|
+
iterable = [[item] for item in layouts_selected]
|
|
129
|
+
else:
|
|
130
|
+
iterable = [layouts_selected]
|
|
131
|
+
for i, a_layouts in enumerate(iterable):
|
|
132
|
+
manager = WTLocalManager(session_layouts=a_layouts)
|
|
133
|
+
manager.start_all_sessions()
|
|
134
|
+
if monitor:
|
|
135
|
+
manager.run_monitoring_routine(wait_ms=2000)
|
|
136
|
+
if kill_upon_completion:
|
|
137
|
+
manager.kill_all_sessions()
|
|
138
|
+
if i < len(layouts_selected) - 1:
|
|
139
|
+
time.sleep(sleep_inbetween)
|
|
140
|
+
else:
|
|
141
|
+
print(f"❌ Unsupported platform: {platform.system()}")
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def create_template(name: Optional[str], num_tabs: int) -> None:
|
|
145
|
+
"""Create a layout template file."""
|
|
146
|
+
from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile, TabConfig, LayoutConfig
|
|
147
|
+
tabs: list[TabConfig] = []
|
|
148
|
+
for i in range(1, num_tabs + 1):
|
|
149
|
+
tab: TabConfig = {
|
|
150
|
+
"tabName": f"Tab{i}",
|
|
151
|
+
"startDir": "~/" + str(Path.cwd().relative_to(Path.home())),
|
|
152
|
+
"command": "bash",
|
|
153
|
+
}
|
|
154
|
+
tabs.append(tab)
|
|
155
|
+
layouts: list[LayoutConfig] = [
|
|
156
|
+
{
|
|
157
|
+
"layoutName": f"{Path.cwd().name}Layout",
|
|
158
|
+
"layoutTabs": tabs,
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
file: LayoutsFile = {
|
|
162
|
+
"$schema": "https://bit.ly/cfglayout", # type: ignore
|
|
163
|
+
"version": "0.1",
|
|
164
|
+
"layouts": layouts,
|
|
165
|
+
}
|
|
166
|
+
import json
|
|
167
|
+
json_string = json.dumps(file, indent=4)
|
|
168
|
+
if name is None:
|
|
169
|
+
layout_path = Path.cwd() / "layout.json"
|
|
170
|
+
else:
|
|
171
|
+
layout_path = Path.cwd() / (name.replace(".json", "") + ".json")
|
|
172
|
+
layout_path.parent.mkdir(parents=True, exist_ok=True)
|
|
173
|
+
if layout_path.exists():
|
|
174
|
+
print(f"❌ File {layout_path} already exists. Aborting to avoid overwriting.")
|
|
175
|
+
return
|
|
176
|
+
layout_path.write_text(json_string, encoding="utf-8")
|
|
177
|
+
print(f"✅ Created layout template at {layout_path}")
|
machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py
RENAMED
|
@@ -45,7 +45,7 @@ def create_from_function(
|
|
|
45
45
|
|
|
46
46
|
# ========================= choosing function to run
|
|
47
47
|
if function is None or function.strip() == "":
|
|
48
|
-
from machineconfig.scripts.python.helpers_fire_command.fire_jobs_route_helper import choose_function_or_lines
|
|
48
|
+
from machineconfig.scripts.python.helpers.helpers_fire_command.fire_jobs_route_helper import choose_function_or_lines
|
|
49
49
|
choice_function, choice_file, _kwargs_dict = choose_function_or_lines(choice_file, kwargs_dict={})
|
|
50
50
|
else:
|
|
51
51
|
choice_function = function
|
|
File without changes
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import re
|
|
2
|
+
import subprocess
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
_ANSI_ESCAPE_RE = re.compile(
|
|
7
|
+
r"(?:\x1B|\u001B|\033)\[[0-?]*[ -/]*[@-~]|\[[0-9;?]+[ -/]*[@-~]|\[m"
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def strip_ansi_codes(text: str) -> str:
|
|
12
|
+
return _ANSI_ESCAPE_RE.sub("", text)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def choose_zellij_session(name: str | None, new_session: bool, kill_all: bool) -> tuple[str, str | None]:
|
|
16
|
+
"""Choose a Zellij session. Returns tuple of (action, script_to_run) where action is 'run_script', 'exit', or 'error'."""
|
|
17
|
+
if name is not None:
|
|
18
|
+
return ("run_script", f"zellij attach {name}")
|
|
19
|
+
if new_session:
|
|
20
|
+
cmd = "zellij --layout st2"
|
|
21
|
+
if kill_all:
|
|
22
|
+
cmd = f"zellij kill-all-sessions --yes\n{cmd}"
|
|
23
|
+
return ("run_script", cmd)
|
|
24
|
+
cmd = "zellij list-sessions"
|
|
25
|
+
try:
|
|
26
|
+
sessions: list[str] = subprocess.check_output(cmd, shell=True).decode().strip().split("\n")
|
|
27
|
+
except subprocess.CalledProcessError:
|
|
28
|
+
sessions = []
|
|
29
|
+
sessions = [s for s in sessions if s.strip()]
|
|
30
|
+
# print(f"Found Zellij sessions: {sessions}")
|
|
31
|
+
sessions.sort(key=lambda s: "EXITED" in s)
|
|
32
|
+
if "current" in sessions:
|
|
33
|
+
return ("error", "Already in a Zellij session, avoiding nesting and exiting.")
|
|
34
|
+
if len(sessions) == 0:
|
|
35
|
+
return ("run_script", "zellij --layout st2")
|
|
36
|
+
if len(sessions) == 1:
|
|
37
|
+
sn = strip_ansi_codes(sessions[0])
|
|
38
|
+
session_name = sn.split(" [Created")[0]
|
|
39
|
+
return ("run_script", f"zellij attach {session_name}")
|
|
40
|
+
from machineconfig.utils.options import choose_from_options
|
|
41
|
+
NEW_SESSION_LABEL = "NEW SESSION"
|
|
42
|
+
KILL_ALL_AND_NEW_LABEL = "KILL ALL SESSIONS & START NEW"
|
|
43
|
+
options = sessions + [NEW_SESSION_LABEL, KILL_ALL_AND_NEW_LABEL]
|
|
44
|
+
try:
|
|
45
|
+
session_name = choose_from_options(msg="Choose a Zellij session to attach to:", multi=False, options=options, tv=True)
|
|
46
|
+
except Exception as e:
|
|
47
|
+
return ("error", f"Error choosing Zellij session: {e}")
|
|
48
|
+
if session_name == NEW_SESSION_LABEL:
|
|
49
|
+
cmd = "zellij --layout st2"
|
|
50
|
+
if kill_all:
|
|
51
|
+
cmd = f"zellij kill-all-sessions --yes\n{cmd}"
|
|
52
|
+
return ("run_script", cmd)
|
|
53
|
+
if session_name == KILL_ALL_AND_NEW_LABEL:
|
|
54
|
+
return ("run_script", "zellij kill-all-sessions --yes\nzellij --layout st2")
|
|
55
|
+
session_name_clean = strip_ansi_codes(session_name)
|
|
56
|
+
session_name_clean = session_name_clean.split(" [Created")[0]
|
|
57
|
+
return ("run_script", f"zellij attach {session_name_clean}")
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def get_session_tabs() -> list[tuple[str, str]]:
|
|
61
|
+
cmd = "zellij list-sessions"
|
|
62
|
+
try:
|
|
63
|
+
sessions: list[str] = subprocess.check_output(cmd, shell=True).decode().strip().split("\n")
|
|
64
|
+
except subprocess.CalledProcessError:
|
|
65
|
+
sessions = []
|
|
66
|
+
sessions = [strip_ansi_codes(s) for s in sessions]
|
|
67
|
+
active_sessions = [s for s in sessions if "EXITED" not in s]
|
|
68
|
+
result: list[tuple[str, str]] = []
|
|
69
|
+
for session_line in active_sessions:
|
|
70
|
+
session_name = session_line.split(" [Created")[0].strip()
|
|
71
|
+
tab_cmd = f"zellij --session {session_name} action query-tab-names"
|
|
72
|
+
try:
|
|
73
|
+
tabs: list[str] = subprocess.check_output(tab_cmd, shell=True).decode().strip().split("\n")
|
|
74
|
+
for tab in tabs:
|
|
75
|
+
if tab.strip():
|
|
76
|
+
result.append((session_name, tab.strip()))
|
|
77
|
+
except subprocess.CalledProcessError:
|
|
78
|
+
continue
|
|
79
|
+
return result
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def start_wt(layout_name: str) -> tuple[str, str | None]:
|
|
83
|
+
"""Start a Windows Terminal layout by name. Returns tuple of (status, message) where status is 'success' or 'error'."""
|
|
84
|
+
import json
|
|
85
|
+
from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile
|
|
86
|
+
from machineconfig.cluster.sessions_managers.wt_local import run_wt_layout
|
|
87
|
+
layouts_file = Path.home().joinpath("dotfiles/machineconfig/layouts.json")
|
|
88
|
+
if not layouts_file.exists():
|
|
89
|
+
return ("error", f"❌ Layouts file not found: {layouts_file}")
|
|
90
|
+
layouts_data: LayoutsFile = json.loads(layouts_file.read_text(encoding="utf-8"))
|
|
91
|
+
chosen_layout = next((a_layout for a_layout in layouts_data["layouts"] if a_layout["layoutName"] == layout_name), None)
|
|
92
|
+
if not chosen_layout:
|
|
93
|
+
available_layouts = [a_layout["layoutName"] for a_layout in layouts_data["layouts"]]
|
|
94
|
+
return ("error", f"❌ Layout '{layout_name}' not found in layouts file.\nAvailable layouts: {', '.join(available_layouts)}")
|
|
95
|
+
run_wt_layout(layout_config=chosen_layout)
|
|
96
|
+
return ("success", None)
|
|
@@ -22,7 +22,7 @@ def download(
|
|
|
22
22
|
if output is not None and output_dir is not None:
|
|
23
23
|
typer.echo("❌ Error: --output and --output-dir cannot be used together.", err=True)
|
|
24
24
|
return None
|
|
25
|
-
typer.echo(f"
|
|
25
|
+
typer.echo(f" {url}")
|
|
26
26
|
|
|
27
27
|
def _sanitize_candidate_filename(name: str) -> Optional[str]:
|
|
28
28
|
candidate = Path(name).name.strip()
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
from tempfile import tempdir
|
|
2
1
|
import typer
|
|
3
2
|
from typing import Optional, Annotated, Literal, TypedDict, cast
|
|
4
3
|
|
|
5
4
|
|
|
6
5
|
def tui_env(which: Annotated[Literal["PATH", "p", "ENV", "e"], typer.Argument(help="Which environment variable to display.")] = "ENV") -> None:
|
|
7
6
|
"""📚 NAVIGATE PATH variable with TUI"""
|
|
8
|
-
from machineconfig.scripts.python import
|
|
7
|
+
from machineconfig.scripts.python.helpers import helper_env as navigator
|
|
9
8
|
from pathlib import Path
|
|
10
9
|
|
|
11
10
|
match which:
|
|
@@ -18,7 +17,7 @@ def tui_env(which: Annotated[Literal["PATH", "p", "ENV", "e"], typer.Argument(he
|
|
|
18
17
|
uv_with = ["textual"]
|
|
19
18
|
uv_project_dir = None
|
|
20
19
|
if not Path.home().joinpath("code/machineconfig").exists():
|
|
21
|
-
uv_with.append("machineconfig>=8.
|
|
20
|
+
uv_with.append("machineconfig>=8.45")
|
|
22
21
|
else:
|
|
23
22
|
uv_project_dir = str(Path.home().joinpath("code/machineconfig"))
|
|
24
23
|
run_shell_script(
|
|
@@ -37,7 +36,7 @@ def init_project(
|
|
|
37
36
|
] = None,
|
|
38
37
|
group: Annotated[
|
|
39
38
|
Optional[str], typer.Option("--group", "-g", help="group of packages names (no separation) p:plot, t:types, l:linting, i:interactive, d:data")
|
|
40
|
-
] = "
|
|
39
|
+
] = "p,t,l,i,d",
|
|
41
40
|
) -> None:
|
|
42
41
|
if libraries is not None:
|
|
43
42
|
packages_add_line = f"uv add {libraries}"
|
|
@@ -51,7 +50,9 @@ def init_project(
|
|
|
51
50
|
typer.echo(f"❌ Error: pyproject.toml not found in {repo_root}", err=True)
|
|
52
51
|
raise typer.Exit(code=1)
|
|
53
52
|
starting_code = ""
|
|
53
|
+
agents_line = ""
|
|
54
54
|
else:
|
|
55
|
+
agents_line = """agents make-config"""
|
|
55
56
|
if name is not None:
|
|
56
57
|
from machineconfig.utils.accessories import randstr
|
|
57
58
|
|
|
@@ -68,36 +69,49 @@ uv init --python {python}
|
|
|
68
69
|
uv venv
|
|
69
70
|
"""
|
|
70
71
|
print(f"Adding group `{group}` with common data science and plotting packages...")
|
|
71
|
-
total_packages: list[str] =
|
|
72
|
+
total_packages: dict[str, list[str]] = {}
|
|
72
73
|
if group is not None:
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
74
|
+
packages = group.split(",")
|
|
75
|
+
if "t" in packages or "types" in packages:
|
|
76
|
+
total_packages["types"] = [
|
|
77
|
+
"types-python-dateutil",
|
|
78
|
+
"types-pyyaml",
|
|
79
|
+
"types-requests",
|
|
80
|
+
"types-tqdm",
|
|
81
|
+
"types-mysqlclient",
|
|
82
|
+
"types-paramiko",
|
|
83
|
+
"types-pytz",
|
|
84
|
+
"types-sqlalchemy",
|
|
85
|
+
"types-toml",
|
|
86
|
+
"types-urllib3",
|
|
87
|
+
]
|
|
88
|
+
if "l" in packages:
|
|
89
|
+
total_packages["linting"] = ["mypy", "pyright", "ruff", "pylint", "pyrefly", "cleanpy", "ipdb", "pudb"]
|
|
90
|
+
if "i" in packages:
|
|
91
|
+
total_packages["interactive"] = ["ipython", "ipykernel", "jupyterlab", "nbformat", "marimo"]
|
|
92
|
+
if "p" in packages:
|
|
93
|
+
total_packages["plot"] = ["python-magic", "matplotlib", "plotly", "kaleido"]
|
|
94
|
+
if "d" in packages:
|
|
95
|
+
total_packages["data"] = ["numpy", "pandas", "polars", "duckdb-engine", "sqlalchemy", "psycopg2-binary", "pyarrow", "tqdm", "openpyxl"]
|
|
85
96
|
from machineconfig.utils.ve import get_ve_activate_line
|
|
86
|
-
|
|
97
|
+
groups_packages_lines = "\n".join(
|
|
98
|
+
[f"uv add --group {group_name} {' '.join(packages)}" for group_name, packages in total_packages.items()]
|
|
99
|
+
)
|
|
87
100
|
script = f"""
|
|
88
101
|
{starting_code}
|
|
89
102
|
{packages_add_line}
|
|
90
|
-
|
|
103
|
+
{groups_packages_lines}
|
|
91
104
|
{get_ve_activate_line(ve_root=str(repo_root.joinpath(".venv")))}
|
|
105
|
+
{agents_line}
|
|
92
106
|
ls
|
|
93
107
|
"""
|
|
94
108
|
from machineconfig.utils.code import exit_then_run_shell_script, run_shell_script
|
|
95
|
-
|
|
96
|
-
_ = exit_then_run_shell_script
|
|
97
|
-
run_shell_script(script)
|
|
98
|
-
if tempdir:
|
|
99
|
-
|
|
100
|
-
|
|
109
|
+
exit_then_run_shell_script(script)
|
|
110
|
+
_ = exit_then_run_shell_script, run_shell_script
|
|
111
|
+
# run_shell_script(script)
|
|
112
|
+
# if tempdir:
|
|
113
|
+
# from machineconfig.scripts.python.ai.initai import add_ai_configs
|
|
114
|
+
# add_ai_configs(repo_root=repo_root)
|
|
101
115
|
|
|
102
116
|
|
|
103
117
|
def edit_file_with_hx(
|
|
@@ -144,13 +158,19 @@ class MachineSpecs(TypedDict):
|
|
|
144
158
|
user: str
|
|
145
159
|
|
|
146
160
|
|
|
147
|
-
def get_machine_specs() -> MachineSpecs:
|
|
161
|
+
def get_machine_specs(hardware: Annotated[bool, typer.Option(..., "--hardware", "-h", help="Show compute capability")] = False) -> MachineSpecs:
|
|
148
162
|
"""Write print and return the local machine specs."""
|
|
163
|
+
if hardware:
|
|
164
|
+
from machineconfig.scripts.python.helpers.helpers_utils.specs import main
|
|
165
|
+
main()
|
|
166
|
+
import sys
|
|
167
|
+
sys.exit()
|
|
168
|
+
|
|
149
169
|
import platform
|
|
150
|
-
from machineconfig.utils.code import
|
|
170
|
+
from machineconfig.utils.code import get_uv_command
|
|
151
171
|
|
|
152
|
-
|
|
153
|
-
command = f"""{
|
|
172
|
+
uv_cmd = get_uv_command(platform=platform.system()) # type: ignore
|
|
173
|
+
command = f"""{uv_cmd} run --with distro python -c "import distro; print(distro.name(pretty=True))" """
|
|
154
174
|
import subprocess
|
|
155
175
|
from pathlib import Path
|
|
156
176
|
import socket
|