machineconfig 6.48__py3-none-any.whl → 6.49__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.

@@ -6,7 +6,7 @@ from pathlib import Path
6
6
 
7
7
  def get_fire_command_and_artifact_files(func: FunctionType):
8
8
  from machineconfig.utils.meta import function_to_script
9
- py_script = function_to_script(func)
9
+ py_script = function_to_script(func, call_with_kwargs=None)
10
10
  from machineconfig.utils.accessories import randstr
11
11
  py_script_path = Path.home().joinpath("tmp_results", "tmp_py_scripts", f"tmp_{randstr(10)}.py")
12
12
  py_script_path.parent.mkdir(parents=True, exist_ok=True)
@@ -121,7 +121,7 @@ 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.48" """
124
+ else: requirements = """--with "marimo,machineconfig[plot]>=6.49" """
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
@@ -129,14 +129,14 @@ 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.48" """
132
+ else: requirements = """--with "machineconfig[plot]>=6.49" """
133
133
  fire_line = f"uv run {requirements} jupyter-lab {str(nb_target)}"
134
134
  elif vscode:
135
135
  fire_line = f"""
136
136
  cd {str(pyfile.parent)}
137
137
  uv init --python 3.14
138
138
  uv venv
139
- uv add "machineconfig[plot]>=6.48"
139
+ uv add "machineconfig[plot]>=6.49"
140
140
  # code serve-web
141
141
  code --new-window {str(pyfile)}
142
142
  """
@@ -151,7 +151,7 @@ code --new-window {str(pyfile)}
151
151
  else:
152
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"))
153
153
  return
154
- else: ve_line = """--with "machineconfig[plot]>=6.48" """
154
+ else: ve_line = """--with "machineconfig[plot]>=6.49" """
155
155
  # ve_path_maybe, ipython_profile_maybe = get_ve_path_and_ipython_profile(Path.cwd())
156
156
  # --python 3.14
157
157
  fire_line = f"uv run {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
@@ -2,7 +2,7 @@
2
2
  # /// script
3
3
  # requires-python = ">=3.13"
4
4
  # dependencies = [
5
- # "machineconfig>=6.48",
5
+ # "machineconfig>=6.49",
6
6
  # "textual",
7
7
  # "pyperclip",
8
8
  # ]
@@ -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.48,textual" """
45
+ if not Path.home().joinpath("code/machineconfig").exists(): executable = """--with "machineconfig>=6.49,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.48" """)
43
+ run_shell_script(r"""$HOME\.local\bin\uv.exe tool install --upgrade "machineconfig>=6.49" """)
44
44
  else:
45
- run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.48" """)
45
+ run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.49" """)
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.48,textual" """
70
+ else: executable = """--with "machineconfig>=6.49,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.48" """
80
+ else: executable = """uv run --with "machineconfig>=6.49" """
81
81
 
82
82
  shell_path = write_shell_script_to_file(shell_script=script)
83
83
  command = f". {shell_path}"
@@ -100,12 +100,17 @@ git pull originEnc master
100
100
 
101
101
  # ================================================================================
102
102
  option1 = "Delete remote copy and push local:"
103
+ from machineconfig.utils.meta import function_to_script
103
104
  def func2(remote_repo: str, local_repo: str, cloud: str):
104
105
  from machineconfig.scripts.python.helpers_repos.sync import delete_remote_repo_copy_and_push_local
105
106
  delete_remote_repo_copy_and_push_local(remote_repo=remote_repo, local_repo=local_repo, cloud=cloud)
106
107
  return "done"
107
- from machineconfig.utils.meta import function_to_script
108
- 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})
108
+ # def func2(remote_repo: str=str(repo_remote_root), local_repo: str=str(repo_local_root), cloud: str=str(cloud_resolved)):
109
+ # from machineconfig.scripts.python.helpers_repos.sync import delete_remote_repo_copy_and_push_local
110
+ # delete_remote_repo_copy_and_push_local(remote_repo=remote_repo, local_repo=local_repo, cloud=cloud)
111
+ # return "done"
112
+ # program_1_py = function_to_script(func=func2, call_with_kwargs=None)
113
+ program_1_py = function_to_script(func=func2, call_with_kwargs={"remote_repo": str(repo_remote_root), "local_repo": str(repo_local_root), "cloud": cloud_resolved})
109
114
 
110
115
 
111
116
  shell_file_1 = get_shell_file_executing_python_script(python_script=program_1_py, ve_path=None, executable=executable)
@@ -128,7 +133,7 @@ sudo chmod +x $HOME/dotfiles/scripts/linux -R
128
133
  from machineconfig.scripts.python.helpers_repos.sync import inspect_repos
