portacode 1.4.12.dev6__py3-none-any.whl → 1.4.12.dev8__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 +53 -27
- {portacode-1.4.12.dev6.dist-info → portacode-1.4.12.dev8.dist-info}/METADATA +1 -1
- {portacode-1.4.12.dev6.dist-info → portacode-1.4.12.dev8.dist-info}/RECORD +8 -8
- {portacode-1.4.12.dev6.dist-info → portacode-1.4.12.dev8.dist-info}/WHEEL +1 -1
- {portacode-1.4.12.dev6.dist-info → portacode-1.4.12.dev8.dist-info}/entry_points.txt +0 -0
- {portacode-1.4.12.dev6.dist-info → portacode-1.4.12.dev8.dist-info}/licenses/LICENSE +0 -0
- {portacode-1.4.12.dev6.dist-info → portacode-1.4.12.dev8.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.dev8'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 4, 12, 'dev8')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -468,13 +468,7 @@ def _build_bootstrap_steps(user: str, password: str, ssh_key: str) -> List[Dict[
|
|
|
468
468
|
steps.extend([
|
|
469
469
|
{"name": "pip_upgrade", "cmd": "python3 -m pip install --upgrade pip", "retries": 0},
|
|
470
470
|
{"name": "install_portacode", "cmd": "python3 -m pip install --upgrade portacode", "retries": 0},
|
|
471
|
-
{
|
|
472
|
-
"name": "portacode_connect",
|
|
473
|
-
"type": "portacode_connect",
|
|
474
|
-
"timeout_s": 30,
|
|
475
|
-
"retries": 2,
|
|
476
|
-
"retry_delay_s": 5,
|
|
477
|
-
},
|
|
471
|
+
{"name": "portacode_connect", "type": "portacode_connect", "timeout_s": 30},
|
|
478
472
|
])
|
|
479
473
|
return steps
|
|
480
474
|
|
|
@@ -708,14 +702,24 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
|
|
|
708
702
|
|
|
709
703
|
last_pub = last_priv = None
|
|
710
704
|
stable = 0
|
|
705
|
+
history: List[Dict[str, Any]] = []
|
|
706
|
+
|
|
711
707
|
while time.time() - start < timeout_s:
|
|
712
708
|
if proc.poll() is not None:
|
|
713
709
|
out, err = proc.communicate(timeout=1)
|
|
710
|
+
history.append(
|
|
711
|
+
{
|
|
712
|
+
"timestamp_s": round(time.time() - start, 2),
|
|
713
|
+
"status": "process_exited",
|
|
714
|
+
"returncode": proc.returncode,
|
|
715
|
+
}
|
|
716
|
+
)
|
|
714
717
|
return {
|
|
715
718
|
"ok": False,
|
|
716
719
|
"error": "portacode connect exited before keys were created",
|
|
717
720
|
"stdout": (out or "").strip(),
|
|
718
721
|
"stderr": (err or "").strip(),
|
|
722
|
+
"history": history,
|
|
719
723
|
}
|
|
720
724
|
pub_size = file_size(pub_path)
|
|
721
725
|
priv_size = file_size(priv_path)
|
|
@@ -726,7 +730,23 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
|
|
|
726
730
|
stable = 0
|
|
727
731
|
last_pub, last_priv = pub_size, priv_size
|
|
728
732
|
if stable >= 1:
|
|
733
|
+
history.append(
|
|
734
|
+
{
|
|
735
|
+
"timestamp_s": round(time.time() - start, 2),
|
|
736
|
+
"pub_size": pub_size,
|
|
737
|
+
"priv_size": priv_size,
|
|
738
|
+
"stable": stable,
|
|
739
|
+
}
|
|
740
|
+
)
|
|
729
741
|
break
|
|
742
|
+
history.append(
|
|
743
|
+
{
|
|
744
|
+
"timestamp_s": round(time.time() - start, 2),
|
|
745
|
+
"pub_size": pub_size,
|
|
746
|
+
"priv_size": priv_size,
|
|
747
|
+
"stable": stable,
|
|
748
|
+
}
|
|
749
|
+
)
|
|
730
750
|
time.sleep(1)
|
|
731
751
|
|
|
732
752
|
if stable < 1:
|
|
@@ -736,11 +756,18 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
|
|
|
736
756
|
except subprocess.TimeoutExpired:
|
|
737
757
|
proc.kill()
|
|
738
758
|
out, err = proc.communicate(timeout=1)
|
|
759
|
+
history.append(
|
|
760
|
+
{
|
|
761
|
+
"timestamp_s": round(time.time() - start, 2),
|
|
762
|
+
"status": "timeout_waiting_for_keys",
|
|
763
|
+
}
|
|
764
|
+
)
|
|
739
765
|
return {
|
|
740
766
|
"ok": False,
|
|
741
767
|
"error": "timed out waiting for portacode key files",
|
|
742
768
|
"stdout": (out or "").strip(),
|
|
743
769
|
"stderr": (err or "").strip(),
|
|
770
|
+
"history": history,
|
|
744
771
|
}
|
|
745
772
|
|
|
746
773
|
proc.terminate()
|
|
@@ -753,6 +780,7 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
|
|
|
753
780
|
return {
|
|
754
781
|
"ok": True,
|
|
755
782
|
"public_key": key_res["stdout"].strip(),
|
|
783
|
+
"history": history,
|
|
756
784
|
}
|
|
757
785
|
|
|
758
786
|
|
|
@@ -785,26 +813,15 @@ def _run_setup_steps(
|
|
|
785
813
|
progress_callback(step_index, computed_total, step, "in_progress", None)
|
|
786
814
|
|
|
787
815
|
if step.get("type") == "portacode_connect":
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
attempts += 1
|
|
793
|
-
res = _portacode_connect_and_read_key(vmid, user, timeout_s=step.get("timeout_s", 10))
|
|
794
|
-
res["name"] = step["name"]
|
|
795
|
-
res["attempt"] = attempts
|
|
796
|
-
results.append(res)
|
|
797
|
-
if res.get("ok"):
|
|
798
|
-
if progress_callback:
|
|
799
|
-
progress_callback(step_index, computed_total, step, "completed", res)
|
|
800
|
-
break
|
|
801
|
-
will_retry = attempts < max_attempts
|
|
816
|
+
res = _portacode_connect_and_read_key(vmid, user, timeout_s=step.get("timeout_s", 10))
|
|
817
|
+
res["name"] = step["name"]
|
|
818
|
+
results.append(res)
|
|
819
|
+
if not res.get("ok"):
|
|
802
820
|
if progress_callback:
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
time.sleep(retry_delay)
|
|
821
|
+
progress_callback(step_index, computed_total, step, "failed", res)
|
|
822
|
+
return results, False
|
|
823
|
+
if progress_callback:
|
|
824
|
+
progress_callback(step_index, computed_total, step, "completed", res)
|
|
808
825
|
continue
|
|
809
826
|
|
|
810
827
|
attempts = 0
|
|
@@ -863,8 +880,17 @@ def _bootstrap_portacode(
|
|
|
863
880
|
if not ok:
|
|
864
881
|
details = results[-1] if results else {}
|
|
865
882
|
summary = details.get("error_summary") or details.get("stderr") or details.get("stdout") or details.get("name")
|
|
883
|
+
history = details.get("history")
|
|
884
|
+
history_snippet = ""
|
|
885
|
+
if isinstance(history, list) and history:
|
|
886
|
+
history_snippet = f" history={history[-3:]}"
|
|
866
887
|
if summary:
|
|
867
|
-
|
|
888
|
+
logger.warning(
|
|
889
|
+
"Portacode bootstrap failure summary=%s%s",
|
|
890
|
+
summary,
|
|
891
|
+
f" history_len={len(history)}" if history else "",
|
|
892
|
+
)
|
|
893
|
+
raise RuntimeError(f"Portacode bootstrap steps failed: {summary}{history_snippet}")
|
|
868
894
|
raise RuntimeError("Portacode bootstrap steps failed.")
|
|
869
895
|
key_step = next((entry for entry in results if entry.get("name") == "portacode_connect"), None)
|
|
870
896
|
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=nE85_ZPmwxcGnUUwZo-c56maL3k35W0GWwB3dFJmT-o,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=9YYIZFf1uMcB67vBqPA14gQd14-QZo-DX8eS7mekF14,53103
|
|
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.dev8.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.dev8.dist-info/METADATA,sha256=j1-Q9VdU_Jceje1hG31JZ9YDUFfh--0GhmCIJlCtGTk,13051
|
|
94
|
+
portacode-1.4.12.dev8.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
95
|
+
portacode-1.4.12.dev8.dist-info/entry_points.txt,sha256=lLUUL-BM6_wwe44Xv0__5NQ1BnAz6jWjSMFvZdWW3zU,48
|
|
96
|
+
portacode-1.4.12.dev8.dist-info/top_level.txt,sha256=TGhTYUxfW8SyVZc_zGgzjzc24gGT7nSw8Qf73liVRKM,41
|
|
97
|
+
portacode-1.4.12.dev8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|