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 +2 -2
- portacode/connection/handlers/WEBSOCKET_PROTOCOL.md +3 -0
- portacode/connection/handlers/proxmox_infra.py +12 -15
- {portacode-1.4.16.dev0.dist-info → portacode-1.4.16.dev1.dist-info}/METADATA +1 -1
- {portacode-1.4.16.dev0.dist-info → portacode-1.4.16.dev1.dist-info}/RECORD +9 -9
- {portacode-1.4.16.dev0.dist-info → portacode-1.4.16.dev1.dist-info}/WHEEL +0 -0
- {portacode-1.4.16.dev0.dist-info → portacode-1.4.16.dev1.dist-info}/entry_points.txt +0 -0
- {portacode-1.4.16.dev0.dist-info → portacode-1.4.16.dev1.dist-info}/licenses/LICENSE +0 -0
- {portacode-1.4.16.dev0.dist-info → portacode-1.4.16.dev1.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.16.
|
|
32
|
-
__version_tuple__ = version_tuple = (1, 4, 16, '
|
|
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
|
-
|
|
1845
|
-
if not
|
|
1846
|
-
raise ValueError("
|
|
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=
|
|
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
|
-
|
|
1879
|
-
if not
|
|
1880
|
-
raise ValueError("
|
|
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=
|
|
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
|
-
|
|
1919
|
-
if not
|
|
1920
|
-
raise ValueError("
|
|
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=
|
|
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,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=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=
|
|
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=
|
|
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.
|
|
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.
|
|
95
|
-
portacode-1.4.16.
|
|
96
|
-
portacode-1.4.16.
|
|
97
|
-
portacode-1.4.16.
|
|
98
|
-
portacode-1.4.16.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|