129
134
  inspect_repos(repo_local_root=repo_local_root, repo_remote_root=repo_remote_root)
130
135
  return "done"
131
- 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)})
136
+ program_3_py = function_to_script(func=func, call_with_kwargs={"repo_local_root": str(repo_local_root), "repo_remote_root": str(repo_remote_root)})
132
137
  shell_file_3 = get_shell_file_executing_python_script(python_script=program_3_py, ve_path=None, executable=executable)
133
138
  # ================================================================================
134
139
 
@@ -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.48" {count_lines_path} analyze-over-time {repo_path}"""
11
+ cmd = f"""uv run --python 3.14 --with "machineconfig[plot]>=6.49" {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
 
@@ -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.48" python -m machineconfig.scripts.python.mount_nfs
8
+ uv run --python 3.14 --with "machineconfig>=6.49" 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."
@@ -7,7 +7,7 @@ $user = ''
7
7
  $sharePath = ''
8
8
  $driveLetter = ''
9
9
 
10
- uv run --python 3.14 --with "machineconfig>=6.48" python -m machineconfig.scripts.python.mount_ssh
10
+ uv run --python 3.14 --with "machineconfig>=6.49" 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.48" mcfg "$@"
4
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=6.49" 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.48" mcfg $args
5
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=6.49" mcfg $args
6
6
  }
7
7
  function d { mcfg devops @args }
8
8
  function c { mcfg cloud @args }
@@ -19,7 +19,7 @@ def get_shell_script_executing_python_file(python_file: str, func: Optional[str]
19
19
  if ve_path is None: ve_activate_line = ""
20
20
  else: ve_activate_line = get_ve_activate_line(ve_path)
21
21
  shell_script = f"""
22
- echo "Executing `{exec_line}`"
22
+ echo "Executing {exec_line}"
23
23
  {ve_activate_line}
24
24
  {exec_line}
25
25
  deactivate || true
@@ -90,6 +90,17 @@ def _extract_imports(func: FunctionType) -> str:
90
90
  if isinstance(node.value, ast.Name):
91
91
  used_names.add(node.value.id)
92
92
 
93
+ for node in ast.walk(tree):
94
+ if isinstance(node, ast.FunctionDef):
95
+ for default in node.args.defaults + node.args.kw_defaults:
96
+ if default is not None:
97
+ for subnode in ast.walk(default):
98
+ if isinstance(subnode, ast.Name):
99
+ used_names.add(subnode.id)
100
+ elif isinstance(subnode, ast.Attribute):
101
+ if isinstance(subnode.value, ast.Name):
102
+ used_names.add(subnode.value.id)
103
+
93
104
  for name in used_names:
94
105
  if name in func_globals:
95
106
  obj = func_globals[name]
@@ -101,7 +112,20 @@ def _extract_imports(func: FunctionType) -> str:
101
112
  else:
102
113
  import_statements.add(f"import {module_name} as {name}")
103
114
 
104
- elif hasattr(obj, '__module__') and obj.__module__ != '__main__':
115
+ elif isinstance(obj, type) and hasattr(obj, '__module__') and obj.__module__ != '__main__':
116
+ try:
117
+ module_name = obj.__module__
118
+ obj_name = obj.__name__ if hasattr(obj, '__name__') else name
119
+
120
+ if module_name and module_name != 'builtins':
121
+ if obj_name == name:
122
+ import_statements.add(f"from {module_name} import {obj_name}")
123
+ else:
124
+ import_statements.add(f"from {module_name} import {obj_name} as {name}")
125
+ except AttributeError:
126
+ pass
127
+
128
+ elif callable(obj) and not isinstance(obj, type) and hasattr(obj, '__module__') and obj.__module__ != '__main__':
105
129
  try:
106
130
  module_name = obj.__module__
107
131
  obj_name = obj.__name__ if hasattr(obj, '__name__') else name
@@ -120,6 +144,7 @@ def _extract_imports(func: FunctionType) -> str:
120
144
  def _extract_globals(func: FunctionType) -> str:
121
145
  """Extract global variables needed by the function."""
122
146
  global_assignments: list[str] = []
147
+ needed_types: set[type] = set()
123
148
 
124
149
  source = _get_function_source(func)
125
150
  func_globals = func.__globals__
@@ -137,6 +162,17 @@ def _extract_globals(func: FunctionType) -> str:
137
162
  if isinstance(node.value, ast.Name):
138
163
  used_names.add(node.value.id)
139
164
 
