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.

@@ -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
@@ -2,7 +2,7 @@
2
2
 
3
3
  # import subprocess
4
4
  from machineconfig.utils.installer_utils.installer_class import Installer
5
- from tqdm import tqdm
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
- options = [x.get_description() for x in tqdm(installers, desc="✅ Checking installed programs")] + list(get_args(WHICH_CAT))
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 = False, preferred_remote: Optional[str] = None) -> RepoRecordDict:
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 record_repos_recursively(repos_root: str, r: bool = True) -> list[RepoRecordDict]:
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
- res.append(record_a_repo(a_search_res))
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
- repo_records = record_repos_recursively(repos_root=str(repos_root))
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
@@ -1,7 +1,7 @@
1
1
  """Procs"""
2
2
 
3
3
  import psutil
4
- from tqdm import tqdm
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
- for proc in tqdm(psutil.process_iter(), desc="🔎 Scanning processes"):
24
- try:
25
- files = proc.open_files()
26
- except psutil.AccessDenied:
27
- continue
28
- tmp = [file.path for file in files if path in file.path]
29
- if len(tmp) > 0:
30
- res[proc.pid] = tmp
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
- for proc in tqdm(psutil.process_iter(), desc="🔍 Reading system processes"):
57
- try:
58
- mem_usage_mb = proc.memory_info().rss / (1024 * 1024)
59
- # Convert create_time to local timezone
60
- create_time_utc = datetime.fromtimestamp(proc.create_time(), tz=timezone("UTC"))
61
- create_time_local = create_time_utc.astimezone(timezone("Australia/Adelaide"))
62
-
63
- process_info.append(
64
- {
65
- "pid": proc.pid,
66
- "name": proc.name(),
67
- "username": proc.username(),
68
- "cpu_percent": proc.cpu_percent(),
69
- "memory_usage_mb": mem_usage_mb,
70
- "status": proc.status(),
71
- "create_time": create_time_local,
72
- "command": " ".join(proc.cmdline()),
73
- }
74
- )
75
- except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
76
- pass
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)
@@ -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
- def view_bar(slf: Any, a: Any, b: Any):
120
- slf.total = int(b)
121
- slf.update(int(a - slf.n)) # update pbar with increment
122
-
123
- from tqdm import tqdm
124
-
125
- self.tqdm_wrap = type("TqdmWrap", (tqdm,), {"view_bar": view_bar})
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.7
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=HOGlZOCtpZyORNEbqDdsnSNWyFjXIrdXQhTwls9vsX8,11151
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=HrKa1mSwMXtdFPOy4LCHUAY6LvrlHFtDW_kCrIYL90w,8160
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=IZRsKBtjK72b7c0zqJZiWq7V7-c_yENQoAUuvJCUsh0,8360
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=F1M56WCHrXpzJ-2-_xdzeDlumE16jfzP7S3MIChr2NA,11377
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=zgtJk6kQRvmrhuB_Ngx2BfHH17CxXKytTrCbBshgzc4,10142
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=kj_oPXJv9KXKXzMmv3Z71UDYCUQZRR3ez97j6IyGCz0,10937
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=fJLa2_rnhfc-vh6lyF4cMmebsoh8FBftH1iuzRuWQu0,20153
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.7.dist-info/METADATA,sha256=_xIB-yrdzztYzZgRegtUOoL7v3QrhEe-IfZRt2Jkubo,7165
416
- machineconfig-2.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
417
- machineconfig-2.7.dist-info/entry_points.txt,sha256=71EzS7_2LTIigVxC1YXNxHXhC9mu5Me2Feyq2KocXBI,977
418
- machineconfig-2.7.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
419
- machineconfig-2.7.dist-info/RECORD,,
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,,