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 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.dev14'
32
- __version_tuple__ = version_tuple = (1, 4, 15, 'dev14')
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
- full = ["pct", "exec", str(vmid), "--", "bash", "-lc", cmd]
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
- results, ok = _run_setup_steps(
1150
- vmid,
1151
- actual_steps,
1152
- user,
1153
- progress_callback=progress_callback,
1154
- start_index=start_index,
1155
- total_steps=total_steps,
1156
- )
1157
- if not ok:
1158
- details = results[-1] if results else {}
1159
- summary = details.get("error_summary") or details.get("stderr") or details.get("stdout") or details.get("name")
1160
- history = details.get("history")
1161
- history_snippet = ""
1162
- if isinstance(history, list) and history:
1163
- history_snippet = f" history={history[-3:]}"
1164
- command = details.get("cmd")
1165
- command_text = ""
1166
- if command:
1167
- if isinstance(command, (list, tuple)):
1168
- command_text = shlex.join(str(entry) for entry in command)
1169
- else:
1170
- command_text = str(command)
1171
- command_suffix = f" command={command_text}" if command_text else ""
1172
- stdout = details.get("stdout")
1173
- stderr = details.get("stderr")
1174
- if stdout or stderr:
1175
- logger.debug(
1176
- "Bootstrap command output%s%s%s",
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
- f" stderr={stderr!r}" if stderr else "",
1186
+ " " if stdout and stderr else "",
1187
+ f"stderr={stderr!r}" if stderr else "",
1193
1188
  )
1194
- raise RuntimeError(
1195
- f"Portacode bootstrap steps failed: {summary}{history_snippet}{command_suffix}"
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
- raise RuntimeError("Portacode bootstrap steps failed.")
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: portacode
3
- Version: 1.4.15.dev14
3
+ Version: 1.4.15.dev16
4
4
  Summary: Portacode CLI client and SDK
5
5
  Home-page: https://github.com/portacode/portacode
6
6
  Author: Meena Erian
@@ -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=7sZ3dV4aYpvI1I9brTQWYWiK506aqN6dWnk5AodwRfY,721
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=AMaNY1X3-QydOipj2o6N4io-ITwKnogFeTXABoZ6E4E,69551
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.dev14.dist-info/licenses/LICENSE,sha256=2FGbCnUDgRYuQTkB1O1dUUpu5CVAjK1j4_p6ack9Z54,1066
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.dev14.dist-info/METADATA,sha256=JluPzf6YcZruBqEn8aKqfD8u9eY5GqaAn2ZuAU8pLRQ,13052
95
- portacode-1.4.15.dev14.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
96
- portacode-1.4.15.dev14.dist-info/entry_points.txt,sha256=lLUUL-BM6_wwe44Xv0__5NQ1BnAz6jWjSMFvZdWW3zU,48
97
- portacode-1.4.15.dev14.dist-info/top_level.txt,sha256=TGhTYUxfW8SyVZc_zGgzjzc24gGT7nSw8Qf73liVRKM,41
98
- portacode-1.4.15.dev14.dist-info/RECORD,,
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,,