165
+ for node in ast.walk(tree):
166
+ if isinstance(node, ast.FunctionDef):
167
+ for default in node.args.defaults + node.args.kw_defaults:
168
+ if default is not None:
169
+ for subnode in ast.walk(default):
170
+ if isinstance(subnode, ast.Name):
171
+ used_names.add(subnode.id)
172
+ elif isinstance(subnode, ast.Attribute):
173
+ if isinstance(subnode.value, ast.Name):
174
+ used_names.add(subnode.value.id)
175
+
140
176
  for name in used_names:
141
177
  if name in func_globals:
142
178
  obj = func_globals[name]
@@ -144,13 +180,35 @@ def _extract_globals(func: FunctionType) -> str:
144
180
  if not isinstance(obj, (ModuleType, FunctionType, type)):
145
181
  if not (hasattr(obj, '__module__') and hasattr(obj, '__name__')):
146
182
  try:
147
- repr_str = repr(obj)
148
- if len(repr_str) < 1000 and '\n' not in repr_str:
149
- global_assignments.append(f"{name} = {repr_str}")
150
- except Exception:
151
- global_assignments.append(f"# Warning: Could not serialize global variable '{name}'")
183
+ obj_type = type(obj)
184
+
185
+ if obj_type.__name__ == 'PathExtended' and obj_type.__module__ == 'machineconfig.utils.path_extended':
186
+ global_assignments.append(f"{name} = PathExtended('{str(obj)}')")
187
+ if obj_type.__module__ not in ['builtins', '__main__']:
188
+ needed_types.add(obj_type)
189
+ else:
190
+ repr_str = repr(obj)
191
+ if len(repr_str) < 1000 and '\n' not in repr_str and all(ord(c) < 128 or c in [' ', '\n', '\t'] for c in repr_str):
192
+ global_assignments.append(f"{name} = {repr_str}")
193
+ if obj_type.__module__ not in ['builtins', '__main__']:
194
+ needed_types.add(obj_type)
195
+ else:
196
+ global_assignments.append(f"# Warning: Could not serialize global variable '{name}' (repr too complex or contains non-ASCII)")
197
+ except Exception as e:
198
+ global_assignments.append(f"# Warning: Could not serialize global variable '{name}': {e}")
199
+
200
+ result_parts: list[str] = []
201
+
202
+ if needed_types:
203
+ for obj_type in sorted(needed_types, key=lambda t: (t.__module__, t.__name__)):
204
+ module_name = obj_type.__module__
205
+ type_name = obj_type.__name__
206
+ result_parts.append(f"from {module_name} import {type_name}")
207
+ result_parts.append("")
208
+
209
+ result_parts.extend(global_assignments)
152
210
 
153
- return "\n".join(global_assignments)
211
+ return "\n".join(result_parts)
154
212
 
155
213
 
156
214
  def _prepare_call_kwargs(func: FunctionType, call_with_kwargs: Mapping[str, object] | None) -> dict[str, object] | None:
@@ -1,10 +1,10 @@
1
+
1
2
  from pathlib import Path
2
3
  from typing import Callable, Optional, Union, Any, Protocol, List, TypeVar
3
4
  import logging
4
5
  import time
5
6
  from datetime import datetime, timezone, timedelta
6
7
  from machineconfig.utils.io import from_pickle
7
- from machineconfig.utils.path_extended import PathExtended
8
8
 
9
9
 
10
10
  class LoggerTemplate(Protocol):
@@ -147,7 +147,6 @@ class Scheduler:
147
147
  T2 = TypeVar("T2")
148
148
  def to_pickle(obj: Any, path: Path) -> None:
149
149
  import pickle
150
- path.parent.mkdir(parents=True, exist_ok=True)
151
150
  path.write_bytes(pickle.dumps(obj))
152
151
 
153
152
 
@@ -160,15 +159,12 @@ class CacheMemory[T]():
160
159
  self.time_produced = datetime.now()
161
160
  self.logger = logger
162
161
  self.expire = expire
163
- self.name = name if isinstance(name, str) else str(self.source_func)
164
- self.last_call_is_fresh = False
165
-
162
+ self.name = name if isinstance(name, str) else self.source_func.__name__
166
163
  @property
167
164
  def age(self) -> timedelta:
168
165
  return datetime.now() - self.time_produced
169
166
 
170
167
  def __call__(self, fresh: bool = False) -> T:
171
- self.last_call_is_fresh = False
172
168
  if fresh or not hasattr(self, "cache"):
173
169
  why = "There was an explicit fresh order." if fresh else "Previous cache never existed."
174
170
  t0 = time.time()
