plato-sdk-v2 2.7.9__py3-none-any.whl → 2.8.1__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.
- plato/cli/sandbox.py +6 -0
- plato/v2/async_/session.py +158 -0
- plato/v2/sync/session.py +158 -0
- {plato_sdk_v2-2.7.9.dist-info → plato_sdk_v2-2.8.1.dist-info}/METADATA +1 -1
- {plato_sdk_v2-2.7.9.dist-info → plato_sdk_v2-2.8.1.dist-info}/RECORD +7 -7
- {plato_sdk_v2-2.7.9.dist-info → plato_sdk_v2-2.8.1.dist-info}/WHEEL +0 -0
- {plato_sdk_v2-2.7.9.dist-info → plato_sdk_v2-2.8.1.dist-info}/entry_points.txt +0 -0
plato/cli/sandbox.py
CHANGED
|
@@ -747,6 +747,9 @@ def sandbox_ssh(
|
|
|
747
747
|
|
|
748
748
|
Uses .plato/ssh_config from 'start'. Extra args after -- are passed to ssh.
|
|
749
749
|
|
|
750
|
+
NOTE FOR AGENTS: Do not use this command. Instead, use the raw SSH command
|
|
751
|
+
from 'plato sandbox status' which shows: ssh -F .plato/ssh_config sandbox
|
|
752
|
+
|
|
750
753
|
Examples:
|
|
751
754
|
plato sandbox ssh
|
|
752
755
|
plato sandbox ssh -- -L 8080:localhost:8080
|
|
@@ -781,6 +784,9 @@ def sandbox_tunnel(
|
|
|
781
784
|
|
|
782
785
|
Creates a TCP tunnel through the TLS gateway. Useful for database access.
|
|
783
786
|
|
|
787
|
+
NOTE FOR AGENTS: Do not use this command. Use raw SSH port forwarding instead:
|
|
788
|
+
ssh -F .plato/ssh_config sandbox -L <local_port>:127.0.0.1:<remote_port>
|
|
789
|
+
|
|
784
790
|
Examples:
|
|
785
791
|
plato sandbox tunnel 5432 # Forward PostgreSQL
|
|
786
792
|
plato sandbox tunnel 3306 # Forward MySQL
|
plato/v2/async_/session.py
CHANGED
|
@@ -23,6 +23,8 @@ if TYPE_CHECKING:
|
|
|
23
23
|
|
|
24
24
|
from plato._generated.api.v2.jobs import get_flows as jobs_get_flows
|
|
25
25
|
from plato._generated.api.v2.jobs import public_url as jobs_public_url
|
|
26
|
+
from plato._generated.api.v2.jobs import wait_for_ready as jobs_wait_for_ready
|
|
27
|
+
from plato._generated.api.v2.sessions import add_job as sessions_add_job
|
|
26
28
|
from plato._generated.api.v2.sessions import close as sessions_close
|
|
27
29
|
from plato._generated.api.v2.sessions import connect_network as sessions_connect_network
|
|
28
30
|
from plato._generated.api.v2.sessions import disk_snapshot as sessions_disk_snapshot
|
|
@@ -31,6 +33,7 @@ from plato._generated.api.v2.sessions import execute as sessions_execute
|
|
|
31
33
|
from plato._generated.api.v2.sessions import get_public_url as sessions_get_public_url
|
|
32
34
|
from plato._generated.api.v2.sessions import heartbeat as sessions_heartbeat
|
|
33
35
|
from plato._generated.api.v2.sessions import make as sessions_make
|
|
36
|
+
from plato._generated.api.v2.sessions import remove_job as sessions_remove_job
|
|
34
37
|
from plato._generated.api.v2.sessions import reset as sessions_reset
|
|
35
38
|
from plato._generated.api.v2.sessions import set_date as sessions_set_date
|
|
36
39
|
from plato._generated.api.v2.sessions import setup_sandbox as sessions_setup_sandbox
|
|
@@ -39,6 +42,7 @@ from plato._generated.api.v2.sessions import snapshot_store as sessions_snapshot
|
|
|
39
42
|
from plato._generated.api.v2.sessions import state as sessions_state
|
|
40
43
|
from plato._generated.api.v2.sessions import wait_for_ready as sessions_wait_for_ready
|
|
41
44
|
from plato._generated.models import (
|
|
45
|
+
AddJobRequest,
|
|
42
46
|
AppApiV2SchemasSessionCreateSnapshotRequest,
|
|
43
47
|
AppApiV2SchemasSessionCreateSnapshotResponse,
|
|
44
48
|
AppApiV2SchemasSessionEvaluateResponse,
|
|
@@ -49,10 +53,12 @@ from plato._generated.models import (
|
|
|
49
53
|
CreateDiskSnapshotResponse,
|
|
50
54
|
CreateSessionFromEnvs,
|
|
51
55
|
CreateSessionFromTask,
|
|
56
|
+
EnvironmentContext,
|
|
52
57
|
Envs,
|
|
53
58
|
ExecuteCommandRequest,
|
|
54
59
|
ExecuteCommandResponse,
|
|
55
60
|
Flow,
|
|
61
|
+
RemoveJobRequest,
|
|
56
62
|
ResetSessionRequest,
|
|
57
63
|
ResetSessionResponse,
|
|
58
64
|
RunSessionSource,
|
|
@@ -780,6 +786,158 @@ class Session:
|
|
|
780
786
|
|
|
781
787
|
return result
|
|
782
788
|
|
|
789
|
+
async def add_env(
|
|
790
|
+
self,
|
|
791
|
+
env: EnvFromSimulator | EnvFromArtifact | EnvFromResource,
|
|
792
|
+
*,
|
|
793
|
+
timeout: int = 1800,
|
|
794
|
+
heartbeat_timeout: int | None = None,
|
|
795
|
+
wait_for_ready: bool = True,
|
|
796
|
+
) -> Environment:
|
|
797
|
+
"""Add a new environment to this session.
|
|
798
|
+
|
|
799
|
+
The new environment will:
|
|
800
|
+
1. Become part of the session's job group
|
|
801
|
+
2. Be matched to an available VM via the resource matcher
|
|
802
|
+
3. Automatically join the session's WireGuard network if one exists
|
|
803
|
+
|
|
804
|
+
Args:
|
|
805
|
+
env: Environment configuration (from Env.simulator(), Env.artifact(), or Env.resource()).
|
|
806
|
+
timeout: VM timeout in seconds (default: 1800).
|
|
807
|
+
heartbeat_timeout: Per-VM heartbeat timeout. None=use default (300s), 0=disabled.
|
|
808
|
+
wait_for_ready: If True, wait for the job to be ready before returning (default: True).
|
|
809
|
+
|
|
810
|
+
Returns:
|
|
811
|
+
Environment object for the new job.
|
|
812
|
+
|
|
813
|
+
Raises:
|
|
814
|
+
RuntimeError: If session is closed or job creation fails.
|
|
815
|
+
TimeoutError: If wait_for_ready=True and the job doesn't become ready within timeout.
|
|
816
|
+
"""
|
|
817
|
+
self._check_closed()
|
|
818
|
+
|
|
819
|
+
# Auto-generate alias if not set
|
|
820
|
+
if env.alias is None:
|
|
821
|
+
existing_aliases = {e.alias for e in self.envs}
|
|
822
|
+
unique_alias = f"env-{uuid.uuid4().hex[:8]}"
|
|
823
|
+
while unique_alias in existing_aliases:
|
|
824
|
+
unique_alias = f"env-{uuid.uuid4().hex[:8]}"
|
|
825
|
+
env.alias = unique_alias
|
|
826
|
+
|
|
827
|
+
# Build request
|
|
828
|
+
request = AddJobRequest(
|
|
829
|
+
env=env,
|
|
830
|
+
timeout=timeout,
|
|
831
|
+
heartbeat_timeout=heartbeat_timeout,
|
|
832
|
+
)
|
|
833
|
+
|
|
834
|
+
# Call the add_job API
|
|
835
|
+
response = await sessions_add_job.asyncio(
|
|
836
|
+
client=self._http,
|
|
837
|
+
session_id=self.session_id,
|
|
838
|
+
body=request,
|
|
839
|
+
x_api_key=self._api_key,
|
|
840
|
+
)
|
|
841
|
+
|
|
842
|
+
# Check for failures
|
|
843
|
+
if not response.env.success:
|
|
844
|
+
raise RuntimeError(f"Failed to add job: {response.env.error}")
|
|
845
|
+
|
|
846
|
+
if not response.env.job_id:
|
|
847
|
+
raise RuntimeError("Backend did not return job_id for new environment")
|
|
848
|
+
|
|
849
|
+
job_id = response.env.job_id
|
|
850
|
+
|
|
851
|
+
# Wait for the job to be ready if requested
|
|
852
|
+
if wait_for_ready:
|
|
853
|
+
ready_response = await jobs_wait_for_ready.asyncio(
|
|
854
|
+
client=self._http,
|
|
855
|
+
job_id=job_id,
|
|
856
|
+
timeout=timeout,
|
|
857
|
+
x_api_key=self._api_key,
|
|
858
|
+
)
|
|
859
|
+
|
|
860
|
+
if not ready_response.ready:
|
|
861
|
+
error = ready_response.error or "Unknown error"
|
|
862
|
+
raise TimeoutError(f"Job {job_id} did not become ready: {error}")
|
|
863
|
+
|
|
864
|
+
# Update internal context with the new environment
|
|
865
|
+
new_env_context = EnvironmentContext(
|
|
866
|
+
job_id=job_id,
|
|
867
|
+
alias=env.alias,
|
|
868
|
+
artifact_id=response.env.artifact_id,
|
|
869
|
+
simulator=getattr(env, "simulator", None),
|
|
870
|
+
)
|
|
871
|
+
|
|
872
|
+
# Add to context's envs list
|
|
873
|
+
if self._context.envs is None:
|
|
874
|
+
self._context.envs = []
|
|
875
|
+
self._context.envs.append(new_env_context)
|
|
876
|
+
|
|
877
|
+
# Reset cached envs to force rebuild
|
|
878
|
+
self._envs = None
|
|
879
|
+
|
|
880
|
+
# Create and return the Environment object
|
|
881
|
+
new_environment = Environment(
|
|
882
|
+
session=self,
|
|
883
|
+
job_id=job_id,
|
|
884
|
+
alias=env.alias,
|
|
885
|
+
artifact_id=response.env.artifact_id,
|
|
886
|
+
)
|
|
887
|
+
|
|
888
|
+
logger.info(f"Added job {job_id} (alias={env.alias}) to session {self.session_id}")
|
|
889
|
+
return new_environment
|
|
890
|
+
|
|
891
|
+
async def remove_env(self, env: Environment | str) -> None:
|
|
892
|
+
"""Remove an environment from this session.
|
|
893
|
+
|
|
894
|
+
This will:
|
|
895
|
+
1. Remove the job from the session's network (if connected)
|
|
896
|
+
2. Shut down the VM associated with the job
|
|
897
|
+
3. Cancel the job in the system
|
|
898
|
+
|
|
899
|
+
Args:
|
|
900
|
+
env: Environment object or alias string to remove.
|
|
901
|
+
|
|
902
|
+
Raises:
|
|
903
|
+
RuntimeError: If session is closed or removal fails.
|
|
904
|
+
ValueError: If environment not found in session.
|
|
905
|
+
"""
|
|
906
|
+
self._check_closed()
|
|
907
|
+
|
|
908
|
+
# Resolve to job_id
|
|
909
|
+
if isinstance(env, str):
|
|
910
|
+
# Find by alias
|
|
911
|
+
found_env = self.get_env(env)
|
|
912
|
+
if not found_env:
|
|
913
|
+
raise ValueError(f"Environment with alias '{env}' not found in session")
|
|
914
|
+
job_id = found_env.job_id
|
|
915
|
+
alias = env
|
|
916
|
+
else:
|
|
917
|
+
job_id = env.job_id
|
|
918
|
+
alias = env.alias
|
|
919
|
+
|
|
920
|
+
# Call the remove_job API
|
|
921
|
+
request = RemoveJobRequest(job_id=job_id)
|
|
922
|
+
response = await sessions_remove_job.asyncio(
|
|
923
|
+
client=self._http,
|
|
924
|
+
session_id=self.session_id,
|
|
925
|
+
body=request,
|
|
926
|
+
x_api_key=self._api_key,
|
|
927
|
+
)
|
|
928
|
+
|
|
929
|
+
if not response.success:
|
|
930
|
+
raise RuntimeError(f"Failed to remove job {job_id}")
|
|
931
|
+
|
|
932
|
+
# Update internal context - remove the environment
|
|
933
|
+
if self._context.envs:
|
|
934
|
+
self._context.envs = [e for e in self._context.envs if e.job_id != job_id]
|
|
935
|
+
|
|
936
|
+
# Reset cached envs to force rebuild
|
|
937
|
+
self._envs = None
|
|
938
|
+
|
|
939
|
+
logger.info(f"Removed job {job_id} (alias={alias}) from session {self.session_id}")
|
|
940
|
+
|
|
783
941
|
async def cleanup_databases(self) -> SessionCleanupResult:
|
|
784
942
|
"""Clean up database audit logs for all environments.
|
|
785
943
|
|
plato/v2/sync/session.py
CHANGED
|
@@ -22,6 +22,8 @@ if TYPE_CHECKING:
|
|
|
22
22
|
|
|
23
23
|
from plato._generated.api.v2.jobs import get_flows as jobs_get_flows
|
|
24
24
|
from plato._generated.api.v2.jobs import public_url as jobs_public_url
|
|
25
|
+
from plato._generated.api.v2.jobs import wait_for_ready as jobs_wait_for_ready
|
|
26
|
+
from plato._generated.api.v2.sessions import add_job as sessions_add_job
|
|
25
27
|
from plato._generated.api.v2.sessions import close as sessions_close
|
|
26
28
|
from plato._generated.api.v2.sessions import connect_network as sessions_connect_network
|
|
27
29
|
from plato._generated.api.v2.sessions import disk_snapshot as sessions_disk_snapshot
|
|
@@ -29,6 +31,7 @@ from plato._generated.api.v2.sessions import evaluate as sessions_evaluate
|
|
|
29
31
|
from plato._generated.api.v2.sessions import execute as sessions_execute
|
|
30
32
|
from plato._generated.api.v2.sessions import heartbeat as sessions_heartbeat
|
|
31
33
|
from plato._generated.api.v2.sessions import make as sessions_make
|
|
34
|
+
from plato._generated.api.v2.sessions import remove_job as sessions_remove_job
|
|
32
35
|
from plato._generated.api.v2.sessions import reset as sessions_reset
|
|
33
36
|
from plato._generated.api.v2.sessions import set_date as sessions_set_date
|
|
34
37
|
from plato._generated.api.v2.sessions import setup_sandbox as sessions_setup_sandbox
|
|
@@ -37,6 +40,7 @@ from plato._generated.api.v2.sessions import snapshot_store as sessions_snapshot
|
|
|
37
40
|
from plato._generated.api.v2.sessions import state as sessions_state
|
|
38
41
|
from plato._generated.api.v2.sessions import wait_for_ready as sessions_wait_for_ready
|
|
39
42
|
from plato._generated.models import (
|
|
43
|
+
AddJobRequest,
|
|
40
44
|
AppApiV2SchemasSessionCreateSnapshotRequest,
|
|
41
45
|
AppApiV2SchemasSessionCreateSnapshotResponse,
|
|
42
46
|
AppApiV2SchemasSessionEvaluateResponse,
|
|
@@ -47,10 +51,12 @@ from plato._generated.models import (
|
|
|
47
51
|
CreateDiskSnapshotResponse,
|
|
48
52
|
CreateSessionFromEnvs,
|
|
49
53
|
CreateSessionFromTask,
|
|
54
|
+
EnvironmentContext,
|
|
50
55
|
Envs,
|
|
51
56
|
ExecuteCommandRequest,
|
|
52
57
|
ExecuteCommandResponse,
|
|
53
58
|
Flow,
|
|
59
|
+
RemoveJobRequest,
|
|
54
60
|
ResetSessionRequest,
|
|
55
61
|
ResetSessionResponse,
|
|
56
62
|
RunSessionSource,
|
|
@@ -690,6 +696,158 @@ class Session:
|
|
|
690
696
|
|
|
691
697
|
return result
|
|
692
698
|
|
|
699
|
+
def add_env(
|
|
700
|
+
self,
|
|
701
|
+
env: EnvFromSimulator | EnvFromArtifact | EnvFromResource,
|
|
702
|
+
*,
|
|
703
|
+
timeout: int = 1800,
|
|
704
|
+
heartbeat_timeout: int | None = None,
|
|
705
|
+
wait_for_ready: bool = True,
|
|
706
|
+
) -> Environment:
|
|
707
|
+
"""Add a new environment to this session.
|
|
708
|
+
|
|
709
|
+
The new environment will:
|
|
710
|
+
1. Become part of the session's job group
|
|
711
|
+
2. Be matched to an available VM via the resource matcher
|
|
712
|
+
3. Automatically join the session's WireGuard network if one exists
|
|
713
|
+
|
|
714
|
+
Args:
|
|
715
|
+
env: Environment configuration (from Env.simulator(), Env.artifact(), or Env.resource()).
|
|
716
|
+
timeout: VM timeout in seconds (default: 1800).
|
|
717
|
+
heartbeat_timeout: Per-VM heartbeat timeout. None=use default (300s), 0=disabled.
|
|
718
|
+
wait_for_ready: If True, wait for the job to be ready before returning (default: True).
|
|
719
|
+
|
|
720
|
+
Returns:
|
|
721
|
+
Environment object for the new job.
|
|
722
|
+
|
|
723
|
+
Raises:
|
|
724
|
+
RuntimeError: If session is closed or job creation fails.
|
|
725
|
+
TimeoutError: If wait_for_ready=True and the job doesn't become ready within timeout.
|
|
726
|
+
"""
|
|
727
|
+
self._check_closed()
|
|
728
|
+
|
|
729
|
+
# Auto-generate alias if not set
|
|
730
|
+
if env.alias is None:
|
|
731
|
+
existing_aliases = {e.alias for e in self.envs}
|
|
732
|
+
unique_alias = f"env-{uuid.uuid4().hex[:8]}"
|
|
733
|
+
while unique_alias in existing_aliases:
|
|
734
|
+
unique_alias = f"env-{uuid.uuid4().hex[:8]}"
|
|
735
|
+
env.alias = unique_alias
|
|
736
|
+
|
|
737
|
+
# Build request
|
|
738
|
+
request = AddJobRequest(
|
|
739
|
+
env=env,
|
|
740
|
+
timeout=timeout,
|
|
741
|
+
heartbeat_timeout=heartbeat_timeout,
|
|
742
|
+
)
|
|
743
|
+
|
|
744
|
+
# Call the add_job API
|
|
745
|
+
response = sessions_add_job.sync(
|
|
746
|
+
client=self._http,
|
|
747
|
+
session_id=self.session_id,
|
|
748
|
+
body=request,
|
|
749
|
+
x_api_key=self._api_key,
|
|
750
|
+
)
|
|
751
|
+
|
|
752
|
+
# Check for failures
|
|
753
|
+
if not response.env.success:
|
|
754
|
+
raise RuntimeError(f"Failed to add job: {response.env.error}")
|
|
755
|
+
|
|
756
|
+
if not response.env.job_id:
|
|
757
|
+
raise RuntimeError("Backend did not return job_id for new environment")
|
|
758
|
+
|
|
759
|
+
job_id = response.env.job_id
|
|
760
|
+
|
|
761
|
+
# Wait for the job to be ready if requested
|
|
762
|
+
if wait_for_ready:
|
|
763
|
+
ready_response = jobs_wait_for_ready.sync(
|
|
764
|
+
client=self._http,
|
|
765
|
+
job_id=job_id,
|
|
766
|
+
timeout=timeout,
|
|
767
|
+
x_api_key=self._api_key,
|
|
768
|
+
)
|
|
769
|
+
|
|
770
|
+
if not ready_response.ready:
|
|
771
|
+
error = ready_response.error or "Unknown error"
|
|
772
|
+
raise TimeoutError(f"Job {job_id} did not become ready: {error}")
|
|
773
|
+
|
|
774
|
+
# Update internal context with the new environment
|
|
775
|
+
new_env_context = EnvironmentContext(
|
|
776
|
+
job_id=job_id,
|
|
777
|
+
alias=env.alias,
|
|
778
|
+
artifact_id=response.env.artifact_id,
|
|
779
|
+
simulator=getattr(env, "simulator", None),
|
|
780
|
+
)
|
|
781
|
+
|
|
782
|
+
# Add to context's envs list
|
|
783
|
+
if self._context.envs is None:
|
|
784
|
+
self._context.envs = []
|
|
785
|
+
self._context.envs.append(new_env_context)
|
|
786
|
+
|
|
787
|
+
# Reset cached envs to force rebuild
|
|
788
|
+
self._envs = None
|
|
789
|
+
|
|
790
|
+
# Create and return the Environment object
|
|
791
|
+
new_environment = Environment(
|
|
792
|
+
session=self,
|
|
793
|
+
job_id=job_id,
|
|
794
|
+
alias=env.alias,
|
|
795
|
+
artifact_id=response.env.artifact_id,
|
|
796
|
+
)
|
|
797
|
+
|
|
798
|
+
logger.info(f"Added job {job_id} (alias={env.alias}) to session {self.session_id}")
|
|
799
|
+
return new_environment
|
|
800
|
+
|
|
801
|
+
def remove_env(self, env: Environment | str) -> None:
|
|
802
|
+
"""Remove an environment from this session.
|
|
803
|
+
|
|
804
|
+
This will:
|
|
805
|
+
1. Remove the job from the session's network (if connected)
|
|
806
|
+
2. Shut down the VM associated with the job
|
|
807
|
+
3. Cancel the job in the system
|
|
808
|
+
|
|
809
|
+
Args:
|
|
810
|
+
env: Environment object or alias string to remove.
|
|
811
|
+
|
|
812
|
+
Raises:
|
|
813
|
+
RuntimeError: If session is closed or removal fails.
|
|
814
|
+
ValueError: If environment not found in session.
|
|
815
|
+
"""
|
|
816
|
+
self._check_closed()
|
|
817
|
+
|
|
818
|
+
# Resolve to job_id
|
|
819
|
+
if isinstance(env, str):
|
|
820
|
+
# Find by alias
|
|
821
|
+
found_env = self.get_env(env)
|
|
822
|
+
if not found_env:
|
|
823
|
+
raise ValueError(f"Environment with alias '{env}' not found in session")
|
|
824
|
+
job_id = found_env.job_id
|
|
825
|
+
alias = env
|
|
826
|
+
else:
|
|
827
|
+
job_id = env.job_id
|
|
828
|
+
alias = env.alias
|
|
829
|
+
|
|
830
|
+
# Call the remove_job API
|
|
831
|
+
request = RemoveJobRequest(job_id=job_id)
|
|
832
|
+
response = sessions_remove_job.sync(
|
|
833
|
+
client=self._http,
|
|
834
|
+
session_id=self.session_id,
|
|
835
|
+
body=request,
|
|
836
|
+
x_api_key=self._api_key,
|
|
837
|
+
)
|
|
838
|
+
|
|
839
|
+
if not response.success:
|
|
840
|
+
raise RuntimeError(f"Failed to remove job {job_id}")
|
|
841
|
+
|
|
842
|
+
# Update internal context - remove the environment
|
|
843
|
+
if self._context.envs:
|
|
844
|
+
self._context.envs = [e for e in self._context.envs if e.job_id != job_id]
|
|
845
|
+
|
|
846
|
+
# Reset cached envs to force rebuild
|
|
847
|
+
self._envs = None
|
|
848
|
+
|
|
849
|
+
logger.info(f"Removed job {job_id} (alias={alias}) from session {self.session_id}")
|
|
850
|
+
|
|
693
851
|
def login(
|
|
694
852
|
self,
|
|
695
853
|
browser: Browser,
|
|
@@ -421,7 +421,7 @@ plato/cli/chronos.py,sha256=OTS-xcmH0U99sMHrABqtJMOdOEhHil5hv_yO3YNgrS8,27824
|
|
|
421
421
|
plato/cli/main.py,sha256=f-L_Q6MWA8ylGrOcEsJU5HRK1JaDUeh6ONWSaKwag10,6800
|
|
422
422
|
plato/cli/pm.py,sha256=RMZdxIYi1YV4T35soYuYgLqg65ja4sPDw8K9zx3ZLBU,53045
|
|
423
423
|
plato/cli/proxy.py,sha256=c1t1ljZvArTnFba-NprCj2tma4XneEqRDQCbwzQ9GD4,6803
|
|
424
|
-
plato/cli/sandbox.py,sha256=
|
|
424
|
+
plato/cli/sandbox.py,sha256=WN1asUtBa78vy7xW9t4aOTllVELlVGdDe-6PVTO-Bu0,26569
|
|
425
425
|
plato/cli/utils.py,sha256=PIZnJYuhojbARoRA2Tk3KfB5Tycg1uwlPLhut5Es0ew,6900
|
|
426
426
|
plato/cli/verify.py,sha256=fGmKAh9SB2s7Q67oI9q26_gYxZh4JzGMCS4PyfMqb-g,22930
|
|
427
427
|
plato/cli/world.py,sha256=bH-ReNhGdjcba5rXijLfhAKFwsk3GzlQQEtXUFWOZbw,8822
|
|
@@ -506,7 +506,7 @@ plato/v2/async_/chronos.py,sha256=WeqYF3HIKs7hV9LNZb2GlDS1yP6b422DZKtNuPxdL34,12
|
|
|
506
506
|
plato/v2/async_/client.py,sha256=IhiEiwbLNPBr9JJilw4uz7MLKXY_rUZpYGYC1dX-UfA,5186
|
|
507
507
|
plato/v2/async_/environment.py,sha256=M5IeWYLwREOIyuS2zqgBSqHE_x66_OZXrevA9Rkc8Is,5825
|
|
508
508
|
plato/v2/async_/flow_executor.py,sha256=Tl4nRu1ZPWJFNNxyTGy-PxvebZEUD18ZDaz8T2chtzU,14188
|
|
509
|
-
plato/v2/async_/session.py,sha256=
|
|
509
|
+
plato/v2/async_/session.py,sha256=31sJeQNKlUL2g0GRsJAG1OmoQp5LJxwfCECuUBh87CQ,43459
|
|
510
510
|
plato/v2/sync/__init__.py,sha256=3WXLqem7GbicVevLD1lCarr7YI1m6j7-AmJf9OVKKgc,521
|
|
511
511
|
plato/v2/sync/artifact.py,sha256=wTLC-tugG128wLvh-JqNPb0zsw5FXEJlZNahurSWink,1169
|
|
512
512
|
plato/v2/sync/chronos.py,sha256=ChXpasjRzAZjoYTimpPqYydnwEk-IgdxR0SDXDOZbUM,12078
|
|
@@ -514,7 +514,7 @@ plato/v2/sync/client.py,sha256=rsrU7_RhE-syf3FMNw5LaxmF7rYw2GBzC_TPpd-6thk,4986
|
|
|
514
514
|
plato/v2/sync/environment.py,sha256=WnDzbyEHpwCSEP8XnfNSjIYS7rt7lYR4HGJjzprZmTQ,5066
|
|
515
515
|
plato/v2/sync/flow_executor.py,sha256=N41-WCWIJVcCR2UmPUEiK7roNacYoeONkRXpR7lUgT8,13941
|
|
516
516
|
plato/v2/sync/sandbox.py,sha256=yRwkms1_qsHjhbLZQ7FiaLgFme2tMw8YM2xg2-ZZS04,53734
|
|
517
|
-
plato/v2/sync/session.py,sha256=
|
|
517
|
+
plato/v2/sync/session.py,sha256=FYVxgGZ3eL_YpoJiUgJamrt-jVaBqJITzFzepOKMRjA,35065
|
|
518
518
|
plato/v2/utils/__init__.py,sha256=XLeFFsjXkm9g2raMmo7Wt4QN4hhCrNZDJKnpffJ4LtM,38
|
|
519
519
|
plato/v2/utils/db_cleanup.py,sha256=JMzAAJz0ZnoUXtd8F4jpQmBpJpos2__RkgN_cuEearg,8692
|
|
520
520
|
plato/v2/utils/gateway_tunnel.py,sha256=eWgwf4VV8-jx6iCuHFgCISsAOVmNOOjCB56EuZLsnOA,7171
|
|
@@ -526,7 +526,7 @@ plato/worlds/base.py,sha256=-RR71bSxEFI5yydtrtq-AAbuw98CIjvmrbztqzB9oIc,31041
|
|
|
526
526
|
plato/worlds/build_hook.py,sha256=KSoW0kqa5b7NyZ7MYOw2qsZ_2FkWuz0M3Ru7AKOP7Qw,3486
|
|
527
527
|
plato/worlds/config.py,sha256=O1lUXzxp-Z_M7izslT8naXgE6XujjzwYFFrDDzUOueI,12736
|
|
528
528
|
plato/worlds/runner.py,sha256=r9B2BxBae8_dM7y5cJf9xhThp_I1Qvf_tlPq2rs8qC8,4013
|
|
529
|
-
plato_sdk_v2-2.
|
|
530
|
-
plato_sdk_v2-2.
|
|
531
|
-
plato_sdk_v2-2.
|
|
532
|
-
plato_sdk_v2-2.
|
|
529
|
+
plato_sdk_v2-2.8.1.dist-info/METADATA,sha256=28KeU8GL0SE_mIm-O4bDMyGXqpC3H34Vjk4mdBzyZsE,8652
|
|
530
|
+
plato_sdk_v2-2.8.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
531
|
+
plato_sdk_v2-2.8.1.dist-info/entry_points.txt,sha256=iynJvTkU7E4MZNtSozVF0Wh083yPm6cuKV362Ol_ez8,133
|
|
532
|
+
plato_sdk_v2-2.8.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|