machineconfig 2.7__py3-none-any.whl → 2.8__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/python/check_installations.py +0 -2
- machineconfig/scripts/python/__pycache__/devops.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/repos_helper_record.cpython-313.pyc +0 -0
- machineconfig/scripts/python/devops_devapps_install.py +14 -2
- machineconfig/scripts/python/repos_helper_record.py +82 -5
- machineconfig/utils/procs.py +45 -30
- machineconfig/utils/ssh.py +29 -7
- {machineconfig-2.7.dist-info → machineconfig-2.8.dist-info}/METADATA +1 -2
- {machineconfig-2.7.dist-info → machineconfig-2.8.dist-info}/RECORD +12 -12
- {machineconfig-2.7.dist-info → machineconfig-2.8.dist-info}/WHEEL +0 -0
- {machineconfig-2.7.dist-info → machineconfig-2.8.dist-info}/entry_points.txt +0 -0
- {machineconfig-2.7.dist-info → machineconfig-2.8.dist-info}/top_level.txt +0 -0
|
@@ -11,8 +11,6 @@ import platform
|
|
|
11
11
|
# # from rich.progress import track
|
|
12
12
|
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
13
13
|
# from machineconfig.utils.installer import get_installed_cli_apps
|
|
14
|
-
|
|
15
|
-
# from tqdm import tqdm
|
|
16
14
|
# from typing import Optional
|
|
17
15
|
# from datetime import datetime
|
|
18
16
|
# import csv
|
|
Binary file
|
|
Binary file
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# import subprocess
|
|
4
4
|
from machineconfig.utils.installer_utils.installer_class import Installer
|
|
5
|
-
from
|
|
5
|
+
from rich.progress import Progress, SpinnerColumn, TextColumn
|
|
6
6
|
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
7
7
|
from machineconfig.utils.options import choose_multiple_options
|
|
8
8
|
from machineconfig.utils.installer import get_installers, install_all, get_all_dicts
|
|
@@ -38,7 +38,19 @@ def main(which: Optional[WHICH_CAT | str] = None):
|
|
|
38
38
|
|
|
39
39
|
# interactive installation
|
|
40
40
|
installers = [Installer.from_dict(d=vd, name=name) for __kat, vds in get_all_dicts(system=system()).items() for name, vd in vds.items()]
|
|
41
|
-
|
|
41
|
+
|
|
42
|
+
# Check installed programs with progress indicator
|
|
43
|
+
with Progress(
|
|
44
|
+
SpinnerColumn(),
|
|
45
|
+
TextColumn("[progress.description]{task.description}"),
|
|
46
|
+
) as progress:
|
|
47
|
+
task = progress.add_task("✅ Checking installed programs...", total=len(installers))
|
|
48
|
+
options = []
|
|
49
|
+
for x in installers:
|
|
50
|
+
options.append(x.get_description())
|
|
51
|
+
progress.update(task, advance=1)
|
|
52
|
+
|
|
53
|
+
options += list(get_args(WHICH_CAT))
|
|
42
54
|
# print("s"*1000)
|
|
43
55
|
program_names = choose_multiple_options(msg="", options=options, header="🚀 CHOOSE DEV APP", default="AllEssentials")
|
|
44
56
|
|
|
@@ -9,6 +9,7 @@ from machineconfig.utils.io_save import save_json
|
|
|
9
9
|
from typing import Optional
|
|
10
10
|
|
|
11
11
|
from rich import print as pprint
|
|
12
|
+
from rich.progress import Progress, TaskID, SpinnerColumn, TextColumn, BarColumn, TimeElapsedColumn, MofNCompleteColumn
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
def build_tree_structure(repos: list[RepoRecordDict], repos_root: PathExtended) -> str:
|
|
@@ -82,7 +83,7 @@ def build_tree_structure(repos: list[RepoRecordDict], repos_root: PathExtended)
|
|
|
82
83
|
return "\n".join(tree_lines)
|
|
83
84
|
|
|
84
85
|
|
|
85
|
-
def record_a_repo(path: PathExtended, search_parent_directories: bool
|
|
86
|
+
def record_a_repo(path: PathExtended, search_parent_directories: bool, preferred_remote: Optional[str]) -> RepoRecordDict:
|
|
86
87
|
from git.repo import Repo
|
|
87
88
|
|
|
88
89
|
repo = Repo(path, search_parent_directories=search_parent_directories) # get list of remotes using git python
|
|
@@ -126,27 +127,103 @@ def record_a_repo(path: PathExtended, search_parent_directories: bool = False, p
|
|
|
126
127
|
return res
|
|
127
128
|
|
|
128
129
|
|
|
129
|
-
def
|
|
130
|
+
def count_git_repositories(repos_root: str, r: bool) -> int:
|
|
131
|
+
"""Count total git repositories for accurate progress tracking."""
|
|
132
|
+
path_obj = PathExtended(repos_root).expanduser().absolute()
|
|
133
|
+
if path_obj.is_file():
|
|
134
|
+
return 0
|
|
135
|
+
|
|
136
|
+
search_res = path_obj.search("*", files=False, folders=True)
|
|
137
|
+
count = 0
|
|
138
|
+
|
|
139
|
+
for a_search_res in search_res:
|
|
140
|
+
if a_search_res.joinpath(".git").exists():
|
|
141
|
+
count += 1
|
|
142
|
+
elif r:
|
|
143
|
+
count += count_git_repositories(str(a_search_res), r=r)
|
|
144
|
+
|
|
145
|
+
return count
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def count_total_directories(repos_root: str, r: bool) -> int:
|
|
149
|
+
"""Count total directories to scan for accurate progress tracking."""
|
|
150
|
+
path_obj = PathExtended(repos_root).expanduser().absolute()
|
|
151
|
+
if path_obj.is_file():
|
|
152
|
+
return 0
|
|
153
|
+
|
|
154
|
+
search_res = path_obj.search("*", files=False, folders=True)
|
|
155
|
+
count = len(search_res)
|
|
156
|
+
|
|
157
|
+
if r:
|
|
158
|
+
for a_search_res in search_res:
|
|
159
|
+
if not a_search_res.joinpath(".git").exists():
|
|
160
|
+
count += count_total_directories(str(a_search_res), r=r)
|
|
161
|
+
|
|
162
|
+
return count
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def record_repos_recursively(repos_root: str, r: bool, progress: Progress | None, scan_task_id: TaskID | None, process_task_id: TaskID | None) -> list[RepoRecordDict]:
|
|
130
166
|
path_obj = PathExtended(repos_root).expanduser().absolute()
|
|
131
167
|
if path_obj.is_file():
|
|
132
168
|
return []
|
|
169
|
+
|
|
133
170
|
search_res = path_obj.search("*", files=False, folders=True)
|
|
134
171
|
res: list[RepoRecordDict] = []
|
|
172
|
+
|
|
135
173
|
for a_search_res in search_res:
|
|
174
|
+
if progress and scan_task_id:
|
|
175
|
+
progress.update(scan_task_id, description=f"Scanning: {a_search_res.name}")
|
|
176
|
+
|
|
136
177
|
if a_search_res.joinpath(".git").exists():
|
|
137
178
|
try:
|
|
138
|
-
|
|
179
|
+
if progress and process_task_id:
|
|
180
|
+
progress.update(process_task_id, description=f"Recording: {a_search_res.name}")
|
|
181
|
+
|
|
182
|
+
repo_record = record_a_repo(a_search_res, search_parent_directories=False, preferred_remote=None)
|
|
183
|
+
res.append(repo_record)
|
|
184
|
+
|
|
185
|
+
if progress and process_task_id:
|
|
186
|
+
progress.update(process_task_id, advance=1, description=f"Recorded: {repo_record['name']}")
|
|
139
187
|
except Exception as e:
|
|
140
188
|
print(f"⚠️ Failed to record {a_search_res}: {e}")
|
|
141
189
|
else:
|
|
142
190
|
if r:
|
|
143
|
-
res += record_repos_recursively(str(a_search_res), r=r)
|
|
191
|
+
res += record_repos_recursively(str(a_search_res), r=r, progress=progress, scan_task_id=scan_task_id, process_task_id=process_task_id)
|
|
192
|
+
|
|
193
|
+
if progress and scan_task_id:
|
|
194
|
+
progress.update(scan_task_id, advance=1)
|
|
195
|
+
|
|
144
196
|
return res
|
|
145
197
|
|
|
146
198
|
|
|
147
199
|
def main(repos_root: PathExtended):
|
|
148
200
|
print("\n📝 Recording repositories...")
|
|
149
|
-
|
|
201
|
+
|
|
202
|
+
# Count total directories and repositories for accurate progress tracking
|
|
203
|
+
print("🔍 Analyzing directory structure...")
|
|
204
|
+
total_dirs = count_total_directories(str(repos_root), r=True)
|
|
205
|
+
total_repos = count_git_repositories(str(repos_root), r=True)
|
|
206
|
+
print(f"📊 Found {total_dirs} directories to scan and {total_repos} git repositories to record")
|
|
207
|
+
|
|
208
|
+
# Setup progress bars
|
|
209
|
+
with Progress(
|
|
210
|
+
SpinnerColumn(),
|
|
211
|
+
TextColumn("[progress.description]{task.description}"),
|
|
212
|
+
BarColumn(),
|
|
213
|
+
MofNCompleteColumn(),
|
|
214
|
+
TimeElapsedColumn(),
|
|
215
|
+
) as progress:
|
|
216
|
+
scan_task = progress.add_task("Scanning directories...", total=total_dirs)
|
|
217
|
+
process_task = progress.add_task("Recording repositories...", total=total_repos)
|
|
218
|
+
|
|
219
|
+
repo_records = record_repos_recursively(
|
|
220
|
+
repos_root=str(repos_root),
|
|
221
|
+
r=True,
|
|
222
|
+
progress=progress,
|
|
223
|
+
scan_task_id=scan_task,
|
|
224
|
+
process_task_id=process_task
|
|
225
|
+
)
|
|
226
|
+
|
|
150
227
|
res: RepoRecordFile = {"version": "0.1", "repos": repo_records}
|
|
151
228
|
|
|
152
229
|
# Summary with warnings
|
machineconfig/utils/procs.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Procs"""
|
|
2
2
|
|
|
3
3
|
import psutil
|
|
4
|
-
from
|
|
4
|
+
from rich.progress import Progress, SpinnerColumn, TextColumn
|
|
5
5
|
from pytz import timezone
|
|
6
6
|
from machineconfig.utils.options import display_options
|
|
7
7
|
from typing import Optional, Any
|
|
@@ -20,14 +20,22 @@ def get_processes_accessing_file(path: str):
|
|
|
20
20
|
title = "🔍 SEARCHING FOR PROCESSES ACCESSING FILE"
|
|
21
21
|
console.print(Panel(title, title="[bold blue]Process Info[/bold blue]", border_style="blue"))
|
|
22
22
|
res: dict[int, list[str]] = {}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
|
|
24
|
+
with Progress(
|
|
25
|
+
SpinnerColumn(),
|
|
26
|
+
TextColumn("[progress.description]{task.description}"),
|
|
27
|
+
) as progress:
|
|
28
|
+
progress.add_task("🔎 Scanning processes...", total=None)
|
|
29
|
+
|
|
30
|
+
for proc in psutil.process_iter():
|
|
31
|
+
try:
|
|
32
|
+
files = proc.open_files()
|
|
33
|
+
except psutil.AccessDenied:
|
|
34
|
+
continue
|
|
35
|
+
tmp = [file.path for file in files if path in file.path]
|
|
36
|
+
if len(tmp) > 0:
|
|
37
|
+
res[proc.pid] = tmp
|
|
38
|
+
|
|
31
39
|
# Convert to list of dictionaries for consistent data structure
|
|
32
40
|
result_data = [{"pid": pid, "files": files} for pid, files in res.items()]
|
|
33
41
|
console.print(Panel(f"✅ Found {len(res)} processes accessing the specified file", title="[bold blue]Process Info[/bold blue]", border_style="blue"))
|
|
@@ -53,27 +61,34 @@ class ProcessManager:
|
|
|
53
61
|
title = "📊 INITIALIZING PROCESS MANAGER"
|
|
54
62
|
console.print(Panel(title, title="[bold blue]Process Info[/bold blue]", border_style="blue"))
|
|
55
63
|
process_info = []
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
64
|
+
|
|
65
|
+
with Progress(
|
|
66
|
+
SpinnerColumn(),
|
|
67
|
+
TextColumn("[progress.description]{task.description}"),
|
|
68
|
+
) as progress:
|
|
69
|
+
progress.add_task("🔍 Reading system processes...", total=None)
|
|
70
|
+
|
|
71
|
+
for proc in psutil.process_iter():
|
|
72
|
+
try:
|
|
73
|
+
mem_usage_mb = proc.memory_info().rss / (1024 * 1024)
|
|
74
|
+
# Convert create_time to local timezone
|
|
75
|
+
create_time_utc = datetime.fromtimestamp(proc.create_time(), tz=timezone("UTC"))
|
|
76
|
+
create_time_local = create_time_utc.astimezone(timezone("Australia/Adelaide"))
|
|
77
|
+
|
|
78
|
+
process_info.append(
|
|
79
|
+
{
|
|
80
|
+
"pid": proc.pid,
|
|
81
|
+
"name": proc.name(),
|
|
82
|
+
"username": proc.username(),
|
|
83
|
+
"cpu_percent": proc.cpu_percent(),
|
|
84
|
+
"memory_usage_mb": mem_usage_mb,
|
|
85
|
+
"status": proc.status(),
|
|
86
|
+
"create_time": create_time_local,
|
|
87
|
+
"command": " ".join(proc.cmdline()),
|
|
88
|
+
}
|
|
89
|
+
)
|
|
90
|
+
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
|
91
|
+
pass
|
|
77
92
|
|
|
78
93
|
# Sort by memory usage (descending)
|
|
79
94
|
process_info.sort(key=lambda x: x["memory_usage_mb"], reverse=True)
|
machineconfig/utils/ssh.py
CHANGED
|
@@ -116,13 +116,35 @@ class SSH: # inferior alternative: https://github.com/fabric/fabric
|
|
|
116
116
|
print(f"""⚠️ WARNING: Failed to open SFTP connection to {hostname}.
|
|
117
117
|
Error Details: {err}\nData transfer may be affected!""")
|
|
118
118
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
119
|
+
from rich.progress import Progress, SpinnerColumn, TextColumn, BarColumn, FileSizeColumn, TransferSpeedColumn
|
|
120
|
+
|
|
121
|
+
class RichProgressWrapper:
|
|
122
|
+
def __init__(self, **kwargs: Any):
|
|
123
|
+
self.kwargs = kwargs
|
|
124
|
+
self.progress: Optional[Progress] = None
|
|
125
|
+
self.task: Optional[Any] = None
|
|
126
|
+
|
|
127
|
+
def __enter__(self) -> "RichProgressWrapper":
|
|
128
|
+
self.progress = Progress(
|
|
129
|
+
SpinnerColumn(),
|
|
130
|
+
TextColumn("[bold blue]{task.description}"),
|
|
131
|
+
BarColumn(),
|
|
132
|
+
FileSizeColumn(),
|
|
133
|
+
TransferSpeedColumn(),
|
|
134
|
+
)
|
|
135
|
+
self.progress.start()
|
|
136
|
+
self.task = self.progress.add_task("Transferring...", total=0)
|
|
137
|
+
return self
|
|
138
|
+
|
|
139
|
+
def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
|
|
140
|
+
if self.progress:
|
|
141
|
+
self.progress.stop()
|
|
142
|
+
|
|
143
|
+
def view_bar(self, transferred: int, total: int) -> None:
|
|
144
|
+
if self.progress and self.task is not None:
|
|
145
|
+
self.progress.update(self.task, completed=transferred, total=total)
|
|
146
|
+
|
|
147
|
+
self.tqdm_wrap = RichProgressWrapper
|
|
126
148
|
self._local_distro: Optional[str] = None
|
|
127
149
|
self._remote_distro: Optional[str] = None
|
|
128
150
|
self._remote_machine: Optional[MACHINE] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: machineconfig
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.8
|
|
4
4
|
Summary: Dotfiles management package
|
|
5
5
|
Author-email: Alex Al-Saffar <programmer@usa.com>
|
|
6
6
|
License: Apache 2.0
|
|
@@ -30,7 +30,6 @@ Requires-Dist: rich>=14.0.0
|
|
|
30
30
|
Requires-Dist: tenacity>=9.1.2
|
|
31
31
|
Requires-Dist: toml>=0.10.2
|
|
32
32
|
Requires-Dist: tomli>=2.2.1
|
|
33
|
-
Requires-Dist: tqdm>=4.67.1
|
|
34
33
|
Provides-Extra: windows
|
|
35
34
|
Requires-Dist: pywin32; extra == "windows"
|
|
36
35
|
Provides-Extra: docs
|
|
@@ -45,7 +45,7 @@ machineconfig/jobs/linux/msc/cli_agents.sh,sha256=X94rDsNHokIWQyHUQu0n2d0AbR39ak
|
|
|
45
45
|
machineconfig/jobs/linux/msc/lid.sh,sha256=09LeoSaXCGjCn7YxPcIFQpHroYdglJlEtFU2agarh3I,1302
|
|
46
46
|
machineconfig/jobs/linux/msc/network.sh,sha256=dmISsh0hioDheinqee3qHfo2k7ClFx6G_GfGDxuflmc,1796
|
|
47
47
|
machineconfig/jobs/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
|
-
machineconfig/jobs/python/check_installations.py,sha256=
|
|
48
|
+
machineconfig/jobs/python/check_installations.py,sha256=o0mrZ-ivdED_7Od1tdtwJ4XSQRfiY6d_HciXLh1PXtY,11126
|
|
49
49
|
machineconfig/jobs/python/create_bootable_media.py,sha256=KKtcPk0rFLQc4eNVP6nbeYX-P7Gpqi0HvfIcUM6rVVs,827
|
|
50
50
|
machineconfig/jobs/python/python_cargo_build_share.py,sha256=RDe1QiTH3vLQ1wjN0kE5NxMIqwB-_WHz6O3svyuH_VE,2133
|
|
51
51
|
machineconfig/jobs/python/python_ve_symlink.py,sha256=quma-fmKIeNbScaQ3HdZV50QCcGt4MF6HjBfsHtxdv4,852
|
|
@@ -169,7 +169,7 @@ machineconfig/scripts/python/devops.py,sha256=5l2d2WlQSZ811W6Gtw6xwmIypt-NLHcABJ
|
|
|
169
169
|
machineconfig/scripts/python/devops_add_identity.py,sha256=gYcRzUZGr-truU2l5iPLEiWSZpKLzz5a6v5VPrEMVwg,3869
|
|
170
170
|
machineconfig/scripts/python/devops_add_ssh_key.py,sha256=D66vyl4NnvwL306yJXSFI4ht0sz-m9yczuBf82VCodo,6760
|
|
171
171
|
machineconfig/scripts/python/devops_backup_retrieve.py,sha256=noN0pgZkj7wdQSZpyCOKYVV_npcKn1CkXtqt1l2QO4w,6201
|
|
172
|
-
machineconfig/scripts/python/devops_devapps_install.py,sha256=
|
|
172
|
+
machineconfig/scripts/python/devops_devapps_install.py,sha256=6G_drNiChsFkX4qj_K_DPn666QxqYlkp9ENQAIs5HUw,8540
|
|
173
173
|
machineconfig/scripts/python/devops_update_repos.py,sha256=bTvKYvT6i6TTmjpfM19NyPb5_Y9vqESYNzjYEzT0N4k,12627
|
|
174
174
|
machineconfig/scripts/python/dotfile.py,sha256=miL8mQH2AqPdnHSz0Cxa7qQavaOmzTD9DAF66H2PRzA,2259
|
|
175
175
|
machineconfig/scripts/python/fire_agents.py,sha256=WcdvWuqg0GiAoW3JWnVZSl3009QCPQ6FmEPzEmZz_vE,9354
|
|
@@ -186,7 +186,7 @@ machineconfig/scripts/python/mount_ssh.py,sha256=uALax_ZVKihspQF6TuUtvtoAo-VRHCk
|
|
|
186
186
|
machineconfig/scripts/python/onetimeshare.py,sha256=bmGsNnskym5OWfIhpOfZG5jq3m89FS0a6dF5Sb8LaZM,2539
|
|
187
187
|
machineconfig/scripts/python/pomodoro.py,sha256=SPkfeoZGv8rylGiOyzQ7UK3aXZ3G2FIOuGkSuBUggOI,2019
|
|
188
188
|
machineconfig/scripts/python/repos.py,sha256=K6Q4E3YsV3BdXIJXgiy2bhv9mzBAlvERBhliPM4mN3Q,7229
|
|
189
|
-
machineconfig/scripts/python/repos_helper_record.py,sha256=
|
|
189
|
+
machineconfig/scripts/python/repos_helper_record.py,sha256=rtnjcr2ZCzt4j7oSPws25fPiCzshOEU_jH1ORW4QWx0,11372
|
|
190
190
|
machineconfig/scripts/python/scheduler.py,sha256=7IBjMMOHMkklcWzYwz93EH9XzbJ5uPqU03bJ_lYbRNo,3083
|
|
191
191
|
machineconfig/scripts/python/snapshot.py,sha256=aDvKeoniZaeTSNv9zWBUajaj2yagAxVdfuvO1_tgq5Y,1026
|
|
192
192
|
machineconfig/scripts/python/start_slidev.py,sha256=MPCN0JgRzOAXywj6n9s0iZYcLFAscP-eOPQvkUyElRA,4525
|
|
@@ -197,12 +197,12 @@ machineconfig/scripts/python/wifi_conn.py,sha256=2FJ4srVthGHsy3KSXpvndAyVkNO8n_X
|
|
|
197
197
|
machineconfig/scripts/python/wsl_windows_transfer.py,sha256=RfSf5SJejnqrg36YfXSwu52ceEW77uNP4WC6QQUyRTA,3650
|
|
198
198
|
machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc,sha256=IppPGJ6Wk5Ma5oPWfJpN5QDW6-NvCk29la5JGbgAJ6E,171
|
|
199
199
|
machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-313.pyc,sha256=sWCevZgeQxIHoQ5Ea7a0OpjgJpkcKMoZylwCyizXYqA,10555
|
|
200
|
-
machineconfig/scripts/python/__pycache__/devops.cpython-313.pyc,sha256=
|
|
200
|
+
machineconfig/scripts/python/__pycache__/devops.cpython-313.pyc,sha256=8j-fZCwpUVjwTRYgcNfTjjUyDg__ECUPlhtk79Vbtas,10817
|
|
201
201
|
machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-313.pyc,sha256=BrMh1Rzca_iY0EvlPsSXBqpwOZw-De6I3y8blXJZCuc,8616
|
|
202
202
|
machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-313.pyc,sha256=8S4qRoRpahRr8HEZ4mfxEVLWbWbVhcdmAMNeL8U7Sp4,13923
|
|
203
203
|
machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-313.pyc,sha256=jx8_Gyx1kkqCwIe8W51h9hO89yuzTdd4Vh5oPRBOLio,826
|
|
204
204
|
machineconfig/scripts/python/__pycache__/repos.cpython-313.pyc,sha256=CoqJX-Oc-7suZ03dIkNqWscKXsuiswHHoGPM_VaZzS8,9642
|
|
205
|
-
machineconfig/scripts/python/__pycache__/repos_helper_record.cpython-313.pyc,sha256=
|
|
205
|
+
machineconfig/scripts/python/__pycache__/repos_helper_record.cpython-313.pyc,sha256=VWsAX_sFJxVD0MUiZ1d9Bj9p4kw5gquukGLoJlID-lQ,13573
|
|
206
206
|
machineconfig/scripts/python/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
207
207
|
machineconfig/scripts/python/ai/generate_files.py,sha256=Vfjgd0skJu-WTgqUxmOVFzaNMfSFBaFmY5oGGVY7MZY,2860
|
|
208
208
|
machineconfig/scripts/python/ai/mcinit.py,sha256=8A0vJYJbw4CJjd4pIS5rL8uYbewn0ZmlTRiETLTSGMY,5749
|
|
@@ -394,10 +394,10 @@ machineconfig/utils/notifications.py,sha256=7OQmcOMhJIOQ2Rhgm9HDeyhXtjUkC4Ldl1Rr
|
|
|
394
394
|
machineconfig/utils/options.py,sha256=F8w5AEvm8yxgipYpLgeHlXJtvoXigZvDJjSqA5TU9J0,8554
|
|
395
395
|
machineconfig/utils/path.py,sha256=4PNyyYsjPdJGDx1FbhPT4Sv6uR6PHAk9tMZiGQCGkIc,8071
|
|
396
396
|
machineconfig/utils/path_reduced.py,sha256=hccGUTSMtggU-LpLNS7W_c1s-CqhjHMbTQ59-1EqgmY,52473
|
|
397
|
-
machineconfig/utils/procs.py,sha256=
|
|
397
|
+
machineconfig/utils/procs.py,sha256=Ysbo61YrJ0N1kAsF52-WAdS5fplAABNDd0ZgCpTRzK8,11476
|
|
398
398
|
machineconfig/utils/scheduling.py,sha256=8xjeoR_D5QHT0d7299Mgsj6JUbvkE_PX_pWq3myi658,11184
|
|
399
399
|
machineconfig/utils/source_of_truth.py,sha256=n2zSG3HQO7YIdZi31dz_isxWMNQcO9LpJ_RCCSKcTHA,725
|
|
400
|
-
machineconfig/utils/ssh.py,sha256=
|
|
400
|
+
machineconfig/utils/ssh.py,sha256=YBL2avhPUC43L1wxi2Doh2-cK-I7j81eUWEmfzAj9Jc,21196
|
|
401
401
|
machineconfig/utils/terminal.py,sha256=k3xoMwJPGvmaeL9CxEIwrcQjRNN6EnJItoIIxXrUY8c,12258
|
|
402
402
|
machineconfig/utils/upgrade_packages.py,sha256=H96zVJEWXJW07nh5vhjuSCrPtXGqoUb7xeJsFYYdmCI,3330
|
|
403
403
|
machineconfig/utils/utils2.py,sha256=Y9bX4gaaPih7gbOeTcfPhQ3CcMFKGXgVCEQhVhljH4Q,2526
|
|
@@ -412,8 +412,8 @@ machineconfig/utils/installer_utils/installer_abc.py,sha256=jR5XvrCjisIzoxk2VL0V
|
|
|
412
412
|
machineconfig/utils/installer_utils/installer_class.py,sha256=l0UM-u6ZfWx-uLvAk_mmojbppj4sxDrHX3wmVwQv12w,20366
|
|
413
413
|
machineconfig/utils/schemas/layouts/layout_types.py,sha256=SPgoc0ncazKlXtQUhi7u1mMP2JvDt5jSG9YQmBr7-zc,616
|
|
414
414
|
machineconfig/utils/schemas/repos/repos_types.py,sha256=beWlwPRNDBABmlzxHBYkAsMXS1MgFFdDZf4G2ge8J-I,408
|
|
415
|
-
machineconfig-2.
|
|
416
|
-
machineconfig-2.
|
|
417
|
-
machineconfig-2.
|
|
418
|
-
machineconfig-2.
|
|
419
|
-
machineconfig-2.
|
|
415
|
+
machineconfig-2.8.dist-info/METADATA,sha256=B7vcd_JlfLHIcqV3pv_-xqhDYVKyYpRdt4ikTWC0mA0,7137
|
|
416
|
+
machineconfig-2.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
417
|
+
machineconfig-2.8.dist-info/entry_points.txt,sha256=71EzS7_2LTIigVxC1YXNxHXhC9mu5Me2Feyq2KocXBI,977
|
|
418
|
+
machineconfig-2.8.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
|
|
419
|
+
machineconfig-2.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|