portacode 1.4.15.dev14__py3-none-any.whl → 1.4.15.dev16__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.
- portacode/_version.py +2 -2
- portacode/connection/handlers/proxmox_infra.py +54 -47
- {portacode-1.4.15.dev14.dist-info → portacode-1.4.15.dev16.dist-info}/METADATA +1 -1
- {portacode-1.4.15.dev14.dist-info → portacode-1.4.15.dev16.dist-info}/RECORD +8 -8
- {portacode-1.4.15.dev14.dist-info → portacode-1.4.15.dev16.dist-info}/WHEEL +0 -0
- {portacode-1.4.15.dev14.dist-info → portacode-1.4.15.dev16.dist-info}/entry_points.txt +0 -0
- {portacode-1.4.15.dev14.dist-info → portacode-1.4.15.dev16.dist-info}/licenses/LICENSE +0 -0
- {portacode-1.4.15.dev14.dist-info → portacode-1.4.15.dev16.dist-info}/top_level.txt +0 -0
portacode/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '1.4.15.
|
|
32
|
-
__version_tuple__ = version_tuple = (1, 4, 15, '
|
|
31
|
+
__version__ = version = '1.4.15.dev16'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 4, 15, 'dev16')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -845,8 +845,16 @@ def _connect_proxmox(config: Dict[str, Any]) -> Any:
|
|
|
845
845
|
)
|
|
846
846
|
|
|
847
847
|
|
|
848
|
+
def _pick_shell() -> str:
|
|
849
|
+
for candidate in ("/bin/bash", "/bin/sh"):
|
|
850
|
+
if Path(candidate).exists():
|
|
851
|
+
return candidate
|
|
852
|
+
return "sh"
|
|
853
|
+
|
|
854
|
+
|
|
848
855
|
def _run_pct(vmid: int, cmd: str, input_text: Optional[str] = None) -> Dict[str, Any]:
|
|
849
|
-
|
|
856
|
+
shell = _pick_shell()
|
|
857
|
+
full = ["pct", "exec", str(vmid), "--", shell, "-lc", cmd]
|
|
850
858
|
start = time.time()
|
|
851
859
|
proc = subprocess.run(full, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, input=input_text)
|
|
852
860
|
return {
|
|
@@ -1146,55 +1154,54 @@ def _bootstrap_portacode(
|
|
|
1146
1154
|
ssh_key,
|
|
1147
1155
|
package_manager=detected_manager,
|
|
1148
1156
|
)
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
f" stdout={stdout!r}" if stdout else "",
|
|
1178
|
-
" " if stdout and stderr else "",
|
|
1179
|
-
f"stderr={stderr!r}" if stderr else "",
|
|
1180
|
-
)
|
|
1181
|
-
if summary:
|
|
1182
|
-
logger.warning(
|
|
1183
|
-
"Portacode bootstrap failure summary=%s%s%s",
|
|
1184
|
-
summary,
|
|
1185
|
-
f" history_len={len(history)}" if history else "",
|
|
1186
|
-
f" command={command_text}" if command_text else "",
|
|
1187
|
-
)
|
|
1188
|
-
logger.error(
|
|
1189
|
-
"Portacode bootstrap command failed%s%s%s",
|
|
1190
|
-
f" command={command_text}" if command_text else "",
|
|
1157
|
+
results, ok = _run_setup_steps(
|
|
1158
|
+
vmid,
|
|
1159
|
+
actual_steps,
|
|
1160
|
+
user,
|
|
1161
|
+
progress_callback=progress_callback,
|
|
1162
|
+
start_index=start_index,
|
|
1163
|
+
total_steps=total_steps,
|
|
1164
|
+
)
|
|
1165
|
+
if not ok:
|
|
1166
|
+
details = results[-1] if results else {}
|
|
1167
|
+
summary = details.get("error_summary") or details.get("stderr") or details.get("stdout") or details.get("name")
|
|
1168
|
+
history = details.get("history")
|
|
1169
|
+
history_snippet = ""
|
|
1170
|
+
if isinstance(history, list) and history:
|
|
1171
|
+
history_snippet = f" history={history[-3:]}"
|
|
1172
|
+
command = details.get("cmd")
|
|
1173
|
+
command_text = ""
|
|
1174
|
+
if command:
|
|
1175
|
+
if isinstance(command, (list, tuple)):
|
|
1176
|
+
command_text = shlex.join(str(entry) for entry in command)
|
|
1177
|
+
else:
|
|
1178
|
+
command_text = str(command)
|
|
1179
|
+
command_suffix = f" command={command_text}" if command_text else ""
|
|
1180
|
+
stdout = details.get("stdout")
|
|
1181
|
+
stderr = details.get("stderr")
|
|
1182
|
+
if stdout or stderr:
|
|
1183
|
+
logger.debug(
|
|
1184
|
+
"Bootstrap command output%s%s%s",
|
|
1191
1185
|
f" stdout={stdout!r}" if stdout else "",
|
|
1192
|
-
|
|
1186
|
+
" " if stdout and stderr else "",
|
|
1187
|
+
f"stderr={stderr!r}" if stderr else "",
|
|
1193
1188
|
)
|
|
1194
|
-
|
|
1195
|
-
|
|
1189
|
+
if summary:
|
|
1190
|
+
logger.warning(
|
|
1191
|
+
"Portacode bootstrap failure summary=%s%s%s",
|
|
1192
|
+
summary,
|
|
1193
|
+
f" history_len={len(history)}" if history else "",
|
|
1194
|
+
f" command={command_text}" if command_text else "",
|
|
1196
1195
|
)
|
|
1197
|
-
|
|
1196
|
+
logger.error(
|
|
1197
|
+
"Portacode bootstrap command failed%s%s%s",
|
|
1198
|
+
f" command={command_text}" if command_text else "",
|
|
1199
|
+
f" stdout={stdout!r}" if stdout else "",
|
|
1200
|
+
f" stderr={stderr!r}" if stderr else "",
|
|
1201
|
+
)
|
|
1202
|
+
raise RuntimeError(
|
|
1203
|
+
f"Portacode bootstrap steps failed: {summary}{history_snippet}{command_suffix}"
|
|
1204
|
+
)
|
|
1198
1205
|
key_step = next((entry for entry in results if entry.get("name") == "portacode_connect"), None)
|
|
1199
1206
|
public_key = key_step.get("public_key") if key_step else default_public_key
|
|
1200
1207
|
if not public_key:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
portacode/README.md,sha256=4dKtpvR8LNgZPVz37GmkQCMWIr_u25Ao63iW56s7Ke4,775
|
|
2
2
|
portacode/__init__.py,sha256=oB3sV1wXr-um-RXio73UG8E5Xx6cF2ZVJveqjNmC-vQ,1086
|
|
3
3
|
portacode/__main__.py,sha256=jmHTGC1hzmo9iKJLv-SSYe9BSIbPPZ2IOpecI03PlTs,296
|
|
4
|
-
portacode/_version.py,sha256=
|
|
4
|
+
portacode/_version.py,sha256=637QsVpIoP3cCQrtSsk1Nn0yP_d4TpSDlN-JawDsHN4,721
|
|
5
5
|
portacode/cli.py,sha256=mGLKoZ-T2FBF7IA9wUq0zyG0X9__-A1ao7gajjcVRH8,21828
|
|
6
6
|
portacode/data.py,sha256=5-s291bv8J354myaHm1Y7CQZTZyRzMU3TGe5U4hb-FA,1591
|
|
7
7
|
portacode/keypair.py,sha256=0OO4vHDcF1XMxCDqce61xFTlFwlTcmqe5HyGsXFEt7s,5838
|
|
@@ -22,7 +22,7 @@ portacode/connection/handlers/diff_handlers.py,sha256=iYTIRCcpEQ03vIPKZCsMTE5aZb
|
|
|
22
22
|
portacode/connection/handlers/file_handlers.py,sha256=nAJH8nXnX07xxD28ngLpgIUzcTuRwZBNpEGEKdRqohw,39507
|
|
23
23
|
portacode/connection/handlers/project_aware_file_handlers.py,sha256=AqgMnDqX2893T2NsrvUSCwjN5VKj4Pb2TN0S_SuboOE,9803
|
|
24
24
|
portacode/connection/handlers/project_state_handlers.py,sha256=v6ZefGW9i7n1aZLq2jOGumJIjYb6aHlPI4m1jkYewm8,1686
|
|
25
|
-
portacode/connection/handlers/proxmox_infra.py,sha256=
|
|
25
|
+
portacode/connection/handlers/proxmox_infra.py,sha256=2rXP24mMwZmrzb5313NzN8nQ_TTYjwl3vNPGT8jKw3g,69477
|
|
26
26
|
portacode/connection/handlers/registry.py,sha256=qXGE60sYEWg6ZtVQzFcZ5YI2XWR6lMgw4hAL9x5qR1I,6181
|
|
27
27
|
portacode/connection/handlers/session.py,sha256=uNGfiO_1B9-_yjJKkpvmbiJhIl6b-UXlT86UTfd6WYE,42219
|
|
28
28
|
portacode/connection/handlers/system_handlers.py,sha256=fr12QpOr_Z8KYGUU-AYrTQwRPAcrLK85hvj3SEq1Kw8,14757
|
|
@@ -65,7 +65,7 @@ portacode/utils/__init__.py,sha256=NgBlWTuNJESfIYJzP_3adI1yJQJR0XJLRpSdVNaBAN0,3
|
|
|
65
65
|
portacode/utils/diff_apply.py,sha256=4Oi7ft3VUCKmiUE4VM-OeqO7Gk6H7PF3WnN4WHXtjxI,15157
|
|
66
66
|
portacode/utils/diff_renderer.py,sha256=S76StnQ2DLfsz4Gg0m07UwPfRp8270PuzbNaQq-rmYk,13850
|
|
67
67
|
portacode/utils/ntp_clock.py,sha256=VqCnWCTehCufE43W23oB-WUdAZGeCcLxkmIOPwInYHc,2499
|
|
68
|
-
portacode-1.4.15.
|
|
68
|
+
portacode-1.4.15.dev16.dist-info/licenses/LICENSE,sha256=2FGbCnUDgRYuQTkB1O1dUUpu5CVAjK1j4_p6ack9Z54,1066
|
|
69
69
|
test_modules/README.md,sha256=Do_agkm9WhSzueXjRAkV_xEj6Emy5zB3N3VKY5Roce8,9274
|
|
70
70
|
test_modules/__init__.py,sha256=1LcbHodIHsB0g-g4NGjSn6AMuCoGbymvXPYLOb6Z7F0,53
|
|
71
71
|
test_modules/test_device_online.py,sha256=QtYq0Dq9vME8Gp2O4fGSheqVf8LUtpsSKosXXk56gGM,1654
|
|
@@ -91,8 +91,8 @@ testing_framework/core/playwright_manager.py,sha256=Tw46qwxIhOFkS48C2IWIQHHNpEe-
|
|
|
91
91
|
testing_framework/core/runner.py,sha256=j2QwNJmAxVBmJvcbVS7DgPJUKPNzqfLmt_4NNdaKmZU,19297
|
|
92
92
|
testing_framework/core/shared_cli_manager.py,sha256=BESSNtyQb7BOlaOvZmm04T8Uezjms4KCBs2MzTxvzYQ,8790
|
|
93
93
|
testing_framework/core/test_discovery.py,sha256=2FZ9fJ8Dp5dloA-fkgXoJ_gCMC_nYPBnA3Hs2xlagzM,4928
|
|
94
|
-
portacode-1.4.15.
|
|
95
|
-
portacode-1.4.15.
|
|
96
|
-
portacode-1.4.15.
|
|
97
|
-
portacode-1.4.15.
|
|
98
|
-
portacode-1.4.15.
|
|
94
|
+
portacode-1.4.15.dev16.dist-info/METADATA,sha256=Ey7PqSFpIBhb9RxXs1IVY_RzdVK6mbOXRm7Ytxz7oWo,13052
|
|
95
|
+
portacode-1.4.15.dev16.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
96
|
+
portacode-1.4.15.dev16.dist-info/entry_points.txt,sha256=lLUUL-BM6_wwe44Xv0__5NQ1BnAz6jWjSMFvZdWW3zU,48
|
|
97
|
+
portacode-1.4.15.dev16.dist-info/top_level.txt,sha256=TGhTYUxfW8SyVZc_zGgzjzc24gGT7nSw8Qf73liVRKM,41
|
|
98
|
+
portacode-1.4.15.dev16.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|