portacode 1.4.13.dev5__py3-none-any.whl → 1.4.13.dev7__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.13.dev5'
32
- __version_tuple__ = version_tuple = (1, 4, 13, 'dev5')
31
+ __version__ = version = '1.4.13.dev7'
32
+ __version_tuple__ = version_tuple = (1, 4, 13, 'dev7')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -263,7 +263,10 @@ def _ensure_bridge(bridge: str = DEFAULT_BRIDGE) -> Dict[str, Any]:
263
263
  apt = shutil.which("apt-get")
264
264
  if not apt:
265
265
  raise RuntimeError("dnsmasq is missing and apt-get unavailable to install it")
266
- _call_subprocess([apt, "update"], check=True)
266
+ update = _call_subprocess([apt, "update"], check=False)
267
+ if update.returncode not in (0, 100):
268
+ msg = update.stderr or update.stdout or f"exit status {update.returncode}"
269
+ raise RuntimeError(f"apt-get update failed: {msg}")
267
270
  _call_subprocess([apt, "install", "-y", "dnsmasq"], check=True)
268
271
  _write_bridge_config(bridge)
269
272
  _ensure_sysctl()
@@ -714,6 +717,7 @@ def _push_bytes_to_container(
714
717
  parent_str = parent.as_posix()
715
718
  if parent_str not in {"", ".", "/"}:
716
719
  _run_pct_exec_check(vmid, ["mkdir", "-p", parent_str])
720
+ _run_pct_exec_check(vmid, ["chown", "-R", f"{user}:{user}", parent_str])
717
721
 
718
722
  with tempfile.NamedTemporaryFile(delete=False) as tmp:
719
723
  tmp.write(data)
@@ -742,7 +746,10 @@ def _push_bytes_to_container(
742
746
  def _resolve_portacode_key_dir(vmid: int, user: str) -> str:
743
747
  data_dir_cmd = f"su - {user} -c 'echo -n ${{XDG_DATA_HOME:-$HOME/.local/share}}'"
744
748
  data_home = _run_pct_check(vmid, data_dir_cmd)["stdout"].strip()
745
- return f"{data_home}/portacode/keys"
749
+ portacode_dir = f"{data_home}/portacode"
750
+ _run_pct_exec_check(vmid, ["mkdir", "-p", portacode_dir])
751
+ _run_pct_exec_check(vmid, ["chown", "-R", f"{user}:{user}", portacode_dir])
752
+ return f"{portacode_dir}/keys"
746
753
 
747
754
 
748
755
  def _deploy_device_keypair(vmid: int, user: str, private_key: str, public_key: str) -> None:
@@ -1030,17 +1037,13 @@ def configure_infrastructure(token_identifier: str, token_value: str, verify_ssl
1030
1037
  network = _ensure_bridge()
1031
1038
  # Wait for network convergence before validating connectivity
1032
1039
  time.sleep(2)
1033
- if _verify_connectivity():
1034
- network["health"] = "healthy"
1035
- else:
1036
- network = {"applied": False, "bridge": DEFAULT_BRIDGE, "message": "Connectivity check failed; bridge reverted"}
1037
- _revert_bridge()
1038
- except PermissionError as exc:
1039
- network = {"applied": False, "message": str(exc), "bridge": DEFAULT_BRIDGE}
1040
- logger.warning("Bridge setup skipped: %s", exc)
1041
- except Exception as exc: # pragma: no cover - best effort
1042
- network = {"applied": False, "message": str(exc), "bridge": DEFAULT_BRIDGE}
1043
- logger.warning("Bridge setup failed: %s", exc)
1040
+ if not _verify_connectivity():
1041
+ raise RuntimeError("Connectivity check failed; bridge reverted")
1042
+ network["health"] = "healthy"
1043
+ except Exception as exc:
1044
+ logger.warning("Bridge setup failed; reverting previous changes: %s", exc)
1045
+ _revert_bridge()
1046
+ raise
1044
1047
  config = {
1045
1048
  "host": DEFAULT_HOST,
1046
1049
  "node": node,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: portacode
3
- Version: 1.4.13.dev5
3
+ Version: 1.4.13.dev7
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=-8qHEfgIuA1gX0IiXHXHG1Zfu4eNnZLDSsV3Lsp8upE,719
4
+ portacode/_version.py,sha256=iXNm9XA0Hf5UtyMc434neHqt0hbFCvLPPvzu1ohmHu4,719
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=8-PTQqk-9abTY9DqWzUtabWDuMYpLNqw678vhjAQom4,60514
25
+ portacode/connection/handlers/proxmox_infra.py,sha256=vvu1ZGVNxGJ0qoG-cobgVtqHH58Lr_5WO11Un4txFOs,60671
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=AKh7IbwptlLYrbSw5f-DHigvlaKHsg9lDP-lkAUm8cE,10755
@@ -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.13.dev5.dist-info/licenses/LICENSE,sha256=2FGbCnUDgRYuQTkB1O1dUUpu5CVAjK1j4_p6ack9Z54,1066
68
+ portacode-1.4.13.dev7.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.13.dev5.dist-info/METADATA,sha256=2_UghpIjr0yiaPZRhlEMhiCy2Ii4hcA1JQl0jiVExy8,13051
95
- portacode-1.4.13.dev5.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
96
- portacode-1.4.13.dev5.dist-info/entry_points.txt,sha256=lLUUL-BM6_wwe44Xv0__5NQ1BnAz6jWjSMFvZdWW3zU,48
97
- portacode-1.4.13.dev5.dist-info/top_level.txt,sha256=TGhTYUxfW8SyVZc_zGgzjzc24gGT7nSw8Qf73liVRKM,41
98
- portacode-1.4.13.dev5.dist-info/RECORD,,
94
+ portacode-1.4.13.dev7.dist-info/METADATA,sha256=wsfXxckiSZD5SHEvrxPJGx6EGfCxscZBAsGjC5Ivur4,13051
95
+ portacode-1.4.13.dev7.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
96
+ portacode-1.4.13.dev7.dist-info/entry_points.txt,sha256=lLUUL-BM6_wwe44Xv0__5NQ1BnAz6jWjSMFvZdWW3zU,48
97
+ portacode-1.4.13.dev7.dist-info/top_level.txt,sha256=TGhTYUxfW8SyVZc_zGgzjzc24gGT7nSw8Qf73liVRKM,41
98
+ portacode-1.4.13.dev7.dist-info/RECORD,,