@@ -177,7 +173,6 @@ class CacheMemory[T]():
177
173
  ℹ️ Reason: {why}""")
178
174
  self.cache = self.source_func()
179
175
  self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
180
- self.last_call_is_fresh = True
181
176
  self.time_produced = datetime.now()
182
177
  else:
183
178
  age = self.age
@@ -189,7 +184,6 @@ class CacheMemory[T]():
189
184
  t0 = time.time()
190
185
  self.cache = self.source_func()
191
186
  self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
192
- self.last_call_is_fresh = True
193
187
  self.time_produced = datetime.now()
194
188
  else:
195
189
  self.logger.warning(f"""
@@ -212,21 +206,19 @@ class Cache[T](): # This class helps to accelrate access to latest data coming
212
206
  ) -> None:
213
207
  self.cache: T
214
208
  self.source_func = source_func # function which when called returns a fresh object to be frozen.
215
- self.path: PathExtended = PathExtended(path)
209
+ self.path: Path = path
210
+ _ = self.path.parent.mkdir(parents=True, exist_ok=True)
216
211
  self.time_produced = datetime.now() # if path is None else
217
212
  self.save = saver
218
213
  self.reader = reader
219
214
  self.logger = logger
220
215
  self.expire = expire
221
- self.name = name if isinstance(name, str) else str(self.source_func)
222
- self.last_call_is_fresh = False
223
-
216
+ self.name = name if isinstance(name, str) else self.source_func.__name__
224
217
  @property
225
218
  def age(self):
226
219
  """Throws AttributeError if called before cache is populated and path doesn't exists"""
227
220
  return datetime.now() - self.time_produced
228
221
  def __call__(self, fresh: bool = False) -> T:
229
- self.last_call_is_fresh = False
230
222
  if fresh or not hasattr(self, "cache"): # populate cache for the first time
231
223
  if not fresh and self.path.exists():
232
224
  age = datetime.now() - datetime.fromtimestamp(self.path.stat().st_mtime)
@@ -245,10 +237,8 @@ class Cache[T](): # This class helps to accelrate access to latest data coming
245
237
  t0 = time.time()
246
238
  self.cache = self.source_func()
247
239
  self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
248
- self.last_call_is_fresh = True
249
240
  self.time_produced = datetime.now()
250
- # if self.path is not None:
251
- # self.save(self.cache, self.path)
241
+ self.save(self.cache, self.path)
252
242
  return self.cache
253
243
  return self(fresh=False) # may be the cache is old ==> check that by passing it through the logic again.
254
244
  else:
@@ -261,7 +251,6 @@ class Cache[T](): # This class helps to accelrate access to latest data coming
261
251
  t0 = time.time()
262
252
  self.cache = self.source_func() # fresh data.
263
253
  self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
264
- self.last_call_is_fresh = True
265
254
  self.time_produced = datetime.now()
266
255
  self.save(self.cache, self.path)
267
256
  else: # cache exists
@@ -277,7 +266,6 @@ class Cache[T](): # This class helps to accelrate access to latest data coming
277
266
  t0 = time.time()
278
267
  self.cache = self.source_func()
279
268
  self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
280
- self.last_call_is_fresh = True
281
269
  self.time_produced = datetime.now()
282
270
  self.save(self.cache, self.path)
283
271
  else:
@@ -294,5 +282,4 @@ class Cache[T](): # This class helps to accelrate access to latest data coming
294
282
  def decorator(source_func: Callable[[], T2]) -> Cache["T2"]:
295
283
  res = Cache(source_func=source_func, expire=expire, logger=logger, path=path, name=name, reader=reader, saver=saver)
296
284
  return res
297
-
298
285
  return decorator
@@ -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.48"
9
+ MACHINECONFIG_VERSION = "machineconfig>=6.49"
10
10
  DEFAULT_PICKLE_SUBDIR = "tmp_results/tmp_scripts/ssh"
11
11
 
12
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 6.48
3
+ Version: 6.49
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -25,7 +25,7 @@ machineconfig/cluster/sessions_managers/zellij_remote_manager.py,sha256=xzih0y8_
25
25
  machineconfig/cluster/sessions_managers/helpers/enhanced_command_runner.py,sha256=3vcQVg-HHa_WTxBGPtKMAdoSqJVa2EO5KAtrY8a6I3c,5264
26
26
  machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py,sha256=i5TRittC1IWTgMZNyG8AR5qq-3WrGp3xgIx2m5ktT7g,7526
27
27
  machineconfig/cluster/sessions_managers/utils/load_balancer.py,sha256=Y4RQmhROY6o7JXSJXRrBTkoAuEmu1gvmvN_7JKPw5sc,3178
