clonebox 0.1.17__py3-none-any.whl → 0.1.18__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.
clonebox/cli.py CHANGED
@@ -80,98 +80,95 @@ def _resolve_vm_name_and_config_file(name: Optional[str]) -> tuple[str, Optional
80
80
 
81
81
 
82
82
  def _qga_ping(vm_name: str, conn_uri: str) -> bool:
83
- def _qga_ping() -> bool:
84
- try:
85
- result = subprocess.run(
86
- [
87
- "virsh",
88
- "--connect",
89
- conn_uri,
90
- "qemu-agent-command",
91
- vm_name,
92
- json.dumps({"execute": "guest-ping"}),
93
- ],
94
- capture_output=True,
95
- text=True,
96
- timeout=5,
97
- )
98
- return result.returncode == 0
99
- except Exception:
100
- return False
83
+ import subprocess
101
84
 
102
- return _qga_ping()
85
+ try:
86
+ result = subprocess.run(
87
+ [
88
+ "virsh",
89
+ "--connect",
90
+ conn_uri,
91
+ "qemu-agent-command",
92
+ vm_name,
93
+ json.dumps({"execute": "guest-ping"}),
94
+ ],
95
+ capture_output=True,
96
+ text=True,
97
+ timeout=5,
98
+ )
99
+ return result.returncode == 0
100
+ except Exception:
101
+ return False
103
102
 
104
103
 
105
104
  def _qga_exec(vm_name: str, conn_uri: str, command: str, timeout: int = 10) -> Optional[str]:
106
- def _qga_exec() -> Optional[str]:
107
- try:
108
- payload = {
109
- "execute": "guest-exec",
110
- "arguments": {
111
- "path": "/bin/sh",
112
- "arg": ["-c", command],
113
- "capture-output": True,
114
- },
115
- }
116
- exec_result = subprocess.run(
105
+ import subprocess
106
+ import base64
107
+ import time
108
+
109
+ try:
110
+ payload = {
111
+ "execute": "guest-exec",
112
+ "arguments": {
113
+ "path": "/bin/sh",
114
+ "arg": ["-c", command],
115
+ "capture-output": True,
116
+ },
117
+ }
118
+ exec_result = subprocess.run(
119
+ [
120
+ "virsh",
121
+ "--connect",
122
+ conn_uri,
123
+ "qemu-agent-command",
124
+ vm_name,
125
+ json.dumps(payload),
126
+ ],
127
+ capture_output=True,
128
+ text=True,
129
+ timeout=timeout,
130
+ )
131
+ if exec_result.returncode != 0:
132
+ return None
133
+
134
+ resp = json.loads(exec_result.stdout)
135
+ pid = resp.get("return", {}).get("pid")
136
+ if not pid:
137
+ return None
138
+
139
+ deadline = time.time() + timeout
140
+ while time.time() < deadline:
141
+ status_payload = {"execute": "guest-exec-status", "arguments": {"pid": pid}}
142
+ status_result = subprocess.run(
117
143
  [
118
144
  "virsh",
119
145
  "--connect",
120
146
  conn_uri,
121
147
  "qemu-agent-command",
122
148
  vm_name,
123
- json.dumps(payload),
149
+ json.dumps(status_payload),
124
150
  ],
125
151
  capture_output=True,
126
152
  text=True,
127
- timeout=timeout,
153
+ timeout=5,
128
154
  )
129
- if exec_result.returncode != 0:
130
- return None
131
-
132
- resp = json.loads(exec_result.stdout)
133
- pid = resp.get("return", {}).get("pid")
134
- if not pid:
155
+ if status_result.returncode != 0:
135
156
  return None
136
157
 
137
- import base64
138
- import time
139
-
140
- deadline = time.time() + timeout
141
- while time.time() < deadline:
142
- status_payload = {"execute": "guest-exec-status", "arguments": {"pid": pid}}
143
- status_result = subprocess.run(
144
- [
145
- "virsh",
146
- "--connect",
147
- conn_uri,
148
- "qemu-agent-command",
149
- vm_name,
150
- json.dumps(status_payload),
151
- ],
152
- capture_output=True,
153
- text=True,
154
- timeout=5,
155
- )
156
- if status_result.returncode != 0:
157
- return None
158
-
159
- status_resp = json.loads(status_result.stdout)
160
- ret = status_resp.get("return", {})
161
- if not ret.get("exited", False):
162
- time.sleep(0.3)
163
- continue
164
-
165
- out_data = ret.get("out-data")
166
- if out_data:
167
- return base64.b64decode(out_data).decode().strip()
168
- return ""
158
+ status_resp = json.loads(status_result.stdout)
159
+ ret = status_resp.get("return", {})
160
+ if not ret.get("exited", False):
161
+ time.sleep(0.3)
162
+ continue
169
163
 
170
- return None
171
- except Exception:
172
- return None
164
+ out_data = ret.get("out-data")
165
+ if out_data:
166
+ return base64.b64decode(out_data).decode().strip()
167
+ return ""
173
168
 
174
- return _qga_exec()
169
+ return None
170
+ except Exception:
171
+ return None
175
172
 
176
173
 
177
174
  def run_vm_diagnostics(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clonebox
3
- Version: 0.1.17
3
+ Version: 0.1.18
4
4
  Summary: Clone your workstation environment to an isolated VM with selective apps, paths and services
5
5
  Author: CloneBox Team
6
6
  License: Apache-2.0
@@ -1,14 +1,14 @@
1
1
  clonebox/__init__.py,sha256=C1J7Uwrp8H9Zopo5JgrQYzXg-PWls1JdqmE_0Qp1Tro,408
2
2
  clonebox/__main__.py,sha256=Fcoyzwwyz5-eC_sBlQk5a5RbKx8uodQz5sKJ190U0NU,135
3
- clonebox/cli.py,sha256=mB2Xoz9llkHW9yIR-xRuZ94F_PmV833gdiKVKKcJQrc,98462
3
+ clonebox/cli.py,sha256=0Yjkq8EC5v8e402ouvPt3F3-8QSdKuMYZmOrIa8YARc,98076
4
4
  clonebox/cloner.py,sha256=tgN51yeNGesolO1wfuVh-CAGkAZew7oMoCYYz_bXgBk,32456
5
5
  clonebox/container.py,sha256=tiYK1ZB-DhdD6A2FuMA0h_sRNkUI7KfYcJ0tFOcdyeM,6105
6
6
  clonebox/detector.py,sha256=4fu04Ty6KC82WkcJZ5UL5TqXpWYE7Kb7R0uJ-9dtbCk,21635
7
7
  clonebox/models.py,sha256=Uxz9eHov2epJpNYbl0ejaOX91iMSjqdHskGdC8-smVk,7789
8
8
  clonebox/validator.py,sha256=8HV3ahfiLkFDOH4UOmZr7-fGfhKep1Jlw1joJeWSaQE,15858
9
- clonebox-0.1.17.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
10
- clonebox-0.1.17.dist-info/METADATA,sha256=YHJ3k1qzqhkB7hsuZVesQv5ANF6bbABLGTYSCl29p34,35220
11
- clonebox-0.1.17.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
12
- clonebox-0.1.17.dist-info/entry_points.txt,sha256=FES95Vi3btfViLEEoHdb8nikNxTqzaooi9ehZw9ZfWI,47
13
- clonebox-0.1.17.dist-info/top_level.txt,sha256=LdMo2cvCrEcRGH2M8JgQNVsCoszLV0xug6kx1JnaRjo,9
14
- clonebox-0.1.17.dist-info/RECORD,,
9
+ clonebox-0.1.18.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
10
+ clonebox-0.1.18.dist-info/METADATA,sha256=zdZz4r2QGeCLnFq757o0dR8T9OiLqYneys1r4LFcq58,35220
11
+ clonebox-0.1.18.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
12
+ clonebox-0.1.18.dist-info/entry_points.txt,sha256=FES95Vi3btfViLEEoHdb8nikNxTqzaooi9ehZw9ZfWI,47
13
+ clonebox-0.1.18.dist-info/top_level.txt,sha256=LdMo2cvCrEcRGH2M8JgQNVsCoszLV0xug6kx1JnaRjo,9
14
+ clonebox-0.1.18.dist-info/RECORD,,