portacode 1.4.16.dev0__py3-none-any.whl → 1.4.16.dev1__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.16.dev0'
32
- __version_tuple__ = version_tuple = (1, 4, 16, 'dev0')
31
+ __version__ = version = '1.4.16.dev1'
32
+ __version_tuple__ = version_tuple = (1, 4, 16, 'dev1')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -381,6 +381,7 @@ Starts a previously provisioned, Portacode-managed LXC container. Handled by [`S
381
381
  **Payload Fields:**
382
382
 
383
383
  * `ctid` (string, required): Identifier of the container to start.
384
+ * `child_device_id` (string, required): Dashboard `Device.id` of the container that triggered the request; the handler validates the CT belongs to that device before issuing the start.
384
385
 
385
386
  **Responses:**
386
387
 
@@ -394,6 +395,7 @@ Stops a running Portacode-managed container. Handled by [`StopProxmoxContainerHa
394
395
  **Payload Fields:**
395
396
 
396
397
  * `ctid` (string, required): Identifier of the container to stop.
398
+ * `child_device_id` (string, required): Dashboard `Device.id` that owns the container; the handler rejects the request if the CT is mapped to another device.
397
399
 
398
400
  **Responses:**
399
401
 
@@ -407,6 +409,7 @@ Deletes a managed container from Proxmox (stopping it first if necessary) and re
407
409
  **Payload Fields:**
408
410
 
409
411
  * `ctid` (string, required): Identifier of the container to delete.
412
+ * `child_device_id` (string, required): Dashboard `Device.id` that should own the container metadata being purged.
410
413
 
411
414
  **Responses:**
412
415
 
@@ -1841,13 +1841,13 @@ class StartProxmoxContainerHandler(SyncHandler):
1841
1841
 
1842
1842
  def execute(self, message: Dict[str, Any]) -> Dict[str, Any]:
1843
1843
  vmid = _parse_ctid(message)
1844
- on_behalf_of_device = (message.get("on_behalf_of_device") or "").strip()
1845
- if not on_behalf_of_device:
1846
- raise ValueError("on_behalf_of_device is required for start_proxmox_container")
1844
+ child_device_id = (message.get("child_device_id") or "").strip()
1845
+ if not child_device_id:
1846
+ raise ValueError("child_device_id is required for start_proxmox_container")
1847
1847
  config = _ensure_infra_configured()
1848
1848
  proxmox = _connect_proxmox(config)
1849
1849
  node = _get_node_from_config(config)
1850
- _ensure_container_managed(proxmox, node, vmid, device_id=on_behalf_of_device)
1850
+ _ensure_container_managed(proxmox, node, vmid, device_id=child_device_id)
1851
1851
 
1852
1852
  status, elapsed = _start_container(proxmox, node, vmid)
1853
1853
  _update_container_record(vmid, {"status": "running"})
@@ -1862,7 +1862,6 @@ class StartProxmoxContainerHandler(SyncHandler):
1862
1862
  "details": {"exitstatus": status.get("exitstatus")},
1863
1863
  "status": status.get("status"),
1864
1864
  "infra": infra,
1865
- "on_behalf_of_device": on_behalf_of_device,
1866
1865
  }
1867
1866
 
1868
1867
 
@@ -1875,13 +1874,13 @@ class StopProxmoxContainerHandler(SyncHandler):
1875
1874
 
1876
1875
  def execute(self, message: Dict[str, Any]) -> Dict[str, Any]:
1877
1876
  vmid = _parse_ctid(message)
1878
- on_behalf_of_device = (message.get("on_behalf_of_device") or "").strip()
1879
- if not on_behalf_of_device:
1880
- raise ValueError("on_behalf_of_device is required for stop_proxmox_container")
1877
+ child_device_id = (message.get("child_device_id") or "").strip()
1878
+ if not child_device_id:
1879
+ raise ValueError("child_device_id is required for stop_proxmox_container")
1881
1880
  config = _ensure_infra_configured()
1882
1881
  proxmox = _connect_proxmox(config)
1883
1882
  node = _get_node_from_config(config)
1884
- _ensure_container_managed(proxmox, node, vmid, device_id=on_behalf_of_device)
1883
+ _ensure_container_managed(proxmox, node, vmid, device_id=child_device_id)
1885
1884
 
1886
1885
  status, elapsed = _stop_container(proxmox, node, vmid)
1887
1886
  final_status = status.get("status") or "stopped"
@@ -1902,7 +1901,6 @@ class StopProxmoxContainerHandler(SyncHandler):
1902
1901
  "details": {"exitstatus": status.get("exitstatus")},
1903
1902
  "status": final_status,
1904
1903
  "infra": infra,
1905
- "on_behalf_of_device": on_behalf_of_device,
1906
1904
  }
1907
1905
 
1908
1906
 
@@ -1915,13 +1913,13 @@ class RemoveProxmoxContainerHandler(SyncHandler):
1915
1913
 
1916
1914
  def execute(self, message: Dict[str, Any]) -> Dict[str, Any]:
1917
1915
  vmid = _parse_ctid(message)