28
- machineconfig/cluster/sessions_managers/utils/maker.py,sha256=CeV9XrF5OhgNZe-qa916hNuy7mD9w-9TLOL3nLPXENs,2110
28
+ machineconfig/cluster/sessions_managers/utils/maker.py,sha256=kUJLOctqRR_jumdDIssxBI65pBhBEHxDOOq_RohnoeU,2133
29
29
  machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py,sha256=OA50j16uUS9ZTjL38TLuR3jufIOln_EszMZpbWyejTo,6972
30
30
  machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py,sha256=Mitm7mKiKl5lT0OiEUHAqVg2Q21RjsKO1-hpJTHJ5lM,15196
31
31
  machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py,sha256=lApUy67_WhfaBXqt0meZSx_QvwiXjN0YLdyE3c7kP_s,6744
@@ -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=yAD6ciKiEtv2CH3g2NScDK5cpCZQi7Vu8yyeehw_cU8,1263
125
- machineconfig/scripts/python/croshell.py,sha256=26ZDe9qKKDFQw0TPPeKRZGUAFfykHTFVI7PGnAwOejc,8007
125
+ machineconfig/scripts/python/croshell.py,sha256=JFL0YpO1990pFlpim04RkrWU5jQzsmfUkzFVPLjcgKw,8007
126
126
  machineconfig/scripts/python/devops.py,sha256=LGra1YiLEQYjaRevNjJB51Bia81IgjrvUQkA6z8wq8I,2440
127
127
  machineconfig/scripts/python/devops_navigator.py,sha256=5Cm384D4S8_GsvMzTwr0C16D0ktf8_5Mk5bEJncwDO8,237
128
128
  machineconfig/scripts/python/entry.py,sha256=a0Zk_3RnIFTQ55zSQrvOOiKom_SaoxElPMmWQgGy4V0,2221
@@ -162,7 +162,7 @@ machineconfig/scripts/python/ai/solutions/opencode/opencode.json,sha256=nahHKRw1
162
162
  machineconfig/scripts/python/ai/solutions/opencode/opencode.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
163
163
  machineconfig/scripts/python/env_manager/__init__.py,sha256=E4LAHbU1wo2dLjE36ntv8U7QNTe8TasujUAYK9SLvWk,6
164
164
  machineconfig/scripts/python/env_manager/path_manager_backend.py,sha256=ZVGlGJALhg7zNABDdwXxL7MFbL2BXPebObipXSLGbic,1552
165
- machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=2rSVrT2MNVG9UinfSna35S0kyRsRhPVBOO4dVO8o8Rk,6932
165
+ machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=u5TeU6k_7fk2PGSAAKqd_rWqC6cD3nn0lxIL68ZvZKU,6932
166
166
  machineconfig/scripts/python/helpers_cloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
167
  machineconfig/scripts/python/helpers_cloud/cloud_copy.py,sha256=OV1w3ajFVFs6FJytjIPOntYB_aW2ywGohKi73V4Dm2Y,8691
168
168
  machineconfig/scripts/python/helpers_cloud/cloud_helpers.py,sha256=GA-bxXouUmknk9fyQAsPT-Xl3RG9-yBed71a2tu9Pig,4914
@@ -178,12 +178,12 @@ machineconfig/scripts/python/helpers_croshell/start_slidev.py,sha256=HfJReOusTPh
178
178
  machineconfig/scripts/python/helpers_croshell/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
179
179
  machineconfig/scripts/python/helpers_croshell/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
180
180
  machineconfig/scripts/python/helpers_devops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
181
- machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=4RFErSrdrOBmmSNRycmrOo1EDqamg-C8tdeZjewGZ_I,5652
181
+ machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=mZlaV1eSrwg3nAev2b17PEAZ2-qg-xYC3EtqJ5k8iQk,5652
182
182
  machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py,sha256=rjTys4FNf9_feP9flWM7Zvq17dxWmetSiGaHPxp25nk,2737
183
183
  machineconfig/scripts/python/helpers_devops/cli_data.py,sha256=79Xvx7YnbueruEnl69hrDg2AhVxf_zCUdlVcKfeMGyQ,1774
184
184
  machineconfig/scripts/python/helpers_devops/cli_nw.py,sha256=B5Xa9pV5MdC4vPo3EmKaHvNMlThsY3c5F92YPE5j3rI,4176
185
185
  machineconfig/scripts/python/helpers_devops/cli_repos.py,sha256=Xwkv1adqHZvTfRSPWiqSK3PZ1XADyx3llw_YkbxaKyE,12505
