machineconfig 5.56__py3-none-any.whl → 5.59__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/jobs/installer/linux_scripts/q.sh +1 -0
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +13 -14
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +7 -7
- machineconfig/utils/code.py +11 -21
- machineconfig/utils/installer_utils/installer_class.py +4 -4
- machineconfig/utils/meta.py +166 -0
- machineconfig/utils/ssh.py +10 -13
- {machineconfig-5.56.dist-info → machineconfig-5.59.dist-info}/METADATA +1 -1
- {machineconfig-5.56.dist-info → machineconfig-5.59.dist-info}/RECORD +12 -11
- {machineconfig-5.56.dist-info → machineconfig-5.59.dist-info}/WHEEL +0 -0
- {machineconfig-5.56.dist-info → machineconfig-5.59.dist-info}/entry_points.txt +0 -0
- {machineconfig-5.56.dist-info → machineconfig-5.59.dist-info}/top_level.txt +0 -0
|
@@ -11,7 +11,6 @@ from machineconfig.utils.code import get_shell_file_executing_python_script, wri
|
|
|
11
11
|
import platform
|
|
12
12
|
import subprocess
|
|
13
13
|
from typing import Optional, Literal
|
|
14
|
-
from pathlib import Path
|
|
15
14
|
|
|
16
15
|
|
|
17
16
|
console = Console()
|
|
@@ -96,13 +95,14 @@ git pull originEnc master
|
|
|
96
95
|
|
|
97
96
|
# ================================================================================
|
|
98
97
|
option1 = "Delete remote copy and push local:"
|
|
99
|
-
|
|
100
|
-
from machineconfig.scripts.python.
|
|
101
|
-
|
|
102
|
-
""
|
|
103
|
-
|
|
98
|
+
def func2(remote_repo: str, local_repo: str, cloud: str):
|
|
99
|
+
from machineconfig.scripts.python.repos_helpers.sync import delete_remote_repo_copy_and_push_local
|
|
100
|
+
delete_remote_repo_copy_and_push_local(remote_repo=remote_repo, local_repo=local_repo, cloud=cloud)
|
|
101
|
+
return "done"
|
|
102
|
+
from machineconfig.utils.meta import function_to_script
|
|
103
|
+
program_1_py = function_to_script(func=func2, call_with_args=None, call_with_kwargs={"remote_repo": str(repo_remote_root), "local_repo": str(repo_local_root), "cloud": cloud_resolved})
|
|
104
|
+
shell_file_1 = get_shell_file_executing_python_script(python_script=program_1_py, ve_path=None, executable="uv run --with machineconfig")
|
|
104
105
|
# ================================================================================
|
|
105
|
-
|
|
106
106
|
option2 = "Delete local repo and replace it with remote copy:"
|
|
107
107
|
program_2 = f"""
|
|
108
108
|
rm -rfd {repo_local_root}
|
|
@@ -114,16 +114,15 @@ sudo chmod 600 $HOME/.ssh/*
|
|
|
114
114
|
sudo chmod 700 $HOME/.ssh
|
|
115
115
|
sudo chmod +x $HOME/dotfiles/scripts/linux -R
|
|
116
116
|
"""
|
|
117
|
-
|
|
118
117
|
shell_file_2 = write_shell_script_to_file(shell_script=program_2)
|
|
119
|
-
|
|
120
118
|
# ================================================================================
|
|
121
119
|
option3 = "Inspect repos:"
|
|
122
|
-
|
|
123
|
-
from machineconfig.scripts.python.
|
|
124
|
-
|
|
125
|
-
""
|
|
126
|
-
|
|
120
|
+
def func(repo_local_root: str, repo_remote_root: str):
|
|
121
|
+
from machineconfig.scripts.python.repos_helpers.sync import inspect_repos
|
|
122
|
+
inspect_repos(repo_local_root=repo_local_root, repo_remote_root=repo_remote_root)
|
|
123
|
+
return "done"
|
|
124
|
+
program_3_py = function_to_script(func=func, call_with_args=None, call_with_kwargs={"repo_local_root": str(repo_local_root), "repo_remote_root": str(repo_remote_root)})
|
|
125
|
+
shell_file_3 = get_shell_file_executing_python_script(python_script=program_3_py, ve_path=None, executable="uv run --with machineconfig")
|
|
127
126
|
# ================================================================================
|
|
128
127
|
|
|
129
128
|
option4 = "Remove problematic rclone file from repo and replace with remote:"
|
|
@@ -2,30 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
|
|
4
4
|
function devops {
|
|
5
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.
|
|
5
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig devops $args
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
function cloud {
|
|
9
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.
|
|
9
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig cloud $args
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
function croshell {
|
|
13
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.
|
|
13
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig croshell $args
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
function agents {
|
|
17
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.
|
|
17
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig agents $args
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
function fire {
|
|
21
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.
|
|
21
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig fire $args
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
function ftpx {
|
|
25
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.
|
|
25
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig ftpx $args
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
function sessions {
|
|
29
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.
|
|
29
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig sessions $args
|
|
30
30
|
}
|
|
31
31
|
|
machineconfig/utils/code.py
CHANGED
|
@@ -10,14 +10,16 @@ from machineconfig.utils.ve import get_ve_activate_line
|
|
|
10
10
|
from machineconfig.utils.path_extended import PathExtended
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
def get_shell_script_executing_python_file(python_file: str, func: Optional[str], ve_path: str, strict_execution: bool = True):
|
|
14
|
-
if
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
def get_shell_script_executing_python_file(python_file: str, func: Optional[str], ve_path: Optional[str], executable: Optional[str], strict_execution: bool = True):
|
|
14
|
+
if executable is None: exe_resolved = "python"
|
|
15
|
+
else: exe_resolved = executable
|
|
16
|
+
if func is None: exec_line = f"""{exe_resolved} {python_file}"""
|
|
17
|
+
else: exec_line = f"""{exe_resolved} -m fire {python_file} {func}"""
|
|
18
|
+
if ve_path is None: ve_activate_line = ""
|
|
19
|
+
else: ve_activate_line = get_ve_activate_line(ve_path)
|
|
18
20
|
shell_script = f"""
|
|
19
21
|
echo "Executing `{exec_line}`"
|
|
20
|
-
{
|
|
22
|
+
{ve_activate_line}
|
|
21
23
|
{exec_line}
|
|
22
24
|
deactivate || true
|
|
23
25
|
"""
|
|
@@ -31,7 +33,7 @@ deactivate || true
|
|
|
31
33
|
return shell_script
|
|
32
34
|
|
|
33
35
|
|
|
34
|
-
def get_shell_file_executing_python_script(python_script: str, ve_path: str, verbose: bool = True):
|
|
36
|
+
def get_shell_file_executing_python_script(python_script: str, ve_path: Optional[str], executable: Optional[str], verbose: bool = True):
|
|
35
37
|
if verbose:
|
|
36
38
|
python_script = f"""
|
|
37
39
|
code = r'''{python_script}'''
|
|
@@ -47,7 +49,7 @@ except ImportError:
|
|
|
47
49
|
python_file = PathExtended.tmp().joinpath("tmp_scripts", "python", randstr() + ".py")
|
|
48
50
|
python_file.parent.mkdir(parents=True, exist_ok=True)
|
|
49
51
|
python_file.write_text(python_script, encoding="utf-8")
|
|
50
|
-
shell_script = get_shell_script_executing_python_file(python_file=str(python_file), func=None, ve_path=ve_path)
|
|
52
|
+
shell_script = get_shell_script_executing_python_file(python_file=str(python_file), func=None, ve_path=ve_path, executable=executable)
|
|
51
53
|
shell_file = write_shell_script_to_file(shell_script)
|
|
52
54
|
return shell_file
|
|
53
55
|
|
|
@@ -113,9 +115,7 @@ def run_shell_script(script: str, display_script: bool = True, clean_env: bool =
|
|
|
113
115
|
if display_script:
|
|
114
116
|
from rich.syntax import Syntax
|
|
115
117
|
console.print(Panel(Syntax(code=script, lexer=lexer), title=f"📄 shell script @ {temp_script_path}", subtitle="shell script being executed"), style="bold red")
|
|
116
|
-
|
|
117
118
|
env = {} if clean_env else None
|
|
118
|
-
|
|
119
119
|
if platform.system() == "Windows":
|
|
120
120
|
import subprocess
|
|
121
121
|
proc = subprocess.run(f'powershell -ExecutionPolicy Bypass -File "{temp_script_path}"', check=True, shell=True, env=env)
|
|
@@ -133,14 +133,4 @@ def run_shell_script(script: str, display_script: bool = True, clean_env: bool =
|
|
|
133
133
|
console.print(f"⚠️ [yellow]Script executed with warnings (return code {proc.returncode}):[/yellow] [blue]{temp_script_path}[/blue]")
|
|
134
134
|
temp_script_path.unlink(missing_ok=True)
|
|
135
135
|
console.print(f"🗑️ [blue]Temporary script deleted:[/blue] [green]{temp_script_path}[/green]")
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
# def run_command(command: str, description: str) -> bool:
|
|
139
|
-
# """Execute a shell command and return success status."""
|
|
140
|
-
# console.print(f"\n🔧 {description}", style="bold cyan")
|
|
141
|
-
# try:
|
|
142
|
-
# result = subprocess.run(command, shell=True, check=True, capture_output=False)
|
|
143
|
-
# return result.returncode == 0
|
|
144
|
-
# except subprocess.CalledProcessError as e:
|
|
145
|
-
# console.print(f"❌ Error executing command: {e}", style="bold red")
|
|
146
|
-
# return False
|
|
136
|
+
return proc
|
|
@@ -39,9 +39,7 @@ class Installer:
|
|
|
39
39
|
result_old = subprocess.run(f"{exe_name} --version", shell=True, capture_output=True, text=True)
|
|
40
40
|
old_version_cli = result_old.stdout.strip()
|
|
41
41
|
print(f"📊 Current version: {old_version_cli or 'Not installed'}")
|
|
42
|
-
|
|
43
42
|
self.install(version=version)
|
|
44
|
-
|
|
45
43
|
result_new = subprocess.run(f"{exe_name} --version", shell=True, capture_output=True, text=True)
|
|
46
44
|
new_version_cli = result_new.stdout.strip()
|
|
47
45
|
print(f"📊 New version: {new_version_cli}")
|
|
@@ -77,8 +75,10 @@ class Installer:
|
|
|
77
75
|
desc = package_manager + " installation"
|
|
78
76
|
version_to_be_installed = package_manager + "Latest"
|
|
79
77
|
print(f"🚀 Running: {installer_arch_os}")
|
|
80
|
-
result = subprocess.run(installer_arch_os, shell=True, capture_output=True, text=True)
|
|
81
|
-
|
|
78
|
+
# result = subprocess.run(installer_arch_os, shell=True, capture_output=True, text=True)
|
|
79
|
+
from machineconfig.utils.code import run_shell_script
|
|
80
|
+
result = run_shell_script(installer_arch_os)
|
|
81
|
+
success = result.returncode == 0 and result.stderr == "".encode()
|
|
82
82
|
if not success:
|
|
83
83
|
print(f"❌ {desc} failed")
|
|
84
84
|
if result.stdout:
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"""Metaprogramming utilities for analyzing and serializing Python functions."""
|
|
2
|
+
|
|
3
|
+
import ast
|
|
4
|
+
import inspect
|
|
5
|
+
import textwrap
|
|
6
|
+
from types import FunctionType, ModuleType
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def function_to_script(func: FunctionType, call_with_args: tuple[Any, ...] | None = None, call_with_kwargs: dict[str, Any] | None = None) -> str:
|
|
11
|
+
"""Convert a function to a standalone executable Python script.
|
|
12
|
+
|
|
13
|
+
This function analyzes a given function and generates a complete Python script
|
|
14
|
+
that includes all necessary imports, global variables, the function definition,
|
|
15
|
+
and optionally a function call.
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
func: The function to convert to a script
|
|
19
|
+
call_with_args: Optional tuple of positional arguments to call the function with
|
|
20
|
+
call_with_kwargs: Optional dict of keyword arguments to call the function with
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
A complete Python script as a string that can be executed independently
|
|
24
|
+
|
|
25
|
+
Raises:
|
|
26
|
+
ValueError: If the function cannot be inspected or analyzed
|
|
27
|
+
"""
|
|
28
|
+
if not callable(func) or not hasattr(func, '__code__'):
|
|
29
|
+
raise ValueError(f"Expected a function, got {type(func)}")
|
|
30
|
+
|
|
31
|
+
call_with_args = call_with_args or ()
|
|
32
|
+
call_with_kwargs = call_with_kwargs or {}
|
|
33
|
+
|
|
34
|
+
imports = _extract_imports(func)
|
|
35
|
+
globals_needed = _extract_globals(func)
|
|
36
|
+
source_code = _get_function_source(func)
|
|
37
|
+
call_statement = _generate_call_statement(func, call_with_args, call_with_kwargs)
|
|
38
|
+
|
|
39
|
+
script_parts: list[str] = []
|
|
40
|
+
|
|
41
|
+
if imports:
|
|
42
|
+
script_parts.append(imports)
|
|
43
|
+
script_parts.append("")
|
|
44
|
+
|
|
45
|
+
if globals_needed:
|
|
46
|
+
script_parts.append(globals_needed)
|
|
47
|
+
script_parts.append("")
|
|
48
|
+
|
|
49
|
+
script_parts.append(source_code)
|
|
50
|
+
script_parts.append("")
|
|
51
|
+
|
|
52
|
+
if call_statement:
|
|
53
|
+
script_parts.append("")
|
|
54
|
+
script_parts.append("if __name__ == '__main__':")
|
|
55
|
+
script_parts.append(f" {call_statement}")
|
|
56
|
+
|
|
57
|
+
return "\n".join(script_parts)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _get_function_source(func: FunctionType) -> str:
|
|
61
|
+
"""Extract the source code of a function."""
|
|
62
|
+
try:
|
|
63
|
+
source = inspect.getsource(func)
|
|
64
|
+
return textwrap.dedent(source)
|
|
65
|
+
except (OSError, TypeError) as e:
|
|
66
|
+
raise ValueError(f"Cannot get source code for function {func.__name__}: {e}") from e
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _extract_imports(func: FunctionType) -> str:
|
|
70
|
+
"""Extract all import statements needed by the function."""
|
|
71
|
+
import_statements: set[str] = set()
|
|
72
|
+
|
|
73
|
+
source = _get_function_source(func)
|
|
74
|
+
func_globals = func.__globals__
|
|
75
|
+
|
|
76
|
+
try:
|
|
77
|
+
tree = ast.parse(source)
|
|
78
|
+
except SyntaxError as e:
|
|
79
|
+
raise ValueError(f"Failed to parse function source: {e}") from e
|
|
80
|
+
|
|
81
|
+
used_names: set[str] = set()
|
|
82
|
+
for node in ast.walk(tree):
|
|
83
|
+
if isinstance(node, ast.Name):
|
|
84
|
+
used_names.add(node.id)
|
|
85
|
+
elif isinstance(node, ast.Attribute):
|
|
86
|
+
if isinstance(node.value, ast.Name):
|
|
87
|
+
used_names.add(node.value.id)
|
|
88
|
+
|
|
89
|
+
for name in used_names:
|
|
90
|
+
if name in func_globals:
|
|
91
|
+
obj = func_globals[name]
|
|
92
|
+
|
|
93
|
+
if isinstance(obj, ModuleType):
|
|
94
|
+
module_name = obj.__name__
|
|
95
|
+
if name == module_name.split('.')[-1]:
|
|
96
|
+
import_statements.add(f"import {module_name}")
|
|
97
|
+
else:
|
|
98
|
+
import_statements.add(f"import {module_name} as {name}")
|
|
99
|
+
|
|
100
|
+
elif hasattr(obj, '__module__') and obj.__module__ != '__main__':
|
|
101
|
+
try:
|
|
102
|
+
module_name = obj.__module__
|
|
103
|
+
obj_name = obj.__name__ if hasattr(obj, '__name__') else name
|
|
104
|
+
|
|
105
|
+
if module_name and module_name != 'builtins':
|
|
106
|
+
if obj_name == name:
|
|
107
|
+
import_statements.add(f"from {module_name} import {obj_name}")
|
|
108
|
+
else:
|
|
109
|
+
import_statements.add(f"from {module_name} import {obj_name} as {name}")
|
|
110
|
+
except AttributeError:
|
|
111
|
+
pass
|
|
112
|
+
|
|
113
|
+
return "\n".join(sorted(import_statements))
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def _extract_globals(func: FunctionType) -> str:
|
|
117
|
+
"""Extract global variables needed by the function."""
|
|
118
|
+
global_assignments: list[str] = []
|
|
119
|
+
|
|
120
|
+
source = _get_function_source(func)
|
|
121
|
+
func_globals = func.__globals__
|
|
122
|
+
|
|
123
|
+
try:
|
|
124
|
+
tree = ast.parse(source)
|
|
125
|
+
except SyntaxError as e:
|
|
126
|
+
raise ValueError(f"Failed to parse function source: {e}") from e
|
|
127
|
+
|
|
128
|
+
used_names: set[str] = set()
|
|
129
|
+
for node in ast.walk(tree):
|
|
130
|
+
if isinstance(node, ast.Name):
|
|
131
|
+
used_names.add(node.id)
|
|
132
|
+
elif isinstance(node, ast.Attribute):
|
|
133
|
+
if isinstance(node.value, ast.Name):
|
|
134
|
+
used_names.add(node.value.id)
|
|
135
|
+
|
|
136
|
+
for name in used_names:
|
|
137
|
+
if name in func_globals:
|
|
138
|
+
obj = func_globals[name]
|
|
139
|
+
|
|
140
|
+
if not isinstance(obj, (ModuleType, FunctionType, type)):
|
|
141
|
+
if not (hasattr(obj, '__module__') and hasattr(obj, '__name__')):
|
|
142
|
+
try:
|
|
143
|
+
repr_str = repr(obj)
|
|
144
|
+
if len(repr_str) < 1000 and '\n' not in repr_str:
|
|
145
|
+
global_assignments.append(f"{name} = {repr_str}")
|
|
146
|
+
except Exception:
|
|
147
|
+
global_assignments.append(f"# Warning: Could not serialize global variable '{name}'")
|
|
148
|
+
|
|
149
|
+
return "\n".join(global_assignments)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def _generate_call_statement(func: FunctionType, args: tuple[Any, ...], kwargs: dict[str, Any]) -> str:
|
|
153
|
+
"""Generate a function call statement with the given arguments."""
|
|
154
|
+
if not args and not kwargs:
|
|
155
|
+
return f"{func.__name__}()"
|
|
156
|
+
|
|
157
|
+
arg_parts: list[str] = []
|
|
158
|
+
|
|
159
|
+
for arg in args:
|
|
160
|
+
arg_parts.append(repr(arg))
|
|
161
|
+
|
|
162
|
+
for key, value in kwargs.items():
|
|
163
|
+
arg_parts.append(f"{key}={repr(value)}")
|
|
164
|
+
|
|
165
|
+
args_str = ", ".join(arg_parts)
|
|
166
|
+
return f"{func.__name__}({args_str})"
|
machineconfig/utils/ssh.py
CHANGED
|
@@ -214,12 +214,11 @@ class SSH: # inferior alternative: https://github.com/fabric/fabric
|
|
|
214
214
|
res.print()
|
|
215
215
|
self.terminal_responses.append(res)
|
|
216
216
|
return res
|
|
217
|
-
|
|
218
217
|
def run_py(self, cmd: str, desc: str = "", return_obj: bool = False, verbose: bool = True, strict_err: bool = False, strict_returncode: bool = False) -> Union[Any, Response]:
|
|
219
218
|
assert '"' not in cmd, 'Avoid using `"` in your command. I dont know how to handle this when passing is as command to python in pwsh command.'
|
|
220
219
|
if not return_obj:
|
|
221
220
|
return self.run(
|
|
222
|
-
cmd=f"""$HOME/.local/bin/
|
|
221
|
+
cmd=f"""$HOME/.local/bin/uv run --with machineconfig python -c "{cmd}\n""" + '"',
|
|
223
222
|
desc=desc or f"run_py on {self.get_remote_repr()}",
|
|
224
223
|
verbose=verbose,
|
|
225
224
|
strict_err=strict_err,
|
|
@@ -252,18 +251,16 @@ print(path)""", desc=desc, verbose=verbose, strict_err=True, strict_returncode=T
|
|
|
252
251
|
if r is False:
|
|
253
252
|
raise RuntimeError(f"Meta.SSH Error: source `{source_obj}` is a directory! either set `r=True` for recursive sending or raise `z=True` flag to zip it first.")
|
|
254
253
|
source_list: list[PathExtended] = source_obj.search("*", folders=False, files=True, r=True)
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
path
|
|
260
|
-
|
|
261
|
-
|
|
254
|
+
def func(item: PathExtended, overwrite: bool) -> None:
|
|
255
|
+
from machineconfig.utils.path_extended import PathExtended as P
|
|
256
|
+
path=P(r'{PathExtended(target).as_posix()}').expanduser()
|
|
257
|
+
if overwrite: path.delete(sure=True)
|
|
258
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
259
|
+
from machineconfig.utils.meta import function_to_script
|
|
260
|
+
command = function_to_script(func=func, call_with_kwargs={"item": PathExtended(target).as_posix(), "overwrite": overwrite})
|
|
261
|
+
remote_root = (self.run_py(command,
|
|
262
262
|
desc=f"Creating Target directory `{PathExtended(target).as_posix()}` @ {self.get_remote_repr()}",
|
|
263
|
-
verbose=False,
|
|
264
|
-
).op
|
|
265
|
-
or ""
|
|
266
|
-
)
|
|
263
|
+
verbose=False,).op or "")
|
|
267
264
|
for idx, item in enumerate(source_list):
|
|
268
265
|
print(f" {idx + 1:03d}. {item}")
|
|
269
266
|
for item in source_list:
|
|
@@ -72,7 +72,7 @@ machineconfig/jobs/installer/linux_scripts/edge.sh,sha256=f1UI2Z2s0ToZ-QGlzkS1Th
|
|
|
72
72
|
machineconfig/jobs/installer/linux_scripts/nerdfont.sh,sha256=ute9wl4BcqHUqavVHWJlnMcmugdb50LbnUVlU0cUVso,1475
|
|
73
73
|
machineconfig/jobs/installer/linux_scripts/ngrok.sh,sha256=K-t62nhnAHxhppTmqjubIJRHozkNHfBxXGbn1Oz3w-A,287
|
|
74
74
|
machineconfig/jobs/installer/linux_scripts/pgsql.sh,sha256=FbIteF6RVCcDdHl8seFFO7FuAX9siZpkwr9WVeKn5NA,1655
|
|
75
|
-
machineconfig/jobs/installer/linux_scripts/q.sh,sha256=
|
|
75
|
+
machineconfig/jobs/installer/linux_scripts/q.sh,sha256=lPSHBeZm4z6xv5K3cYPiOkK0A-LaNSNJN2ysVb1Qa9Y,261
|
|
76
76
|
machineconfig/jobs/installer/linux_scripts/redis.sh,sha256=GbElaDpkICLL6_XnkPev0UPZm4wQ8euGoOmrX2okneg,2064
|
|
77
77
|
machineconfig/jobs/installer/linux_scripts/timescaledb.sh,sha256=PTvo7KBpyxmWdpVoBK4cuPJ5slxJIPlVTfGQYnvKEQg,2508
|
|
78
78
|
machineconfig/jobs/installer/linux_scripts/vscode.sh,sha256=fI6lNCWUjlstNE319Y-rUtimvLLb9GcNh3z9t1KRaaE,4541
|
|
@@ -208,7 +208,7 @@ machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py,sha25
|
|
|
208
208
|
machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py,sha256=4MrlCVijbx7GQyAN9s5LDh-7heSjMXYrXdqiP6uC3ug,5378
|
|
209
209
|
machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
210
210
|
machineconfig/scripts/python/helpers_repos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
211
|
-
machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=
|
|
211
|
+
machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=V_gSNiPqyvoAnZcJAHATqXqQ6RSgC002ayxhJuhP6M4,9559
|
|
212
212
|
machineconfig/scripts/python/helpers_repos/grource.py,sha256=IywQ1NDPcLXM5Tr9xhmq4tHfYspLRs3pF20LP2TlgIQ,14595
|
|
213
213
|
machineconfig/scripts/python/helpers_repos/secure_repo.py,sha256=G_quiKOLNkWD5UG8ekexgh9xbpW4Od-J1pLJbLLWnpg,993
|
|
214
214
|
machineconfig/scripts/python/nw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -363,15 +363,16 @@ machineconfig/setup_windows/others/power_options.ps1,sha256=c7Hn94jBD5GWF29CxMhm
|
|
|
363
363
|
machineconfig/setup_windows/ssh/add-sshkey.ps1,sha256=qfPdqCpd9KP3VhH4ifsUm1Xvec7c0QVl4Wt8JIAm9HQ,1653
|
|
364
364
|
machineconfig/setup_windows/ssh/add_identity.ps1,sha256=b8ZXpmNUSw3IMYvqSY7ClpdWPG39FS7MefoWnRhWN2U,506
|
|
365
365
|
machineconfig/setup_windows/ssh/openssh-server.ps1,sha256=OMlYQdvuJQNxF5EILLPizB6BZAT3jAmDsv1WcVVxpFQ,2529
|
|
366
|
-
machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=
|
|
366
|
+
machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=4mZx9YSRD6pyk17dtxBikg1CDZs83FVZgZ2BLpPhHd0,863
|
|
367
367
|
machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
368
368
|
machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=ogxJnwpdcpH7N6dFJu95UCNoGYirZKQho_3X0F_hmXs,6791
|
|
369
369
|
machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
370
370
|
machineconfig/utils/accessories.py,sha256=W_9dLzjwNTW5JQk_pe3B2ijQ1nA2-8Kdg2r7VBtzgQs,4340
|
|
371
|
-
machineconfig/utils/code.py,sha256=
|
|
371
|
+
machineconfig/utils/code.py,sha256=yUoRzw7jTL-f3I0liyxguyzpki8d1h1ieJmG6dHzkDQ,6300
|
|
372
372
|
machineconfig/utils/installer.py,sha256=ZnhW_gRmGlq5uXwzNvIn-x1vXuOJxkzVqjNu188f37s,10465
|
|
373
373
|
machineconfig/utils/io.py,sha256=rzEwAnq-gyT29Y4CDHHGxAA6ddIIFOCxrqZ6dn0ALa4,2255
|
|
374
374
|
machineconfig/utils/links.py,sha256=KM6vIn3hag9FYEzLSHP5MAM9tU_RStw2mCq2_OvmmZA,23672
|
|
375
|
+
machineconfig/utils/meta.py,sha256=fDn7cpq6iqAPzX2eKLSK9DZb0870rluR7eLDx5NgNaw,5994
|
|
375
376
|
machineconfig/utils/notifications.py,sha256=tuXIudcip0tEioG-bm8BbLr3FMDve4f6BktlznBhKxM,9013
|
|
376
377
|
machineconfig/utils/options.py,sha256=vUO4Kej-vDOv64wHr2HNDyu6PATURpjd7xp6N8OOoJg,7083
|
|
377
378
|
machineconfig/utils/path_extended.py,sha256=Xjdn2AVnB8p1jfNMNe2kJutVa5zGnFFJVGZbw-Bp_hg,53200
|
|
@@ -380,7 +381,7 @@ machineconfig/utils/procs.py,sha256=w75oGKfR7FpT1pGTGd2XscnEOO0IHBWxohLbi69hLqg,
|
|
|
380
381
|
machineconfig/utils/scheduler.py,sha256=jZ_1yghqA3-aINPRmE_76gboqJc0UElroR7urNOfXKs,14940
|
|
381
382
|
machineconfig/utils/scheduling.py,sha256=RF1iXJpqf4Dg18jdZWtBixz97KAHC6VKYqTFSpdLWuc,11188
|
|
382
383
|
machineconfig/utils/source_of_truth.py,sha256=ZAnCRltiM07ig--P6g9_6nEAvNFC4X4ERFTVcvpIYsE,764
|
|
383
|
-
machineconfig/utils/ssh.py,sha256=
|
|
384
|
+
machineconfig/utils/ssh.py,sha256=EF7VjOcv5oYnKhEMfPSNgyQy4RLqMUKXWJ9GlFoqUxw,21360
|
|
384
385
|
machineconfig/utils/terminal.py,sha256=IlmOByfQG-vjhaFFxxzU5rWzP5_qUzmalRfuey3PAmc,11801
|
|
385
386
|
machineconfig/utils/upgrade_packages.py,sha256=H96zVJEWXJW07nh5vhjuSCrPtXGqoUb7xeJsFYYdmCI,3330
|
|
386
387
|
machineconfig/utils/ve.py,sha256=L-6PBXnQGXThiwWgheJMQoisAZOZA6SVCbGw2J-GFnI,2414
|
|
@@ -399,13 +400,13 @@ machineconfig/utils/installer_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
|
|
|
399
400
|
machineconfig/utils/installer_utils/github_release_bulk.py,sha256=WJf_qZlF02SmIc6C7o1h4Gy4gAaJAfeAS8O9s2Itj-k,6535
|
|
400
401
|
machineconfig/utils/installer_utils/installer.py,sha256=A1lAZNUFS1_MyJbpFdomiPbKCLVBknmWbwojs0C7F7Y,9695
|
|
401
402
|
machineconfig/utils/installer_utils/installer_abc.py,sha256=ZoMtINHD9cHEu4R5SYUWgHLTAqo4F2a33pBrEOGX4zs,11693
|
|
402
|
-
machineconfig/utils/installer_utils/installer_class.py,sha256=
|
|
403
|
+
machineconfig/utils/installer_utils/installer_class.py,sha256=UU0ccaNWY16a-ErySkXnxzWnmhPesHNRhfPIVVPtzKA,18363
|
|
403
404
|
machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=Xbi59rU35AzR7HZZ8ZQ8aUu_FjSgijNqc8Sme0rCk2Y,2050
|
|
404
405
|
machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoSpdmTIdgS9LS-RvE-QZ-D260tD3o,1214
|
|
405
406
|
machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
|
|
406
407
|
machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
|
|
407
|
-
machineconfig-5.
|
|
408
|
-
machineconfig-5.
|
|
409
|
-
machineconfig-5.
|
|
410
|
-
machineconfig-5.
|
|
411
|
-
machineconfig-5.
|
|
408
|
+
machineconfig-5.59.dist-info/METADATA,sha256=sGRrPypQIIvxiaL6rrcNeV72CNH1JqRFllT5da_heZM,3103
|
|
409
|
+
machineconfig-5.59.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
410
|
+
machineconfig-5.59.dist-info/entry_points.txt,sha256=0zMBUFkDgYw5mB3ASxpONEjTFMAXAkTFHHfAr5c1SKg,423
|
|
411
|
+
machineconfig-5.59.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
|
|
412
|
+
machineconfig-5.59.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|