e0e362d700
SDK Tests / changes (push) Successful in 2m29s
Real E2E Tests / changes (push) Successful in 2m29s
Deploy Docs Pages / build (push) Has been cancelled
Deploy Docs Pages / deploy (push) Has been cancelled
Real E2E Tests / JavaScript E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Python E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Java E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / C# E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Go E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Real E2E CI (push) Has been cancelled
SDK Tests / SDK CI (push) Has been cancelled
SDK Tests / CLI Tests (push) Has been cancelled
SDK Tests / Python SDK Quality (code-interpreter) (push) Has been cancelled
SDK Tests / Python SDK Quality (sandbox) (push) Has been cancelled
SDK Tests / Python SDK Tests (code-interpreter) (push) Has been cancelled
SDK Tests / JavaScript SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / JavaScript SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Python SDK Tests (sandbox) (push) Has been cancelled
SDK Tests / CLI Quality (push) Has been cancelled
SDK Tests / Kotlin SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Kotlin SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / C# SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / C# SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Go SDK Quality And Tests (push) Has been cancelled
89 lines
2.5 KiB
Python
89 lines
2.5 KiB
Python
# Copyright 2025 Alibaba Group Holding Ltd.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
"""
|
|
Runtime-agnostic persistent models for server-managed snapshots.
|
|
|
|
These models define the server-side source of truth for snapshot metadata,
|
|
restore configuration, and lifecycle status. They are intentionally decoupled
|
|
from both API schemas and runtime-specific objects.
|
|
"""
|
|
|
|
from dataclasses import dataclass, field
|
|
from datetime import datetime
|
|
from enum import Enum
|
|
|
|
|
|
class SnapshotState(str, Enum):
|
|
"""
|
|
Canonical server-side lifecycle states for persisted snapshots.
|
|
"""
|
|
|
|
CREATING = "Creating"
|
|
DELETING = "Deleting"
|
|
READY = "Ready"
|
|
FAILED = "Failed"
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class SnapshotRestoreConfig:
|
|
"""
|
|
Runtime-agnostic restore configuration for a snapshot.
|
|
|
|
Phase 1 stores only the image reference needed to restore a sandbox from the
|
|
snapshot. Keep this as an object so future fields can be added without
|
|
changing the top-level snapshot record shape.
|
|
"""
|
|
|
|
image: str | None = None
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class SnapshotStatusRecord:
|
|
"""
|
|
Server-observed lifecycle status for a snapshot.
|
|
"""
|
|
|
|
state: SnapshotState
|
|
reason: str | None = None
|
|
message: str | None = None
|
|
last_transition_at: datetime | None = None
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class SnapshotRecord:
|
|
"""
|
|
Persisted snapshot resource managed by the lifecycle server.
|
|
"""
|
|
|
|
id: str
|
|
source_sandbox_id: str
|
|
namespace: str | None = None
|
|
name: str | None = None
|
|
description: str | None = None
|
|
restore_config: SnapshotRestoreConfig = field(default_factory=SnapshotRestoreConfig)
|
|
status: SnapshotStatusRecord = field(
|
|
default_factory=lambda: SnapshotStatusRecord(state=SnapshotState.CREATING)
|
|
)
|
|
created_at: datetime = field(default_factory=datetime.utcnow)
|
|
updated_at: datetime = field(default_factory=datetime.utcnow)
|
|
|
|
|
|
__all__ = [
|
|
"SnapshotState",
|
|
"SnapshotRestoreConfig",
|
|
"SnapshotStatusRecord",
|
|
"SnapshotRecord",
|
|
]
|