186
- machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=aGKWQXcLQOJMsam2fgAgsYX3HfaJi8vwxx_oBQUhs5Y,6167
186
+ machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=OWM83WqD_reebUxPkNhhU2EB8JoNZ-gFxyev6IGgURM,6167
187
187
  machineconfig/scripts/python/helpers_devops/cli_share_server.py,sha256=q9pFJ6AxPuygMr3onMNOKEuuQHbVE_6Qoyo7xRT5FX0,4196
188
188
  machineconfig/scripts/python/helpers_devops/cli_terminal.py,sha256=k_PzXaiGyE0vXr0Ii1XcJz2A7UvyPJrR31TRWt4RKRI,6019
189
189
  machineconfig/scripts/python/helpers_devops/cli_utils.py,sha256=G2RHnOvNfEWjxETZjXVu688xyLL-c0Zq22p24kXLLQ8,3487
@@ -222,9 +222,9 @@ machineconfig/scripts/python/helpers_navigator/main_app.py,sha256=R1vOBMUKaiFHOg
222
222
  machineconfig/scripts/python/helpers_navigator/search_bar.py,sha256=kDi8Jhxap8wdm7YpDBtfhwcPnSqDPFrV2LqbcSBWMT4,414
223
223
  machineconfig/scripts/python/helpers_repos/action.py,sha256=9AxWy8mB9HFeV5t11-qD_l-KA5jkUmm0pXVKT1L6-Qk,14894
224
224
  machineconfig/scripts/python/helpers_repos/clone.py,sha256=UULEG5xJuXlPGU0nqXH6U45jA9DOFqLw8B4iPytCwOQ,5471
225
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=CS9KOw_24taQ4UNG3qhTdk2of_2c9JbRKb6_LOO07jA,9989
225
+ machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=NlYJrRV7_2vnRm2EaMYGkoRwfdZi-BoGcO7ryziQs-0,10412
226
226
  machineconfig/scripts/python/helpers_repos/count_lines.py,sha256=Q5c7b-DxvTlQmljoic7niTuiAVyFlwYvkVQ7uRJHiTo,16009
227
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py,sha256=cTNSFzdJFNb30i-LLivzXsiU3ykYoNUvNGiEizGqjQ8,607
227
+ machineconfig/scripts/python/helpers_repos/count_lines_frontend.py,sha256=EWhoJV8rUAgnOKWTHLcO4TxXYXGmasCgVS0xUWtw8ZM,607
228
228
  machineconfig/scripts/python/helpers_repos/entrypoint.py,sha256=WYEFGUJp9HWImlFjbs_hiFZrUqM_KEYm5VvSUjWd04I,2810
229
229
  machineconfig/scripts/python/helpers_repos/grource.py,sha256=oJj1-gqlkV3Z_BrIOXRmtzoXcuBl0xTYfulJ5D0srOc,14656
230
230
  machineconfig/scripts/python/helpers_repos/record.py,sha256=FQo0swuJZOp0I2XGK-t1OQU4zJHmQ2z9zTpDD30Tmg4,11001
@@ -238,7 +238,7 @@ machineconfig/scripts/python/nw/add_ssh_key.py,sha256=9JLmWu8pE7PAL5VuCFd19iVEdC
238
238
  machineconfig/scripts/python/nw/devops_add_identity.py,sha256=aPjcHbTLhxYwWYcandyAHdwuO15ZBu3fB82u6bI0tMQ,3773
239
239
  machineconfig/scripts/python/nw/devops_add_ssh_key.py,sha256=CkIl85hZLtG9k7yXLSzqi88YrilHV4hIUWHAPBwxWjw,8922
240
240
  machineconfig/scripts/python/nw/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3VdikyVVQyiu8j8,3514
241
- machineconfig/scripts/python/nw/mount_nfs,sha256=qJquoVbdnsjBrQDsc5pMYDAW0pWBoL-ulCrABmbe-GI,1855
241
+ machineconfig/scripts/python/nw/mount_nfs,sha256=3fbjsC6q8rFVGIM9Ax9ZTgqJ8Buqy1XX7cC6w9LoY14,1855
242
242
  machineconfig/scripts/python/nw/mount_nfs.py,sha256=lOMDY4RS7tx8gsCazVR5tNNwFbaRyO2PJlnwBCDQgCM,3573
243
243
  machineconfig/scripts/python/nw/mount_nw_drive,sha256=BqjGBCbwe5ZAsZDO3L0zHhh_gJfZy1CYOcqXA4Y-WkQ,2262
244
244
  machineconfig/scripts/python/nw/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
