machineconfig 6.45__py3-none-any.whl → 6.47__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/scripts/python/croshell.py +6 -4
- machineconfig/scripts/python/devops_helpers/cli_config.py +1 -1
- machineconfig/scripts/python/devops_helpers/cli_self.py +3 -3
- machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +1 -1
- machineconfig/scripts/python/nw/mount_nfs +1 -1
- machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +1 -1
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
- machineconfig/setup_linux/web_shortcuts/interactive.sh +1 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +1 -1
- machineconfig/utils/code.py +28 -67
- machineconfig/utils/scheduler.py +30 -36
- machineconfig/utils/ssh.py +1 -1
- {machineconfig-6.45.dist-info → machineconfig-6.47.dist-info}/METADATA +1 -1
- {machineconfig-6.45.dist-info → machineconfig-6.47.dist-info}/RECORD +18 -18
- {machineconfig-6.45.dist-info → machineconfig-6.47.dist-info}/WHEEL +0 -0
- {machineconfig-6.45.dist-info → machineconfig-6.47.dist-info}/entry_points.txt +0 -0
- {machineconfig-6.45.dist-info → machineconfig-6.47.dist-info}/top_level.txt +0 -0
|
@@ -121,20 +121,22 @@ from pathlib import Path
|
|
|
121
121
|
fire_line = f"uv run --with visidata,pyarrow vd {str(file_obj)}"
|
|
122
122
|
elif marimo:
|
|
123
123
|
if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" """
|
|
124
|
-
else: requirements = """--with "marimo,machineconfig[plot]>=6.
|
|
124
|
+
else: requirements = """--with "marimo,machineconfig[plot]>=6.47" """
|
|
125
125
|
fire_line = f"""
|
|
126
126
|
cd {str(pyfile.parent)}
|
|
127
127
|
uv run --with "marimo" marimo convert {pyfile.name} -o marimo_nb.py
|
|
128
128
|
uv run {requirements} marimo edit --host 0.0.0.0 marimo_nb.py
|
|
129
129
|
"""
|
|
130
130
|
elif jupyter:
|
|
131
|
-
|
|
131
|
+
if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" """
|
|
132
|
+
else: requirements = """--with "machineconfig[plot]>=6.47" """
|
|
133
|
+
fire_line = f"uv run {requirements} jupyter-lab {str(nb_target)}"
|
|
132
134
|
elif vscode:
|
|
133
135
|
fire_line = f"""
|
|
134
136
|
cd {str(pyfile.parent)}
|
|
135
137
|
uv init --python 3.14
|
|
136
138
|
uv venv
|
|
137
|
-
uv add "machineconfig[plot]>=6.
|
|
139
|
+
uv add "machineconfig[plot]>=6.47"
|
|
138
140
|
# code serve-web
|
|
139
141
|
code --new-window {str(pyfile)}
|
|
140
142
|
"""
|
|
@@ -149,7 +151,7 @@ code --new-window {str(pyfile)}
|
|
|
149
151
|
else:
|
|
150
152
|
console.print(Panel("❌ Could not determine the local machineconfig repo root. Please ensure the `REPO_ROOT` in `source_of_truth.py` is correctly set to the local path of the machineconfig repo, or do not use the `--local` flag.", title="Error", border_style="red"))
|
|
151
153
|
return
|
|
152
|
-
else: ve_line = """--with "machineconfig[plot]>=6.
|
|
154
|
+
else: ve_line = """--with "machineconfig[plot]>=6.47" """
|
|
153
155
|
# ve_path_maybe, ipython_profile_maybe = get_ve_path_and_ipython_profile(Path.cwd())
|
|
154
156
|
# --python 3.14
|
|
155
157
|
fire_line = f"uv run {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
|
|
@@ -42,7 +42,7 @@ def path():
|
|
|
42
42
|
from pathlib import Path
|
|
43
43
|
path = Path(navigator.__file__).resolve().parent.joinpath("path_manager_tui.py")
|
|
44
44
|
from machineconfig.utils.code import run_shell_script
|
|
45
|
-
if not Path.home().joinpath("code/machineconfig").exists(): executable = """--with "machineconfig>=6.
|
|
45
|
+
if not Path.home().joinpath("code/machineconfig").exists(): executable = """--with "machineconfig>=6.47,textual" """
|
|
46
46
|
else: executable = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with textual"""
|
|
47
47
|
run_shell_script(f"""uv run {executable} {path}""")
|
|
48
48
|
|
|
@@ -40,9 +40,9 @@ def install(no_copy_assets: Annotated[bool, typer.Option("--no-assets-copy", "-n
|
|
|
40
40
|
else:
|
|
41
41
|
import platform
|
|
42
42
|
if platform.system() == "Windows":
|
|
43
|
-
run_shell_script(r"""$HOME\.local\bin\uv.exe tool install --upgrade "machineconfig>=6.
|
|
43
|
+
run_shell_script(r"""$HOME\.local\bin\uv.exe tool install --upgrade "machineconfig>=6.47" """)
|
|
44
44
|
else:
|
|
45
|
-
run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.
|
|
45
|
+
run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.47" """)
|
|
46
46
|
from machineconfig.profile.create_shell_profile import create_default_shell_profile
|
|
47
47
|
if not no_copy_assets:
|
|
48
48
|
create_default_shell_profile() # involves copying assets too
|
|
@@ -67,7 +67,7 @@ def navigate():
|
|
|
67
67
|
path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
|
|
68
68
|
from machineconfig.utils.code import run_shell_script
|
|
69
69
|
if Path.home().joinpath("code/machineconfig").exists(): executable = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with textual"""
|
|
70
|
-
else: executable = """--with "machineconfig>=6.
|
|
70
|
+
else: executable = """--with "machineconfig>=6.47,textual" """
|
|
71
71
|
run_shell_script(f"""uv run {executable} {path}""")
|
|
72
72
|
|
|
73
73
|
|
|
@@ -77,7 +77,7 @@ git pull originEnc master
|
|
|
77
77
|
"""
|
|
78
78
|
|
|
79
79
|
if Path.home().joinpath("code/machineconfig").exists(): executable = f"""uv run --project "{str(Path.home().joinpath("code/machineconfig"))}" """
|
|
80
|
-
else: executable = """uv run --with "machineconfig>=6.
|
|
80
|
+
else: executable = """uv run --with "machineconfig>=6.47" """
|
|
81
81
|
|
|
82
82
|
shell_path = write_shell_script_to_file(shell_script=script)
|
|
83
83
|
command = f". {shell_path}"
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# mkdir ~/data/local
|
|
6
6
|
# sudo mount -o nolock,noatime,nodiratime,proto=tcp,timeo=600,retrans=2,noac alex-p51s-5:/home/alex/data/local ./data/local
|
|
7
7
|
|
|
8
|
-
uv run --python 3.14 --with "machineconfig>=6.
|
|
8
|
+
uv run --python 3.14 --with "machineconfig>=6.47" python -m machineconfig.scripts.python.mount_nfs
|
|
9
9
|
# Check if remote server is reachable and share folder exists
|
|
10
10
|
if ! ping -c 1 "$remote_server" &> /dev/null; then
|
|
11
11
|
echo "💥 Error: Remote server $remote_server is not reachable."
|
|
@@ -8,7 +8,7 @@ def analyze_repo_development(repo_path: Annotated[str, typer.Argument(..., help=
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
count_lines_path = Path(count_lines.__file__)
|
|
10
10
|
# --project $HOME/code/ machineconfig --group plot
|
|
11
|
-
cmd = f"""uv run --python 3.14 --with "machineconfig[plot]>=6.
|
|
11
|
+
cmd = f"""uv run --python 3.14 --with "machineconfig[plot]>=6.47" {count_lines_path} analyze-over-time {repo_path}"""
|
|
12
12
|
from machineconfig.utils.code import run_shell_script
|
|
13
13
|
run_shell_script(cmd)
|
|
14
14
|
|
|
@@ -7,7 +7,7 @@ $user = ''
|
|
|
7
7
|
$sharePath = ''
|
|
8
8
|
$driveLetter = ''
|
|
9
9
|
|
|
10
|
-
uv run --python 3.14 --with "machineconfig>=6.
|
|
10
|
+
uv run --python 3.14 --with "machineconfig>=6.47" python -m machineconfig.scripts.python.mount_ssh
|
|
11
11
|
|
|
12
12
|
net use T: \\sshfs.kr\$user@$host.local
|
|
13
13
|
# this worked: net use T: \\sshfs\alex@alex-p51s-5.local
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
. <( curl -sSL "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/uv.sh")
|
|
3
3
|
mcfg() {
|
|
4
|
-
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=6.
|
|
4
|
+
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=6.47" mcfg "$@"
|
|
5
5
|
}
|
|
6
6
|
alias d="mcfg devops"
|
|
7
7
|
alias c="mcfg cloud"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
|
|
4
4
|
function mcfg {
|
|
5
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=6.
|
|
5
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=6.47" mcfg $args
|
|
6
6
|
}
|
|
7
7
|
function d { mcfg devops @args }
|
|
8
8
|
function c { mcfg cloud @args }
|
machineconfig/utils/code.py
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
+
import atexit
|
|
1
2
|
import platform
|
|
2
3
|
from typing import Optional
|
|
3
4
|
import subprocess
|
|
4
|
-
import os
|
|
5
|
-
# import time
|
|
6
5
|
from rich.console import Console
|
|
7
6
|
from rich.panel import Panel
|
|
8
7
|
from rich.syntax import Syntax
|
|
9
8
|
|
|
10
9
|
from machineconfig.utils.accessories import randstr
|
|
11
10
|
from machineconfig.utils.ve import get_ve_activate_line
|
|
12
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
11
|
+
from machineconfig.utils.path_extended import PathExtended # type: ignore[import-not-found]
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
def get_shell_script_executing_python_file(python_file: str, func: Optional[str], ve_path: Optional[str], executable: Optional[str], strict_execution: bool = True):
|
|
@@ -138,71 +137,33 @@ def run_shell_script(script: str, display_script: bool = True, clean_env: bool =
|
|
|
138
137
|
return proc
|
|
139
138
|
|
|
140
139
|
|
|
141
|
-
def run_shell_script_after_exit(script: str,
|
|
142
|
-
current_pid = os.getpid()
|
|
140
|
+
def run_shell_script_after_exit(script: str, display_script: bool = True) -> None:
|
|
143
141
|
console = Console()
|
|
144
142
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
""
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
check_interval={check_interval}
|
|
170
|
-
|
|
171
|
-
echo "🔍 Monitoring process PID: $target_pid"
|
|
172
|
-
|
|
173
|
-
while kill -0 $target_pid 2>/dev/null; do
|
|
174
|
-
sleep $check_interval
|
|
175
|
-
done
|
|
176
|
-
|
|
177
|
-
echo "✅ Process $target_pid has exited. Running script..."
|
|
178
|
-
|
|
179
|
-
# Execute the provided script
|
|
180
|
-
{script}
|
|
181
|
-
"""
|
|
182
|
-
suffix = ".sh"
|
|
183
|
-
cmd = ["bash"]
|
|
184
|
-
|
|
185
|
-
monitor_script_path = PathExtended.tmp().joinpath("tmp_scripts", "monitor", randstr() + suffix)
|
|
186
|
-
monitor_script_path.parent.mkdir(parents=True, exist_ok=True)
|
|
187
|
-
monitor_script_path.write_text(monitor_script, encoding="utf-8")
|
|
188
|
-
|
|
189
|
-
if display_script:
|
|
190
|
-
lexer = "powershell" if platform.system() == "Windows" else "bash"
|
|
191
|
-
console.print(Panel(Syntax(code=monitor_script, lexer=lexer), title=f"📄 Monitor script @ {monitor_script_path}", subtitle="Will run after current process exits"), style="bold yellow")
|
|
192
|
-
|
|
193
|
-
if platform.system() != "Windows":
|
|
194
|
-
monitor_script_path.chmod(0o755)
|
|
195
|
-
|
|
196
|
-
cmd.append(str(monitor_script_path))
|
|
197
|
-
|
|
198
|
-
if platform.system() == "Windows":
|
|
199
|
-
creation_flags = subprocess.CREATE_NEW_PROCESS_GROUP | subprocess.DETACHED_PROCESS # type: ignore
|
|
200
|
-
process = subprocess.Popen(cmd, creationflags=creation_flags, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, stdin=subprocess.DEVNULL)
|
|
201
|
-
else:
|
|
202
|
-
process = subprocess.Popen(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, stdin=subprocess.DEVNULL, start_new_session=True)
|
|
203
|
-
if display_script:
|
|
204
|
-
console.print(f"🚀 [green]Monitor process started with PID:[/green] [blue]{process.pid}[/blue]")
|
|
205
|
-
console.print(f"📍 [yellow]Watching PID:[/yellow] [blue]{current_pid}[/blue]")
|
|
143
|
+
def execute_script_at_exit() -> None:
|
|
144
|
+
if platform.system() == "Windows":
|
|
145
|
+
suffix = ".ps1"
|
|
146
|
+
lexer = "powershell"
|
|
147
|
+
else:
|
|
148
|
+
suffix = ".sh"
|
|
149
|
+
lexer = "bash"
|
|
150
|
+
|
|
151
|
+
script_path = PathExtended.tmp().joinpath("tmp_scripts", "exit", randstr() + suffix)
|
|
152
|
+
script_path.parent.mkdir(parents=True, exist_ok=True)
|
|
153
|
+
script_path.write_text(script, encoding="utf-8")
|
|
154
|
+
|
|
155
|
+
if display_script:
|
|
156
|
+
console.print(Panel(Syntax(code=script, lexer=lexer), title=f"📄 Exit script @ {script_path}", subtitle="Running at exit"), style="bold yellow")
|
|
157
|
+
|
|
158
|
+
if platform.system() != "Windows":
|
|
159
|
+
script_path.chmod(0o755)
|
|
160
|
+
|
|
161
|
+
if platform.system() == "Windows":
|
|
162
|
+
subprocess.run(["powershell", "-ExecutionPolicy", "Bypass", "-NoProfile", "-File", str(script_path)], check=False)
|
|
163
|
+
else:
|
|
164
|
+
subprocess.run(["bash", str(script_path)], check=False)
|
|
165
|
+
|
|
166
|
+
script_path.unlink(missing_ok=True)
|
|
206
167
|
|
|
207
|
-
|
|
168
|
+
atexit.register(execute_script_at_exit)
|
|
208
169
|
|
machineconfig/utils/scheduler.py
CHANGED
|
@@ -170,35 +170,32 @@ class CacheMemory[T]():
|
|
|
170
170
|
def __call__(self, fresh: bool = False) -> T:
|
|
171
171
|
self.last_call_is_fresh = False
|
|
172
172
|
if fresh or not hasattr(self, "cache"):
|
|
173
|
-
if
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
🆕 ════════════════════ NEW CACHE ════════════════════
|
|
177
|
-
|
|
178
|
-
ℹ️ Reason: {why}
|
|
179
|
-
════════════════════════════════════════════════════════""")
|
|
173
|
+
why = "There was an explicit fresh order." if fresh else "Previous cache never existed."
|
|
174
|
+
t0 = time.time()
|
|
175
|
+
self.logger.warning(f"""
|
|
176
|
+
🆕 ════════════════════ NEW {self.name} CACHE ════════════════════
|
|
177
|
+
ℹ️ Reason: {why}""")
|
|
180
178
|
self.cache = self.source_func()
|
|
179
|
+
self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
|
|
181
180
|
self.last_call_is_fresh = True
|
|
182
181
|
self.time_produced = datetime.now()
|
|
183
182
|
else:
|
|
184
183
|
age = self.age
|
|
185
184
|
if age > self.expire:
|
|
186
|
-
|
|
187
|
-
self.logger.warning(f"""
|
|
185
|
+
self.logger.warning(f"""
|
|
188
186
|
🔄 ════════════════════ CACHE UPDATE ════════════════════
|
|
189
187
|
⚠️ {self.name} cache: Updating cache from source func
|
|
190
|
-
⏱️ Age = {age} > {self.expire}
|
|
191
|
-
|
|
188
|
+
⏱️ Age = {age} > {self.expire}""")
|
|
189
|
+
t0 = time.time()
|
|
192
190
|
self.cache = self.source_func()
|
|
191
|
+
self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
|
|
193
192
|
self.last_call_is_fresh = True
|
|
194
193
|
self.time_produced = datetime.now()
|
|
195
194
|
else:
|
|
196
|
-
|
|
197
|
-
self.logger.warning(f"""
|
|
195
|
+
self.logger.warning(f"""
|
|
198
196
|
✅ ════════════════════ USING CACHE ════════════════════
|
|
199
197
|
📦 {self.name} cache: Using cached values
|
|
200
|
-
⏱️ Lag = {age}
|
|
201
|
-
════════════════════════════════════════════════════════""")
|
|
198
|
+
⏱️ Lag = {age}""")
|
|
202
199
|
return self.cache
|
|
203
200
|
|
|
204
201
|
@staticmethod
|
|
@@ -236,19 +233,18 @@ class Cache[T](): # This class helps to accelrate access to latest data coming
|
|
|
236
233
|
msg1 = f"""
|
|
237
234
|
📦 ════════════════════ CACHE OPERATION ════════════════════
|
|
238
235
|
🔄 {self.name} cache: Reading cached values from `{self.path}`
|
|
239
|
-
⏱️ Lag = {age}
|
|
240
|
-
════════════════════════════════════════════════════════════"""
|
|
236
|
+
⏱️ Lag = {age}"""
|
|
241
237
|
try:
|
|
242
238
|
self.cache = self.reader(self.path)
|
|
243
239
|
except Exception as ex:
|
|
244
|
-
|
|
245
|
-
msg2 = f"""
|
|
240
|
+
msg2 = f"""
|
|
246
241
|
❌ ════════════════════ CACHE ERROR ════════════════════
|
|
247
242
|
⚠️ {self.name} cache: Cache file is corrupted
|
|
248
|
-
🔍 Error: {ex}
|
|
249
|
-
|
|
250
|
-
|
|
243
|
+
🔍 Error: {ex}"""
|
|
244
|
+
self.logger.warning(msg1 + msg2)
|
|
245
|
+
t0 = time.time()
|
|
251
246
|
self.cache = self.source_func()
|
|
247
|
+
self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
|
|
252
248
|
self.last_call_is_fresh = True
|
|
253
249
|
self.time_produced = datetime.now()
|
|
254
250
|
# if self.path is not None:
|
|
@@ -256,15 +252,15 @@ class Cache[T](): # This class helps to accelrate access to latest data coming
|
|
|
256
252
|
return self.cache
|
|
257
253
|
return self(fresh=False) # may be the cache is old ==> check that by passing it through the logic again.
|
|
258
254
|
else:
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
self.logger.warning(f"""
|
|
255
|
+
# Previous cache never existed or there was an explicit fresh order.
|
|
256
|
+
why = "There was an explicit fresh order." if fresh else "Previous cache never existed or is corrupted."
|
|
257
|
+
self.logger.warning(f"""
|
|
263
258
|
🆕 ════════════════════ NEW CACHE ════════════════════
|
|
264
259
|
🔄 {self.name} cache: Populating fresh cache from source func
|
|
265
|
-
ℹ️ Reason: {why}
|
|
266
|
-
|
|
260
|
+
ℹ️ Reason: {why}""")
|
|
261
|
+
t0 = time.time()
|
|
267
262
|
self.cache = self.source_func() # fresh data.
|
|
263
|
+
self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
|
|
268
264
|
self.last_call_is_fresh = True
|
|
269
265
|
self.time_produced = datetime.now()
|
|
270
266
|
self.save(self.cache, self.path)
|
|
@@ -274,23 +270,21 @@ class Cache[T](): # This class helps to accelrate access to latest data coming
|
|
|
274
270
|
except AttributeError: # path doesn't exist (may be deleted) ==> need to repopulate cache form source_func.
|
|
275
271
|
return self(fresh=True)
|
|
276
272
|
if age > self.expire:
|
|
277
|
-
|
|
278
|
-
self.logger.warning(f"""
|
|
273
|
+
self.logger.warning(f"""
|
|
279
274
|
🔄 ════════════════════ CACHE UPDATE ════════════════════
|
|
280
275
|
⚠️ {self.name} cache: Updating cache from source func
|
|
281
|
-
⏱️ Age = {age} > {self.expire}
|
|
282
|
-
|
|
276
|
+
⏱️ Age = {age} > {self.expire}""")
|
|
277
|
+
t0 = time.time()
|
|
283
278
|
self.cache = self.source_func()
|
|
279
|
+
self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
|
|
284
280
|
self.last_call_is_fresh = True
|
|
285
281
|
self.time_produced = datetime.now()
|
|
286
282
|
self.save(self.cache, self.path)
|
|
287
283
|
else:
|
|
288
|
-
|
|
289
|
-
self.logger.warning(f"""
|
|
284
|
+
self.logger.warning(f"""
|
|
290
285
|
✅ ════════════════════ USING CACHE ════════════════════
|
|
291
286
|
📦 {self.name} cache: Using cached values
|
|
292
|
-
⏱️ Lag = {age}
|
|
293
|
-
════════════════════════════════════════════════════════""")
|
|
287
|
+
⏱️ Lag = {age}""")
|
|
294
288
|
return self.cache
|
|
295
289
|
|
|
296
290
|
@staticmethod
|
machineconfig/utils/ssh.py
CHANGED
|
@@ -6,7 +6,7 @@ from machineconfig.utils.terminal import Response, MACHINE
|
|
|
6
6
|
from machineconfig.utils.accessories import pprint
|
|
7
7
|
|
|
8
8
|
UV_RUN_CMD = "$HOME/.local/bin/uv run"
|
|
9
|
-
MACHINECONFIG_VERSION = "machineconfig>=6.
|
|
9
|
+
MACHINECONFIG_VERSION = "machineconfig>=6.47"
|
|
10
10
|
DEFAULT_PICKLE_SUBDIR = "tmp_results/tmp_scripts/ssh"
|
|
11
11
|
|
|
12
12
|
|
|
@@ -122,7 +122,7 @@ machineconfig/scripts/linux/other/switch_ip,sha256=NQfeKMBSbFY3eP6M-BadD-TQo5qMP
|
|
|
122
122
|
machineconfig/scripts/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
123
123
|
machineconfig/scripts/python/agents.py,sha256=gGeeWCI0AN_DyDJ3G5KR9qSsXv8zkUd5dBRRWqz-dQE,10722
|
|
124
124
|
machineconfig/scripts/python/cloud.py,sha256=jwftTQGhIP39wIKHB1lQbcbmo2dMnWoTcs-Wly3Ql5U,1263
|
|
125
|
-
machineconfig/scripts/python/croshell.py,sha256=
|
|
125
|
+
machineconfig/scripts/python/croshell.py,sha256=bOos2trhmmPM16g2VQcCLt8QbxdkOoNhDCasakk_Cmc,8007
|
|
126
126
|
machineconfig/scripts/python/devops.py,sha256=FXs7IhTkbl0kHST4VPQLKn9y8Y7MWJcJomLLBqiJkow,2440
|
|
127
127
|
machineconfig/scripts/python/devops_navigator.py,sha256=4O9_-ACeP748NcMjWQXZF7mBQpMPxqCGhLvPG3DMi4Q,236
|
|
128
128
|
machineconfig/scripts/python/entry.py,sha256=a0Zk_3RnIFTQ55zSQrvOOiKom_SaoxElPMmWQgGy4V0,2221
|
|
@@ -175,12 +175,12 @@ machineconfig/scripts/python/croshell_helpers/start_slidev.py,sha256=HfJReOusTPh
|
|
|
175
175
|
machineconfig/scripts/python/croshell_helpers/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
|
|
176
176
|
machineconfig/scripts/python/croshell_helpers/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
|
|
177
177
|
machineconfig/scripts/python/devops_helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
178
|
-
machineconfig/scripts/python/devops_helpers/cli_config.py,sha256=
|
|
178
|
+
machineconfig/scripts/python/devops_helpers/cli_config.py,sha256=A8xD9sqxYhoIn3qFgw7BHhK7bb4MZ2P8o7ysm8tuyq0,5652
|
|
179
179
|
machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py,sha256=rjTys4FNf9_feP9flWM7Zvq17dxWmetSiGaHPxp25nk,2737
|
|
180
180
|
machineconfig/scripts/python/devops_helpers/cli_data.py,sha256=2OWwp86-ncpGoSP9IblW7Jjej-wc-PuS8KRZ5xh0l1c,1774
|
|
181
181
|
machineconfig/scripts/python/devops_helpers/cli_nw.py,sha256=kXJkdO0xY4cpD0GWC0DcjdiQXf1iVt6OBwvJb3MghAk,4176
|
|
182
182
|
machineconfig/scripts/python/devops_helpers/cli_repos.py,sha256=qnpjSPM71p6vLgigIwItPo-XxR6iP9UaK7lxw3-CdfA,12505
|
|
183
|
-
machineconfig/scripts/python/devops_helpers/cli_self.py,sha256=
|
|
183
|
+
machineconfig/scripts/python/devops_helpers/cli_self.py,sha256=vfci6R--zTYYWpHiwJWe2AyCmSGDJ1vudYuTff19nB0,6167
|
|
184
184
|
machineconfig/scripts/python/devops_helpers/cli_share_server.py,sha256=q9pFJ6AxPuygMr3onMNOKEuuQHbVE_6Qoyo7xRT5FX0,4196
|
|
185
185
|
machineconfig/scripts/python/devops_helpers/cli_terminal.py,sha256=k_PzXaiGyE0vXr0Ii1XcJz2A7UvyPJrR31TRWt4RKRI,6019
|
|
186
186
|
machineconfig/scripts/python/devops_helpers/cli_utils.py,sha256=G2RHnOvNfEWjxETZjXVu688xyLL-c0Zq22p24kXLLQ8,3487
|
|
@@ -192,7 +192,7 @@ machineconfig/scripts/python/devops_helpers/themes/choose_pwsh_theme.ps1,sha256=
|
|
|
192
192
|
machineconfig/scripts/python/devops_helpers/themes/choose_wezterm_theme.py,sha256=pRXAGe2IpysYshsaF8CKEwHI8EGPtLcM8PtiAqM7vmM,3425
|
|
193
193
|
machineconfig/scripts/python/env_manager/__init__.py,sha256=E4LAHbU1wo2dLjE36ntv8U7QNTe8TasujUAYK9SLvWk,6
|
|
194
194
|
machineconfig/scripts/python/env_manager/path_manager_backend.py,sha256=ZVGlGJALhg7zNABDdwXxL7MFbL2BXPebObipXSLGbic,1552
|
|
195
|
-
machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=
|
|
195
|
+
machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=GcyhEppIyBllT3h14oW9dgvGPlTFih3yJsNSkx0S0_Y,6932
|
|
196
196
|
machineconfig/scripts/python/helper_navigator/__init__.py,sha256=6YBy1l9ISjHE0LctVwSRMV_OFq29FOInwXFN0Ff7owM,758
|
|
197
197
|
machineconfig/scripts/python/helper_navigator/command_builder.py,sha256=tMIonhYPWpdPGaiGPRg8JDCvyW0h2uxL15uL_JyWsnk,4617
|
|
198
198
|
machineconfig/scripts/python/helper_navigator/command_detail.py,sha256=i4MdiCOVaXdRmLqr4K-F1Mk1u93bl5heIN97cRPCnzg,1692
|
|
@@ -221,7 +221,7 @@ machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py,sha25
|
|
|
221
221
|
machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py,sha256=4MrlCVijbx7GQyAN9s5LDh-7heSjMXYrXdqiP6uC3ug,5378
|
|
222
222
|
machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
223
223
|
machineconfig/scripts/python/helpers_repos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
224
|
-
machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=
|
|
224
|
+
machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=aBTGjLYJGtR7miR932iDqaNS28EVcZKuxb-iT3j56Lw,9989
|
|
225
225
|
machineconfig/scripts/python/helpers_repos/grource.py,sha256=oJj1-gqlkV3Z_BrIOXRmtzoXcuBl0xTYfulJ5D0srOc,14656
|
|
226
226
|
machineconfig/scripts/python/helpers_repos/secure_repo.py,sha256=fW_GyHqWrpnf7nexHojfWHv4eLBa71IhVL_LSVMyGnE,1115
|
|
227
227
|
machineconfig/scripts/python/nw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -229,7 +229,7 @@ machineconfig/scripts/python/nw/add_ssh_key.py,sha256=9JLmWu8pE7PAL5VuCFd19iVEdC
|
|
|
229
229
|
machineconfig/scripts/python/nw/devops_add_identity.py,sha256=aPjcHbTLhxYwWYcandyAHdwuO15ZBu3fB82u6bI0tMQ,3773
|
|
230
230
|
machineconfig/scripts/python/nw/devops_add_ssh_key.py,sha256=CkIl85hZLtG9k7yXLSzqi88YrilHV4hIUWHAPBwxWjw,8922
|
|
231
231
|
machineconfig/scripts/python/nw/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3VdikyVVQyiu8j8,3514
|
|
232
|
-
machineconfig/scripts/python/nw/mount_nfs,sha256=
|
|
232
|
+
machineconfig/scripts/python/nw/mount_nfs,sha256=7BTPAgsrO8z-vpeNt6ByH97EXhK6CFlmatkekowgboM,1855
|
|
233
233
|
machineconfig/scripts/python/nw/mount_nfs.py,sha256=lOMDY4RS7tx8gsCazVR5tNNwFbaRyO2PJlnwBCDQgCM,3573
|
|
234
234
|
machineconfig/scripts/python/nw/mount_nw_drive,sha256=BqjGBCbwe5ZAsZDO3L0zHhh_gJfZy1CYOcqXA4Y-WkQ,2262
|
|
235
235
|
machineconfig/scripts/python/nw/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
|
|
@@ -243,7 +243,7 @@ machineconfig/scripts/python/nw/wsl_windows_transfer.py,sha256=1ab9l-8MtAxofW5nG
|
|
|
243
243
|
machineconfig/scripts/python/repos_helpers/action.py,sha256=M1Col8F4JEc20FCPSiELQ3PckbOL6i7YpxzfuAEtmSc,14894
|
|
244
244
|
machineconfig/scripts/python/repos_helpers/clone.py,sha256=UULEG5xJuXlPGU0nqXH6U45jA9DOFqLw8B4iPytCwOQ,5471
|
|
245
245
|
machineconfig/scripts/python/repos_helpers/count_lines.py,sha256=Q5c7b-DxvTlQmljoic7niTuiAVyFlwYvkVQ7uRJHiTo,16009
|
|
246
|
-
machineconfig/scripts/python/repos_helpers/count_lines_frontend.py,sha256=
|
|
246
|
+
machineconfig/scripts/python/repos_helpers/count_lines_frontend.py,sha256=dyPofy7TyphfmiR37u7AExgddlJvIQjBzhTcPUond9U,607
|
|
247
247
|
machineconfig/scripts/python/repos_helpers/entrypoint.py,sha256=O6ges-eMnXroIi14PszUWGD1-ITP4T0x7hk060rFT1k,2810
|
|
248
248
|
machineconfig/scripts/python/repos_helpers/record.py,sha256=FQo0swuJZOp0I2XGK-t1OQU4zJHmQ2z9zTpDD30Tmg4,11001
|
|
249
249
|
machineconfig/scripts/python/repos_helpers/sync.py,sha256=CLLWy2n2gY9beXPF-mblOQ6R7cKoenkJjMiX7tHQsBk,3091
|
|
@@ -256,7 +256,7 @@ machineconfig/scripts/windows/fzfrga.bat,sha256=rU_KBMO6ii2EZ0akMnmDk9vpuhKSUZqk
|
|
|
256
256
|
machineconfig/scripts/windows/mounts/mount_nfs.ps1,sha256=XrAdzpxE6a4OccSmWJ7YWHJTnsZK8uXnFE5j9GOPA20,2026
|
|
257
257
|
machineconfig/scripts/windows/mounts/mount_nw.ps1,sha256=puxcfZc3ZCJerm8pj8OZGVoTYkhzp-h7oV-MrksSqIE,454
|
|
258
258
|
machineconfig/scripts/windows/mounts/mount_smb.ps1,sha256=PzYWpIO9BpwXjdWlUQL9pnMRnOGNSkxfh4bHukJFme8,69
|
|
259
|
-
machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=
|
|
259
|
+
machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=nIWqGB25lr2XxpZ5INjsXWELzdIMsVbiLz21Lzhxqig,322
|
|
260
260
|
machineconfig/scripts/windows/mounts/share_cloud.cmd,sha256=exD7JCdxw2LqVjw2MKCYHbVZlEqmelXtwnATng-dhJ4,1028
|
|
261
261
|
machineconfig/scripts/windows/mounts/share_smb.ps1,sha256=U7x8ULYSjbgzTtiHNSKQuTaZ_apilDvkGV5Xm5hXk5M,384
|
|
262
262
|
machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1,sha256=Wv-SLscdckV-1mG3p82VXKPY9zW3hgkRmcLUXIZ1daE,253
|
|
@@ -372,7 +372,7 @@ machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKG
|
|
|
372
372
|
machineconfig/setup_linux/ssh/openssh_all.sh,sha256=3dg6HEUFbHQOzLfSAtzK_D_GB8rGCCp_aBnxNdnidVc,824
|
|
373
373
|
machineconfig/setup_linux/ssh/openssh_wsl.sh,sha256=1eeRGrloVB34K5z8yWVUMG5b9pV-WBfHgV9jqXiYgCQ,1398
|
|
374
374
|
machineconfig/setup_linux/web_shortcuts/android.sh,sha256=gzep6bBhK7FCBvGcXK0fdJCtkSfBOftt0aFyDZq_eMs,68
|
|
375
|
-
machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=
|
|
375
|
+
machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=vpyg5Ffk2lbGsAEWWduuHYpWlV9NsieowWvzaqQ3cro,441
|
|
376
376
|
machineconfig/setup_windows/__init__.py,sha256=NnSVZkIBoxoMgkj-_KAqGonH3YziBIWXOKDEcmNAGTY,386
|
|
377
377
|
machineconfig/setup_windows/apps.ps1,sha256=dmZQZD4ZlNZo9jYkjIS3ag4qDAYZvaLysjmo9ELwBA4,11218
|
|
378
378
|
machineconfig/setup_windows/uv.ps1,sha256=ukk1Abh-q-RfpoEqI2XTE2dcQJmHk0VFF6WqkK3TW8Q,350
|
|
@@ -382,12 +382,12 @@ machineconfig/setup_windows/others/power_options.ps1,sha256=c7Hn94jBD5GWF29CxMhm
|
|
|
382
382
|
machineconfig/setup_windows/ssh/add-sshkey.ps1,sha256=qfPdqCpd9KP3VhH4ifsUm1Xvec7c0QVl4Wt8JIAm9HQ,1653
|
|
383
383
|
machineconfig/setup_windows/ssh/add_identity.ps1,sha256=b8ZXpmNUSw3IMYvqSY7ClpdWPG39FS7MefoWnRhWN2U,506
|
|
384
384
|
machineconfig/setup_windows/ssh/openssh-server.ps1,sha256=OMlYQdvuJQNxF5EILLPizB6BZAT3jAmDsv1WcVVxpFQ,2529
|
|
385
|
-
machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=
|
|
385
|
+
machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=iMYoIWVRSMI2AThvBhAzm_7myLf4Sc00PSGKMDcgRxM,547
|
|
386
386
|
machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
387
387
|
machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=ogxJnwpdcpH7N6dFJu95UCNoGYirZKQho_3X0F_hmXs,6791
|
|
388
388
|
machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
389
389
|
machineconfig/utils/accessories.py,sha256=W_9dLzjwNTW5JQk_pe3B2ijQ1nA2-8Kdg2r7VBtzgQs,4340
|
|
390
|
-
machineconfig/utils/code.py,sha256=
|
|
390
|
+
machineconfig/utils/code.py,sha256=l3Z6mRW1EKStw-aKbuYYzTA5nqJ5XFvFFTsmNvMaNo0,7545
|
|
391
391
|
machineconfig/utils/installer.py,sha256=wNkX2r6dlZD9zmuIkBKj5AliNPfI9zVWgtu8XqgUVIg,10204
|
|
392
392
|
machineconfig/utils/io.py,sha256=4dSieoqZO8Vvi4vW8lLoITDHBvmFp4dtl3kyeZHQ6Co,2528
|
|
393
393
|
machineconfig/utils/links.py,sha256=KM6vIn3hag9FYEzLSHP5MAM9tU_RStw2mCq2_OvmmZA,23672
|
|
@@ -397,10 +397,10 @@ machineconfig/utils/options.py,sha256=vUO4Kej-vDOv64wHr2HNDyu6PATURpjd7xp6N8OOoJ
|
|
|
397
397
|
machineconfig/utils/path_extended.py,sha256=WyJwoHnXdvSQQJ-yrxTX78FpqYmgVeKDYpNEB9UsRck,53223
|
|
398
398
|
machineconfig/utils/path_helper.py,sha256=0e3Xh3BAEv27oqcezNeVLHJllGmLEgLH4T1l90m-650,8014
|
|
399
399
|
machineconfig/utils/procs.py,sha256=rw8LR8MjGgvtrpcgxb3hudq2B9fkkpYUXe9x5-FgHuc,10694
|
|
400
|
-
machineconfig/utils/scheduler.py,sha256
|
|
400
|
+
machineconfig/utils/scheduler.py,sha256=-U6MbET_FLXxk6nGg6IWsuhZ6e_iF0mqvm6uQUrvS4Q,14739
|
|
401
401
|
machineconfig/utils/scheduling.py,sha256=RF1iXJpqf4Dg18jdZWtBixz97KAHC6VKYqTFSpdLWuc,11188
|
|
402
402
|
machineconfig/utils/source_of_truth.py,sha256=ZAnCRltiM07ig--P6g9_6nEAvNFC4X4ERFTVcvpIYsE,764
|
|
403
|
-
machineconfig/utils/ssh.py,sha256
|
|
403
|
+
machineconfig/utils/ssh.py,sha256=-TYtFTKc03CkncLdHjnJtZodUOUyXK-uX-eWWiwnETI,39079
|
|
404
404
|
machineconfig/utils/terminal.py,sha256=IlmOByfQG-vjhaFFxxzU5rWzP5_qUzmalRfuey3PAmc,11801
|
|
405
405
|
machineconfig/utils/tst.py,sha256=6u1GI49NdcpxH2BYGAusNfY5q9G_ytCGVzFM5b6HYpM,674
|
|
406
406
|
machineconfig/utils/upgrade_packages.py,sha256=mSFyKvB3JhHte_x1dtmEgrJZCAXgTUQoaJUSx1OXQ3Y,4145
|
|
@@ -429,8 +429,8 @@ machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoS
|
|
|
429
429
|
machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
|
|
430
430
|
machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
|
|
431
431
|
machineconfig/utils/ssh_utils/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
432
|
-
machineconfig-6.
|
|
433
|
-
machineconfig-6.
|
|
434
|
-
machineconfig-6.
|
|
435
|
-
machineconfig-6.
|
|
436
|
-
machineconfig-6.
|
|
432
|
+
machineconfig-6.47.dist-info/METADATA,sha256=A1ZSAqZTXum3KMBDaJ_sTHMz5HUbJNsnZiWZmkHP4IY,2928
|
|
433
|
+
machineconfig-6.47.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
434
|
+
machineconfig-6.47.dist-info/entry_points.txt,sha256=M0jwN_brZdXWhmNVeXLvdKxfkv8WhhXFZYcuKBA9qnk,418
|
|
435
|
+
machineconfig-6.47.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
|
|
436
|
+
machineconfig-6.47.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|