1918
- on_behalf_of_device = (message.get("on_behalf_of_device") or "").strip()
1919
- if not on_behalf_of_device:
1920
- raise ValueError("on_behalf_of_device is required for remove_proxmox_container")
1916
+ child_device_id = (message.get("child_device_id") or "").strip()
1917
+ if not child_device_id:
1918
+ raise ValueError("child_device_id is required for remove_proxmox_container")
1921
1919
  config = _ensure_infra_configured()
1922
1920
  proxmox = _connect_proxmox(config)
1923
1921
  node = _get_node_from_config(config)
1924
- _ensure_container_managed(proxmox, node, vmid, device_id=on_behalf_of_device)
1922
+ _ensure_container_managed(proxmox, node, vmid, device_id=child_device_id)
1925
1923
 
1926
1924
  stop_status, stop_elapsed = _stop_container(proxmox, node, vmid)
1927
1925
  delete_status, delete_elapsed = _delete_container(proxmox, node, vmid)
@@ -1933,7 +1931,6 @@ class RemoveProxmoxContainerHandler(SyncHandler):
1933
1931
  "action": "remove",
1934
1932
  "success": True,
1935
1933
  "ctid": str(vmid),
1936
- "on_behalf_of_device": on_behalf_of_device,
1937
1934
  "message": f"Deleted container {vmid} in {delete_elapsed:.1f}s.",
1938
1935
  "details": {
1939
1936
  "stop_exitstatus": stop_status.get("exitstatus"),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: portacode
3
- Version: 1.4.16.dev0
3
+ Version: 1.4.16.dev1
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=VRcygEdkbj_kT_PkjvrdxuvM8kPIsg1rBzzADtCIQiA,719
4
+ portacode/_version.py,sha256=GIIli9Dhw-ATT-eIwJy91sV8_rQyusPNRLOIP0Kcwf4,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
@@ -14,7 +14,7 @@ portacode/connection/client.py,sha256=jtLb9_YufqPkzi9t8VQH3iz_JEMisbtY6a8L9U5wei
14
14
  portacode/connection/multiplex.py,sha256=L-TxqJ_ZEbfNEfu1cwxgJ5vUdyRzZjsMy2Kx1diiZys,5237
15
15
  portacode/connection/terminal.py,sha256=n1Uu92JacV5K6d1Qwx94Tw9OB2Tpke5HqsW2NDn76Ls,49032
16
16
  portacode/connection/handlers/README.md,sha256=HsLZG1QK1JNm67HsgL6WoDg9nxzKXxwkc5fJPFJdX5g,12169
17
- portacode/connection/handlers/WEBSOCKET_PROTOCOL.md,sha256=OtObmoVAXlf0uU1HidTWNmyJYBS1Yl6Rpgyh6TOTjUQ,100590
17
+ portacode/connection/handlers/WEBSOCKET_PROTOCOL.md,sha256=Dfkx6is1Xwt1PgCRqTKrP2zhfy3TmkmhSx9G29VMLB8,101054
18
18
  portacode/connection/handlers/__init__.py,sha256=WSeBmi65GWFQPYt9M3E10rn0uZ_EPCJzNJOzSf2HZyw,2921
19
19
  portacode/connection/handlers/base.py,sha256=oENFb-Fcfzwk99Qx8gJQriEMiwSxwygwjOiuCH36hM4,10231
20
20
  portacode/connection/handlers/chunked_content.py,sha256=h6hXRmxSeOgnIxoU8CkmvEf2Odv-ajPrpHIe_W3GKcA,9251
@@ -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=Pe-GX5IjQhjyBPxm0hNNLoKm7NZPmOsRCPRdEIkmjhE,73134
25
+ portacode/connection/handlers/proxmox_infra.py,sha256=LEUj6jVyP73sD6Wp2-m3SAj0rkXQo_wpiXyyNdpg6Zo,72906
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.16.dev0.dist-info/licenses/LICENSE,sha256=2FGbCnUDgRYuQTkB1O1dUUpu5CVAjK1j4_p6ack9Z54,1066
68
+ portacode-1.4.16.dev1.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.16.dev0.dist-info/METADATA,sha256=UbwKMn3EpfoXPgYPALM8B5GwR0TluW6buRsbfQZhvlc,13051
95
- portacode-1.4.16.dev0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
96
- portacode-1.4.16.dev0.dist-info/entry_points.txt,sha256=lLUUL-BM6_wwe44Xv0__5NQ1BnAz6jWjSMFvZdWW3zU,48
97
- portacode-1.4.16.dev0.dist-info/top_level.txt,sha256=TGhTYUxfW8SyVZc_zGgzjzc24gGT7nSw8Qf73liVRKM,41
98
- portacode-1.4.16.dev0.dist-info/RECORD,,
94
+ portacode-1.4.16.dev1.dist-info/METADATA,sha256=o_jrDB3G7xX3NmEC-8tgJktj-XRB772p7fo4TqRZ_Is,13051
95
+ portacode-1.4.16.dev1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
96
+ portacode-1.4.16.dev1.dist-info/entry_points.txt,sha256=lLUUL-BM6_wwe44Xv0__5NQ1BnAz6jWjSMFvZdWW3zU,48
97
+ portacode-1.4.16.dev1.dist-info/top_level.txt,sha256=TGhTYUxfW8SyVZc_zGgzjzc24gGT7nSw8Qf73liVRKM,41
98
+ portacode-1.4.16.dev1.dist-info/RECORD,,