@@ -255,7 +255,7 @@ machineconfig/scripts/windows/fzfrga.bat,sha256=rU_KBMO6ii2EZ0akMnmDk9vpuhKSUZqk
255
255
  machineconfig/scripts/windows/mounts/mount_nfs.ps1,sha256=XrAdzpxE6a4OccSmWJ7YWHJTnsZK8uXnFE5j9GOPA20,2026
256
256
  machineconfig/scripts/windows/mounts/mount_nw.ps1,sha256=puxcfZc3ZCJerm8pj8OZGVoTYkhzp-h7oV-MrksSqIE,454
257
257
  machineconfig/scripts/windows/mounts/mount_smb.ps1,sha256=PzYWpIO9BpwXjdWlUQL9pnMRnOGNSkxfh4bHukJFme8,69
258
- machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=H68Y2i2OaeHrSvMGtO6yl8SjB9oiIGBMRvCsaiAGp_Y,322
258
+ machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=HyfwTG1YyHLyg228fw3nHWCqBmcd_DNShm20KBrwg5E,322
259
259
  machineconfig/scripts/windows/mounts/share_cloud.cmd,sha256=exD7JCdxw2LqVjw2MKCYHbVZlEqmelXtwnATng-dhJ4,1028
260
260
  machineconfig/scripts/windows/mounts/share_smb.ps1,sha256=U7x8ULYSjbgzTtiHNSKQuTaZ_apilDvkGV5Xm5hXk5M,384
261
261
  machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1,sha256=Wv-SLscdckV-1mG3p82VXKPY9zW3hgkRmcLUXIZ1daE,253
@@ -371,7 +371,7 @@ machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKG
371
371
  machineconfig/setup_linux/ssh/openssh_all.sh,sha256=3dg6HEUFbHQOzLfSAtzK_D_GB8rGCCp_aBnxNdnidVc,824
372
372
  machineconfig/setup_linux/ssh/openssh_wsl.sh,sha256=1eeRGrloVB34K5z8yWVUMG5b9pV-WBfHgV9jqXiYgCQ,1398
373
373
  machineconfig/setup_linux/web_shortcuts/android.sh,sha256=gzep6bBhK7FCBvGcXK0fdJCtkSfBOftt0aFyDZq_eMs,68
374
- machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=p2Q5ywTvVoRgCnLySHF23Vj2E2QjQ5zUG1ExT5125uw,441
374
+ machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=kk44iHWeYfn95NltBrye0eWkPyFyK1iFN6mFQb3hl2k,441
375
375
  machineconfig/setup_windows/__init__.py,sha256=NnSVZkIBoxoMgkj-_KAqGonH3YziBIWXOKDEcmNAGTY,386
376
376
  machineconfig/setup_windows/apps.ps1,sha256=dmZQZD4ZlNZo9jYkjIS3ag4qDAYZvaLysjmo9ELwBA4,11218
377
377
  machineconfig/setup_windows/uv.ps1,sha256=ukk1Abh-q-RfpoEqI2XTE2dcQJmHk0VFF6WqkK3TW8Q,350
@@ -381,25 +381,25 @@ machineconfig/setup_windows/others/power_options.ps1,sha256=c7Hn94jBD5GWF29CxMhm
381
381
  machineconfig/setup_windows/ssh/add-sshkey.ps1,sha256=qfPdqCpd9KP3VhH4ifsUm1Xvec7c0QVl4Wt8JIAm9HQ,1653
382
382
  machineconfig/setup_windows/ssh/add_identity.ps1,sha256=b8ZXpmNUSw3IMYvqSY7ClpdWPG39FS7MefoWnRhWN2U,506
383
383
  machineconfig/setup_windows/ssh/openssh-server.ps1,sha256=OMlYQdvuJQNxF5EILLPizB6BZAT3jAmDsv1WcVVxpFQ,2529
384
- machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=6sBv9ovcAKvC9paKp6Y1erPSnvTq81bhyqhJra1Mq6M,547
384
+ machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=FEGMTTGmhavoarHyxcNNdZis0FcD8JIIV5V8vJlZLss,547
385
385
  machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
386
386
  machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=ogxJnwpdcpH7N6dFJu95UCNoGYirZKQho_3X0F_hmXs,6791
387
387
  machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
388
388
  machineconfig/utils/accessories.py,sha256=W_9dLzjwNTW5JQk_pe3B2ijQ1nA2-8Kdg2r7VBtzgQs,4340
