# # Copyright (C) 2021 GNS3 Technologies Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from pydantic import ConfigDict, BaseModel, Field from enum import Enum from datetime import datetime from typing import Optional, Literal from .base import DateTimeModelMixin class ImageType(str, Enum): qemu = "qemu" ios = "ios" iou = "iou" class ImageBase(BaseModel): """ Common image properties. """ filename: str = Field(..., description="Image filename") path: str = Field(..., description="Image path") image_type: ImageType = Field(..., description="Image type") image_size: int = Field(..., description="Image size in bytes") checksum: str = Field(..., description="Checksum value") checksum_algorithm: str = Field(..., description="Checksum algorithm") availability: Literal["unknown", "available", "missing", "unavailable", "invalid"] = "unknown" last_seen_at: Optional[datetime] = None last_verified_at: Optional[datetime] = None last_error: Optional[str] = None class Image(DateTimeModelMixin, ImageBase): model_config = ConfigDict(from_attributes=True) class ImageSyncRequest(BaseModel): model_config = ConfigDict(extra="forbid") dry_run: bool = False force_checksum: bool = False class ImageSyncJob(DateTimeModelMixin): model_config = ConfigDict(from_attributes=True) job_id: str status: Literal["queued", "running", "completed", "partial", "failed", "cancelled", "interrupted"] dry_run: bool force_checksum: bool finished_at: Optional[datetime] = None counts: dict[str, int] errors: list[dict[str, str]]