portacode 1.4.12.dev7__py3-none-any.whl → 1.4.12.dev9__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 +68 -12
- {portacode-1.4.12.dev7.dist-info → portacode-1.4.12.dev9.dist-info}/METADATA +1 -1
- {portacode-1.4.12.dev7.dist-info → portacode-1.4.12.dev9.dist-info}/RECORD +8 -8
- {portacode-1.4.12.dev7.dist-info → portacode-1.4.12.dev9.dist-info}/WHEEL +1 -1
- {portacode-1.4.12.dev7.dist-info → portacode-1.4.12.dev9.dist-info}/entry_points.txt +0 -0
- {portacode-1.4.12.dev7.dist-info → portacode-1.4.12.dev9.dist-info}/licenses/LICENSE +0 -0
- {portacode-1.4.12.dev7.dist-info → portacode-1.4.12.dev9.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.12.
|
|
32
|
-
__version_tuple__ = version_tuple = (1, 4, 12, '
|
|
31
|
+
__version__ = version = '1.4.12.dev9'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 4, 12, 'dev9')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -702,15 +702,22 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
|
|
|
702
702
|
|
|
703
703
|
last_pub = last_priv = None
|
|
704
704
|
stable = 0
|
|
705
|
+
history: List[Dict[str, Any]] = []
|
|
706
|
+
|
|
707
|
+
process_exited = False
|
|
708
|
+
exit_out = exit_err = ""
|
|
705
709
|
while time.time() - start < timeout_s:
|
|
706
710
|
if proc.poll() is not None:
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
711
|
+
process_exited = True
|
|
712
|
+
exit_out, exit_err = proc.communicate(timeout=1)
|
|
713
|
+
history.append(
|
|
714
|
+
{
|
|
715
|
+
"timestamp_s": round(time.time() - start, 2),
|
|
716
|
+
"status": "process_exited",
|
|
717
|
+
"returncode": proc.returncode,
|
|
718
|
+
}
|
|
719
|
+
)
|
|
720
|
+
break
|
|
714
721
|
pub_size = file_size(pub_path)
|
|
715
722
|
priv_size = file_size(priv_path)
|
|
716
723
|
if pub_size and priv_size:
|
|
@@ -720,21 +727,60 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
|
|
|
720
727
|
stable = 0
|
|
721
728
|
last_pub, last_priv = pub_size, priv_size
|
|
722
729
|
if stable >= 1:
|
|
730
|
+
history.append(
|
|
731
|
+
{
|
|
732
|
+
"timestamp_s": round(time.time() - start, 2),
|
|
733
|
+
"pub_size": pub_size,
|
|
734
|
+
"priv_size": priv_size,
|
|
735
|
+
"stable": stable,
|
|
736
|
+
}
|
|
737
|
+
)
|
|
723
738
|
break
|
|
739
|
+
history.append(
|
|
740
|
+
{
|
|
741
|
+
"timestamp_s": round(time.time() - start, 2),
|
|
742
|
+
"pub_size": pub_size,
|
|
743
|
+
"priv_size": priv_size,
|
|
744
|
+
"stable": stable,
|
|
745
|
+
}
|
|
746
|
+
)
|
|
724
747
|
time.sleep(1)
|
|
725
748
|
|
|
726
|
-
|
|
749
|
+
final_pub = file_size(pub_path)
|
|
750
|
+
final_priv = file_size(priv_path)
|
|
751
|
+
if final_pub and final_priv:
|
|
752
|
+
key_res = _run_pct(vmid, f"su - {user} -c 'cat {pub_path}'")
|
|
753
|
+
if not process_exited:
|
|
754
|
+
proc.terminate()
|
|
755
|
+
try:
|
|
756
|
+
proc.wait(timeout=3)
|
|
757
|
+
except subprocess.TimeoutExpired:
|
|
758
|
+
proc.kill()
|
|
759
|
+
return {
|
|
760
|
+
"ok": True,
|
|
761
|
+
"public_key": key_res["stdout"].strip(),
|
|
762
|
+
"history": history,
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
if not process_exited:
|
|
727
766
|
proc.terminate()
|
|
728
767
|
try:
|
|
729
768
|
proc.wait(timeout=3)
|
|
730
769
|
except subprocess.TimeoutExpired:
|
|
731
770
|
proc.kill()
|
|
732
|
-
|
|
771
|
+
exit_out, exit_err = proc.communicate(timeout=1)
|
|
772
|
+
history.append(
|
|
773
|
+
{
|
|
774
|
+
"timestamp_s": round(time.time() - start, 2),
|
|
775
|
+
"status": "timeout_waiting_for_keys",
|
|
776
|
+
}
|
|
777
|
+
)
|
|
733
778
|
return {
|
|
734
779
|
"ok": False,
|
|
735
780
|
"error": "timed out waiting for portacode key files",
|
|
736
|
-
"stdout": (
|
|
737
|
-
"stderr": (
|
|
781
|
+
"stdout": (exit_out or "").strip(),
|
|
782
|
+
"stderr": (exit_err or "").strip(),
|
|
783
|
+
"history": history,
|
|
738
784
|
}
|
|
739
785
|
|
|
740
786
|
proc.terminate()
|
|
@@ -747,6 +793,7 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
|
|
|
747
793
|
return {
|
|
748
794
|
"ok": True,
|
|
749
795
|
"public_key": key_res["stdout"].strip(),
|
|
796
|
+
"history": history,
|
|
750
797
|
}
|
|
751
798
|
|
|
752
799
|
|
|
@@ -846,8 +893,17 @@ def _bootstrap_portacode(
|
|
|
846
893
|
if not ok:
|
|
847
894
|
details = results[-1] if results else {}
|
|
848
895
|
summary = details.get("error_summary") or details.get("stderr") or details.get("stdout") or details.get("name")
|
|
896
|
+
history = details.get("history")
|
|
897
|
+
history_snippet = ""
|
|
898
|
+
if isinstance(history, list) and history:
|
|
899
|
+
history_snippet = f" history={history[-3:]}"
|
|
849
900
|
if summary:
|
|
850
|
-
|
|
901
|
+
logger.warning(
|
|
902
|
+
"Portacode bootstrap failure summary=%s%s",
|
|
903
|
+
summary,
|
|
904
|
+
f" history_len={len(history)}" if history else "",
|
|
905
|
+
)
|
|
906
|
+
raise RuntimeError(f"Portacode bootstrap steps failed: {summary}{history_snippet}")
|
|
851
907
|
raise RuntimeError("Portacode bootstrap steps failed.")
|
|
852
908
|
key_step = next((entry for entry in results if entry.get("name") == "portacode_connect"), None)
|
|
853
909
|
public_key = key_step.get("public_key") if key_step else None
|
|
@@ -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=668tKeXH3yS3aDZZCVfpH0iZLHQBrnhANFyo3U_UO7I,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=
|
|
25
|
+
portacode/connection/handlers/proxmox_infra.py,sha256=3niOt7a_SiIc1w1ttpdd5EUCPEbn5iIXqF1ICjMrbG8,53478
|
|
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
|
|
@@ -64,7 +64,7 @@ portacode/utils/__init__.py,sha256=NgBlWTuNJESfIYJzP_3adI1yJQJR0XJLRpSdVNaBAN0,3
|
|
|
64
64
|
portacode/utils/diff_apply.py,sha256=4Oi7ft3VUCKmiUE4VM-OeqO7Gk6H7PF3WnN4WHXtjxI,15157
|
|
65
65
|
portacode/utils/diff_renderer.py,sha256=S76StnQ2DLfsz4Gg0m07UwPfRp8270PuzbNaQq-rmYk,13850
|
|
66
66
|
portacode/utils/ntp_clock.py,sha256=VqCnWCTehCufE43W23oB-WUdAZGeCcLxkmIOPwInYHc,2499
|
|
67
|
-
portacode-1.4.12.
|
|
67
|
+
portacode-1.4.12.dev9.dist-info/licenses/LICENSE,sha256=2FGbCnUDgRYuQTkB1O1dUUpu5CVAjK1j4_p6ack9Z54,1066
|
|
68
68
|
test_modules/README.md,sha256=Do_agkm9WhSzueXjRAkV_xEj6Emy5zB3N3VKY5Roce8,9274
|
|
69
69
|
test_modules/__init__.py,sha256=1LcbHodIHsB0g-g4NGjSn6AMuCoGbymvXPYLOb6Z7F0,53
|
|
70
70
|
test_modules/test_device_online.py,sha256=QtYq0Dq9vME8Gp2O4fGSheqVf8LUtpsSKosXXk56gGM,1654
|
|
@@ -90,8 +90,8 @@ testing_framework/core/playwright_manager.py,sha256=Tw46qwxIhOFkS48C2IWIQHHNpEe-
|
|
|
90
90
|
testing_framework/core/runner.py,sha256=j2QwNJmAxVBmJvcbVS7DgPJUKPNzqfLmt_4NNdaKmZU,19297
|
|
91
91
|
testing_framework/core/shared_cli_manager.py,sha256=BESSNtyQb7BOlaOvZmm04T8Uezjms4KCBs2MzTxvzYQ,8790
|
|
92
92
|
testing_framework/core/test_discovery.py,sha256=2FZ9fJ8Dp5dloA-fkgXoJ_gCMC_nYPBnA3Hs2xlagzM,4928
|
|
93
|
-
portacode-1.4.12.
|
|
94
|
-
portacode-1.4.12.
|
|
95
|
-
portacode-1.4.12.
|
|
96
|
-
portacode-1.4.12.
|
|
97
|
-
portacode-1.4.12.
|
|
93
|
+
portacode-1.4.12.dev9.dist-info/METADATA,sha256=tdgA96CBjBD2vmvw6YxPUuKb02U3pGI_8Anoo69rQqE,13051
|
|
94
|
+
portacode-1.4.12.dev9.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
95
|
+
portacode-1.4.12.dev9.dist-info/entry_points.txt,sha256=lLUUL-BM6_wwe44Xv0__5NQ1BnAz6jWjSMFvZdWW3zU,48
|
|
96
|
+
portacode-1.4.12.dev9.dist-info/top_level.txt,sha256=TGhTYUxfW8SyVZc_zGgzjzc24gGT7nSw8Qf73liVRKM,41
|
|
97
|
+
portacode-1.4.12.dev9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|