diff --git a/services/iaasalpha/src/stackit/iaasalpha/__init__.py b/services/iaasalpha/src/stackit/iaasalpha/__init__.py index 2181b9e2a..ae460008b 100644 --- a/services/iaasalpha/src/stackit/iaasalpha/__init__.py +++ b/services/iaasalpha/src/stackit/iaasalpha/__init__.py @@ -79,6 +79,7 @@ from stackit.iaasalpha.models.get_server_log_request import GetServerLogRequest from stackit.iaasalpha.models.icmp_parameters import ICMPParameters from stackit.iaasalpha.models.image import Image +from stackit.iaasalpha.models.image_checksum import ImageChecksum from stackit.iaasalpha.models.image_config import ImageConfig from stackit.iaasalpha.models.image_create_response import ImageCreateResponse from stackit.iaasalpha.models.image_list_response import ImageListResponse diff --git a/services/iaasalpha/src/stackit/iaasalpha/models/__init__.py b/services/iaasalpha/src/stackit/iaasalpha/models/__init__.py index a951c6e65..6882f387e 100644 --- a/services/iaasalpha/src/stackit/iaasalpha/models/__init__.py +++ b/services/iaasalpha/src/stackit/iaasalpha/models/__init__.py @@ -60,6 +60,7 @@ from stackit.iaasalpha.models.get_server_log_request import GetServerLogRequest from stackit.iaasalpha.models.icmp_parameters import ICMPParameters from stackit.iaasalpha.models.image import Image +from stackit.iaasalpha.models.image_checksum import ImageChecksum from stackit.iaasalpha.models.image_config import ImageConfig from stackit.iaasalpha.models.image_create_response import ImageCreateResponse from stackit.iaasalpha.models.image_list_response import ImageListResponse diff --git a/services/iaasalpha/src/stackit/iaasalpha/models/create_image_payload.py b/services/iaasalpha/src/stackit/iaasalpha/models/create_image_payload.py index 3d9be2e3d..0c0725c36 100644 --- a/services/iaasalpha/src/stackit/iaasalpha/models/create_image_payload.py +++ b/services/iaasalpha/src/stackit/iaasalpha/models/create_image_payload.py @@ -31,6 +31,7 @@ ) from typing_extensions import Annotated, Self +from stackit.iaasalpha.models.image_checksum import ImageChecksum from stackit.iaasalpha.models.image_config import ImageConfig @@ -39,6 +40,7 @@ class CreateImagePayload(BaseModel): Object that represents an Image and its parameters. Used for Creating and returning (get/list). """ + checksum: Optional[ImageChecksum] = None config: Optional[ImageConfig] = None created_at: Optional[datetime] = Field( default=None, description="Date-time when resource was created.", alias="createdAt" @@ -56,11 +58,13 @@ class CreateImagePayload(BaseModel): description="The name for a General Object. Matches Names and also UUIDs." ) protected: Optional[StrictBool] = None + scope: Optional[StrictStr] = Field(default=None, description="Scope of an Image.") status: Optional[StrictStr] = Field(default=None, description="The status of an image object.") updated_at: Optional[datetime] = Field( default=None, description="Date-time when resource was last updated.", alias="updatedAt" ) __properties: ClassVar[List[str]] = [ + "checksum", "config", "createdAt", "diskFormat", @@ -70,6 +74,7 @@ class CreateImagePayload(BaseModel): "minRam", "name", "protected", + "scope", "status", "updatedAt", ] @@ -126,11 +131,15 @@ def to_dict(self) -> Dict[str, Any]: * OpenAPI `readOnly` fields are excluded. * OpenAPI `readOnly` fields are excluded. * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. """ excluded_fields: Set[str] = set( [ + "checksum", "created_at", "id", + "scope", "status", "updated_at", ] @@ -141,6 +150,9 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) + # override the default output from pydantic by calling `to_dict()` of checksum + if self.checksum: + _dict["checksum"] = self.checksum.to_dict() # override the default output from pydantic by calling `to_dict()` of config if self.config: _dict["config"] = self.config.to_dict() @@ -157,6 +169,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate( { + "checksum": ImageChecksum.from_dict(obj["checksum"]) if obj.get("checksum") is not None else None, "config": ImageConfig.from_dict(obj["config"]) if obj.get("config") is not None else None, "createdAt": obj.get("createdAt"), "diskFormat": obj.get("diskFormat"), @@ -166,6 +179,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "minRam": obj.get("minRam"), "name": obj.get("name"), "protected": obj.get("protected"), + "scope": obj.get("scope"), "status": obj.get("status"), "updatedAt": obj.get("updatedAt"), } diff --git a/services/iaasalpha/src/stackit/iaasalpha/models/image.py b/services/iaasalpha/src/stackit/iaasalpha/models/image.py index 3ed04e094..fc5f012c7 100644 --- a/services/iaasalpha/src/stackit/iaasalpha/models/image.py +++ b/services/iaasalpha/src/stackit/iaasalpha/models/image.py @@ -31,6 +31,7 @@ ) from typing_extensions import Annotated, Self +from stackit.iaasalpha.models.image_checksum import ImageChecksum from stackit.iaasalpha.models.image_config import ImageConfig @@ -39,6 +40,7 @@ class Image(BaseModel): Object that represents an Image and its parameters. Used for Creating and returning (get/list). """ + checksum: Optional[ImageChecksum] = None config: Optional[ImageConfig] = None created_at: Optional[datetime] = Field( default=None, description="Date-time when resource was created.", alias="createdAt" @@ -56,11 +58,13 @@ class Image(BaseModel): description="The name for a General Object. Matches Names and also UUIDs." ) protected: Optional[StrictBool] = None + scope: Optional[StrictStr] = Field(default=None, description="Scope of an Image.") status: Optional[StrictStr] = Field(default=None, description="The status of an image object.") updated_at: Optional[datetime] = Field( default=None, description="Date-time when resource was last updated.", alias="updatedAt" ) __properties: ClassVar[List[str]] = [ + "checksum", "config", "createdAt", "diskFormat", @@ -70,6 +74,7 @@ class Image(BaseModel): "minRam", "name", "protected", + "scope", "status", "updatedAt", ] @@ -126,11 +131,15 @@ def to_dict(self) -> Dict[str, Any]: * OpenAPI `readOnly` fields are excluded. * OpenAPI `readOnly` fields are excluded. * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. """ excluded_fields: Set[str] = set( [ + "checksum", "created_at", "id", + "scope", "status", "updated_at", ] @@ -141,6 +150,9 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) + # override the default output from pydantic by calling `to_dict()` of checksum + if self.checksum: + _dict["checksum"] = self.checksum.to_dict() # override the default output from pydantic by calling `to_dict()` of config if self.config: _dict["config"] = self.config.to_dict() @@ -157,6 +169,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate( { + "checksum": ImageChecksum.from_dict(obj["checksum"]) if obj.get("checksum") is not None else None, "config": ImageConfig.from_dict(obj["config"]) if obj.get("config") is not None else None, "createdAt": obj.get("createdAt"), "diskFormat": obj.get("diskFormat"), @@ -166,6 +179,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "minRam": obj.get("minRam"), "name": obj.get("name"), "protected": obj.get("protected"), + "scope": obj.get("scope"), "status": obj.get("status"), "updatedAt": obj.get("updatedAt"), } diff --git a/services/iaasalpha/src/stackit/iaasalpha/models/image_checksum.py b/services/iaasalpha/src/stackit/iaasalpha/models/image_checksum.py new file mode 100644 index 000000000..7f6362a34 --- /dev/null +++ b/services/iaasalpha/src/stackit/iaasalpha/models/image_checksum.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +""" + IaaS-API + + This API allows you to create and modify IaaS resources. + + The version of the OpenAPI document: 1alpha1 + Contact: stackit-iaas@mail.schwarz + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 docstring might be too long + +from __future__ import annotations + +import json +import pprint +import re +from typing import Any, ClassVar, Dict, List, Optional, Set + +from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator +from typing_extensions import Annotated, Self + + +class ImageChecksum(BaseModel): + """ + Representation of an image checksum. + """ + + algorithm: StrictStr = Field(description="Algorithm for the checksum of the image data.") + digest: Annotated[str, Field(strict=True)] = Field(description="Hexdigest of the checksum of the image data.") + __properties: ClassVar[List[str]] = ["algorithm", "digest"] + + @field_validator("digest") + def digest_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[0-9a-f]+$", value): + raise ValueError(r"must validate the regular expression /^[0-9a-f]+$/") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of ImageChecksum from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of ImageChecksum from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"algorithm": obj.get("algorithm"), "digest": obj.get("digest")}) + return _obj