389
- machineconfig/utils/code.py,sha256=l3Z6mRW1EKStw-aKbuYYzTA5nqJ5XFvFFTsmNvMaNo0,7545
389
+ machineconfig/utils/code.py,sha256=W0JFDF1ynJJIYtrAP6IqCcmrhvS-_zyDz43etnWW7_4,7543
390
390
  machineconfig/utils/installer.py,sha256=wNkX2r6dlZD9zmuIkBKj5AliNPfI9zVWgtu8XqgUVIg,10204
391
391
  machineconfig/utils/io.py,sha256=4dSieoqZO8Vvi4vW8lLoITDHBvmFp4dtl3kyeZHQ6Co,2528
392
392
  machineconfig/utils/links.py,sha256=KM6vIn3hag9FYEzLSHP5MAM9tU_RStw2mCq2_OvmmZA,23672
393
- machineconfig/utils/meta.py,sha256=GO30Z_NmeXyk_2yUpvnQD2Cg7KAbsZNVTLjKNFw8qpo,7039
393
+ machineconfig/utils/meta.py,sha256=cXAXv0dFeS-G_ypjxhAN5Zo2Hc5C-GqAbf96ls6vrj0,10213
394
394
  machineconfig/utils/notifications.py,sha256=tuXIudcip0tEioG-bm8BbLr3FMDve4f6BktlznBhKxM,9013
395
395
  machineconfig/utils/options.py,sha256=vUO4Kej-vDOv64wHr2HNDyu6PATURpjd7xp6N8OOoJg,7083
396
396
  machineconfig/utils/path_extended.py,sha256=WyJwoHnXdvSQQJ-yrxTX78FpqYmgVeKDYpNEB9UsRck,53223
397
397
  machineconfig/utils/path_helper.py,sha256=0e3Xh3BAEv27oqcezNeVLHJllGmLEgLH4T1l90m-650,8014
398
398
  machineconfig/utils/procs.py,sha256=YPA_vEYQGwPd_o_Lc6nOTBo5BrB1tSs8PJ42XiGpenM,10957
399
- machineconfig/utils/scheduler.py,sha256=-U6MbET_FLXxk6nGg6IWsuhZ6e_iF0mqvm6uQUrvS4Q,14739
399
+ machineconfig/utils/scheduler.py,sha256=44CASABJg3epccxhAwv2CX7TVgZh6zVy3K4vqHKTuf4,14228
400
400
  machineconfig/utils/scheduling.py,sha256=RF1iXJpqf4Dg18jdZWtBixz97KAHC6VKYqTFSpdLWuc,11188
401
401
  machineconfig/utils/source_of_truth.py,sha256=ZAnCRltiM07ig--P6g9_6nEAvNFC4X4ERFTVcvpIYsE,764
402
- machineconfig/utils/ssh.py,sha256=OUhIq1jAf1Z9GHuKv8T9uwjGGaGxt2qkj0xQVyMrROs,39079
402
+ machineconfig/utils/ssh.py,sha256=dpy7g3FWBopiC-WCniYxyjgai_sSgEMfSSLMcm8WwCY,39079
403
403
  machineconfig/utils/terminal.py,sha256=IlmOByfQG-vjhaFFxxzU5rWzP5_qUzmalRfuey3PAmc,11801
404
404
  machineconfig/utils/tst.py,sha256=6u1GI49NdcpxH2BYGAusNfY5q9G_ytCGVzFM5b6HYpM,674
405
405
  machineconfig/utils/upgrade_packages.py,sha256=mSFyKvB3JhHte_x1dtmEgrJZCAXgTUQoaJUSx1OXQ3Y,4145
@@ -428,8 +428,8 @@ machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoS
428
428
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
429
429
  machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
430
430
  machineconfig/utils/ssh_utils/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
431
- machineconfig-6.48.dist-info/METADATA,sha256=0eME7aiZwpdMWTZMqeop6jwywFcWifkyzmDbnJk6qJk,2928
432
- machineconfig-6.48.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
433
- machineconfig-6.48.dist-info/entry_points.txt,sha256=M0jwN_brZdXWhmNVeXLvdKxfkv8WhhXFZYcuKBA9qnk,418
434
- machineconfig-6.48.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
435
- machineconfig-6.48.dist-info/RECORD,,
431
+ machineconfig-6.49.dist-info/METADATA,sha256=PsUcO81dHh_62I1kLsFutAMmEYSlR7AgfJm9KBzwaiQ,2928
432
+ machineconfig-6.49.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
433
+ machineconfig-6.49.dist-info/entry_points.txt,sha256=M0jwN_brZdXWhmNVeXLvdKxfkv8WhhXFZYcuKBA9qnk,418
434
+ machineconfig-6.49.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
435
+ machineconfig-6.49.dist-info/RECORD,,